基于视频图像的识别算法

       一个典型的基于视频图像的人脸识别系统一般都是自动检测人脸区域,从视频中提取特征,最后如果人脸存在则识别出人脸的身份。在视频监控、信息安全和出入控制等应用中,基于视频的人脸识别是一个非常重要的问题,也是目前人脸识别的一个热点和难点。基于视频比基于静态图像更具优越性,因为 Bruce 等人和 Knight 等人已证明,当人脸被求反或倒转时,运动信息有助于(熟悉的)人脸的识别。虽然视频人脸识别是基于静态图像的人脸识别的直接扩展,但一般认为视频人脸识别算法需要同时用到空间和时间信息,这类方法直到近几年才开始受到重视并需要进一步的研究和发展。目前视频人脸识别还有很多困难和挑战,具体来说有以下几种:

   视频图像质量比较差:视频图像一般是在户外(或室内,但是采集条件比较差)获取的,通常没有用户的配合,所以视频人脸图像经常会有很大的光照和姿态变化。另外还可能会有遮挡和伪装。

   人脸图像比较小:同样,由于采集条件比较差,视频人脸图像一般会比基于静态图像的人脸识别系统的预设尺寸小。小尺寸的图像不但会影响识别算法的性能,而且还会影响人脸检测,分割和关键点定位的精度,这必然会导致整个人脸识别系统性能的下降。

   视频人脸识别起源于基于静态图像的人脸识别,即识别系统自动的检测和分割出人脸,然后用基于静态图像的识别方法进行识别。对这类方法的一个提高是加入了人脸跟踪。在这类系统中,通过利用姿态和从视频中估计到的深度信息合成一个虚拟的正面人脸。这个阶段的另外一个能提高识别率的方法是利用视频中充裕的帧图像,基于每帧图像的识别结果,使用 ” 投票 ” 机制。投票方法可以是确定的,但是概率投票方法一般来说更好。投票机制的一个缺点是计算结果的代价比较昂贵。

   视频人脸识别的第二个发展阶段是利用多模态信息。因为人类一般会利用多种信息识别人的身份,所以一个多模态系统将比只利用人脸的识别系统性能更好。更重要的是利用多模态信息提供了一种方法,它能全面解决那些只靠人脸无法识别的任务。例如,在一个完全没有配合的环境(比如抢劫),歹徒的脸一般是蒙着的,这时唯一能进行无人脸识别的方法就是分析歹徒躯体的运动特性。除了指纹,人脸和声音是最常用于身份识别的信息。它们已经被用于很多多模态身份识别系统。 1997 年以来,每两年,就会召开一个专门关于基于视频和语音身份识别的国际会议。

   最近几年,视频人脸识别进入第三个发展阶段,这个阶段方法的特点是同时采用空间信息(在每帧中)和时间信息(比如人脸特征的运动轨迹)。区别于概率投票方法的一个很大的不同之处在于,此类方法是在时间和空间的联合空间中描述人脸和识别人脸的。

   视频图像的一个非常重要的特性是它的时间连续性,以及由此产生的人脸信息的不确定性。在人脸跟踪和识别中利用时间信息是视频人脸识别算法和基于静态图像的人脸识别算法的最大区别。目前这类算法大致可分为两类:

  1. 跟踪 - 然后 - 识别,这类方法首先检测出人脸,然后跟踪人脸特征随时间的变化。当捕捉到一帧符合一定标准(大小,姿势)的图像时,用基于静态图像的人脸识别算法进行识别。这类方法中跟踪和识别是单独进行的,时间信息只在跟踪阶段用到。识别还是采用基于静态图像的方法,没用到时间信息。
  2. 跟踪 - 且 - 识别,这类方法中,人脸跟踪和识别是同时进行的,时间信息在跟踪阶段和识别阶段都用到。
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ImageComparerUI——基于Java语言实现的相似图像识别,基于直方比较算法。 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.MediaTracker; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JPanel; public class ImageComparerUI extends JComponent implements ActionListener { /** * */ private static final long serialVersionUID = 1L; private JButton browseBtn; private JButton histogramBtn; private JButton compareBtn; private Dimension mySize; // image operator private MediaTracker tracker; private BufferedImage sourceImage; private BufferedImage candidateImage; private double simility; // command constants public final static String BROWSE_CMD = "Browse..."; public final static String HISTOGRAM_CMD = "Histogram Bins"; public final static String COMPARE_CMD = "Compare Result"; public ImageComparerUI() { JPanel btnPanel = new JPanel(); btnPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); browseBtn = new JButton("Browse..."); histogramBtn = new JButton("Histogram Bins"); compareBtn = new JButton("Compare Result"); // buttons btnPanel.add(browseBtn); btnPanel.add(histogramBtn); btnPanel.add(compareBtn); // setup listener... browseBtn.addActionListener(this); histogramBtn.addActionListener(this); compareBtn.addActionListener(this); mySize = new Dimension(620, 500); JFrame demoUI = new JFrame("Similiar Image Finder"); demoUI.getContentPane().setLayout(new BorderLayout()); demoUI.getContentPane().add(this, BorderLayout.CENTER); demoUI.getContentPane().add(btnPanel, BorderLayout.SOUTH); demoUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); demoUI.pack(); demoUI.setVisible(true); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; if(sourceImage != null) { Image scaledImage = sourceImage.getScaledInstance(300, 300, Image.SCALE_FAST); g2.drawImage(scaledImage, 0, 0, 300, 300, null); } if(candidateImage != null) { Image scaledImage = candidateImage.getScaledInstance(300, 330, Image.SCALE_FAST); g2.drawImage(scaledImage, 310, 0, 300, 300, null); } // display compare result info here Font myFont = new Font("Serif", Font.BOLD, 16); g2.setFont(myFont); g2.setPaint(Color.RED); g2.drawString("The degree of similarity : " + simility, 50, 350); } public void actionPerformed(ActionEvent e) { if(BROWSE_CMD.equals(e.getActionCommand())) { JFileChooser chooser = new JFileChooser(); chooser.showOpenDialog(null); File f = chooser.getSelectedFile(); BufferedImage bImage = null; if(f == null) return; try { bImage = ImageIO.read(f); } catch (IOException e1) { e1.printStackTrace(); } tracker = new MediaTracker(this); tracker.addImage(bImage, 1); // blocked 10 seconds to load the image data try { if (!tracker.waitForID(1, 10000)) { System.out.println("Load error."); System.exit(1); }// end if } catch (InterruptedException ine) { ine.printStackTrace(); System.exit(1); } // end catch if(sourceImage == null) { sourceImage = bImage; }else if(candidateImage == null) { candidateImage = bImage; } else { sourceImage = null; candidateImage = null; }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值