对于多视点图像的理解

对于多视点图像的理解

前言

我们知道计算机的计算能力非常强,因为计算机里面的硬件结构例如累加器,移位器等等,主要是因为硬件在设计的时候已经定义了计算机运算的规则,例如计算方式采用类似于什么补码,反码加减方式等等,已经事先安排好的规则,是一般是不容易改变的,例如二进制01+01=10,当然计算溢出了就另当别论了。

而我们学习的例如:语音或者是图像识别,因为语音和图像输入的变化量太大了,

举一个简单的例子:同一只狗在不同的角度,不同的光线,不同的动作下。图像捕捉到的一瞬间像素差异是非常大的。就算是同一张照片,旋转90度或者缩放大小后,其像素差异也非常大。

所以图片里的内容相似甚至相同,但是在像素层面,其变化会非常大。这对于特征提取很难。就像一个人,你可以形容他高矮胖瘦等几个关键的因素就可以很好表达哪个人了。

但是对于一张静态的图片的话。举个例子,手机上随便拍一张照片就是1000*2000像素的。每个像素 RGB 3个参数,一共有1000 X 2000 X 3=6,000,000。随便一张照片就要处理 600万 个参数,这只是一个静止的图片,视频或者动画中的每一张画面,而视频和动画特效就是由无数张画面组合而成,每一张画面都是一帧。于我们大多数手机视频拍摄能力,无论是 720P 还是 1080P 基本都只有 30 帧每秒,现在越来越流行的 4K 视频,一些手机也可以拍出 4K 视频,甚至可以使用 135 帧每秒的超高速拍摄功能。就知道这个计算量级有多恐怖了。

以上遇到的种种困难可以概括为以下

  • 特征值提取困难:同一只物体在不同的角度,不同的光线,不同的动作下的差异
  • 需要处理的数据量庞大:单个照片至少要处理600万个以上参数

所以为了不要重复的造轮子,由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用的计算机视觉库——opencv的诞生了。


OpencCV

OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。

OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。

而我个人的理解opencv是一个图像处理库,一个工具,只是其中封装了传统的机器学习方法和特征提取方式。

OpenCV可用于解决如下领域的问题:

  • 增强现实
  • 人脸识别
  • 手势识别
  • 人机交互
  • 动作识别
  • 运动跟踪
  • 物体识别
  • 图像分割
  • 机器人

详情可以看博文

计算机视觉博文
https://blog.****.net/jankin6/category_9863253.html


人脸识别技术

类别

人脸识别需要相应的设备来获取我们人脸的面部信息,例如目前手机上获取我们人脸面部信息的方式有两种:

  • 一种是目前绝大数安卓手机的方案:就是直接通过前置摄像头实现的2D人脸识别。

  • 另一种是像苹果手机,由刘海部分的元器件实现的3D人脸识别。

    对于多视点图像的理解

无论3D还是2D人脸识别,原理大体上都是差不多的:

原理

我们第一次使用人脸识别的时候和指纹识别一样,

  • 第一步,要录入我们人脸的面部信息,要通过摄像头采集到我们的面部信息。

  • 第二步,要先对我们的图像进行处理(因为我们在录入面部信息的时候所处的环境都是不同的,有的图像光可能有点弱,有的图像噪点又有点多,所以要先对图像进行处理,让手机可以更容易的识别出我们的面部信息)。

  • 第三步,就要对我们面部的特征信息进行提取,比如面部各个器官之间的距离,以及器官的几何形状等等,这些都可以被提取为特征信息。

  • 第四步,提取完我们的面部特征信息之后,这些特征信息就会被储存下来。

当我们解锁手机的时候,手机又会重复前面的步骤,把提取到的面部特征信息,和我们第一次录入的面部特征信息进行对比,只要能对上绝大多数的特征信息(不能说100%吻合,大概有个80-90%以上的吻合),就可以解锁手机,这个就是我们人脸识别的基本原理。

差异不足

在整个流程中,提取面部特征信息这一步,就像我们设置密码一样,密码包含的信息越多,安全性就越高,而我们目前的有些安卓手机,都是通过一个前置摄像头,都是直接拍摄我们人脸的照片,获取的都是一个平面的图像,也就是我们说的2D人脸识别,因为摄像头拍摄到的是一个平面图像,其实换句话也可以这么说就是得到了一张照片,对着摄像头就可以骗过我们的人脸识别,因为不管我们是用摄像头拍立体的人脸,还是直接对着一张照片,那最终拍下来的都是一个平面的图像,所以2D人脸识别就像是一个6位的纯数字密码一样,安全性不高。

为了提高2D人脸识别的安全性,也会有各种各样的算法,比如边框检测 反光检测之类的算法,可以在一定程度上,避免用照片或者视频骗过2D人脸识别,但是本质上提取得到的特征信息太少,就像是一个6位的纯数字密码一样,安全性无法保证。

所以现在的网站用户注册的时候会提高密码的位数 增加大小写字母,甚至要包括是特殊符号,以此类推我们人脸识别只有增加更多的特征信息,才能在本质上提高人脸识别的安全性,所以我们除了要获取人脸器官之间的距离 几何形状,还要获取人脸的深度信息,也就是我们说的3D人脸识别技术

人脸深度信息的技术

目前获取我们人脸深度信息的技术主要有三种

  • 一种是ToF(Time Of Flight)。就是传感器发射出红外光,红外光再从物体表面反射回传感器,传感器通过发射和反射光之间的相位差换算出深度信息,因为已知光速和调制光的波长,所以能快速准确计算出到物体的距离。

    对于多视点图像的理解

  • 第二种是双目测距技术。和我们的人眼类似,直接用两个摄像头进行拍摄,就会得到两个不一样的平面图像,再把两张图像上相同的特征点标注出来,最后再基于三角测量原理计算出深度信息。

    对于多视点图像的理解

  • 第三种3D结构光技术。双目测距的难点在于,要准确的标出两幅图像的共同特征点来。举例子,好比我和我的室友在食堂吃饭,突然发现前面有个好看的妹子,我说那个穿白色衣服的妹子很漂亮,但是食堂可能不止一个穿白色衣服的,所以我室友可能会认错人。 那怎样才能解决这个问题呢,我一支激光笔,直接指向某个人说是这个,这下我们立马就可以找到目标,这个就是我们说的3D结构光技术。例如,苹果刘海里面有一个点阵投影器和一个红外摄像头点阵投影器投影光点到我们的脸上,红外摄像头直接找到投影到脸上的光点,找到光点之后,后面的步骤就和双目测距一样,用三角测量的原理计算出各个光点的深度信息,这个就是我们3D结构光的原理。

对于多视点图像的理解

3D结构光技术细分也可以将结构光技术分为:

  • 散斑结构光,它的散斑有一定的随机性,所以安全性会更好,但相应的计算量也会更大

  • 编码结构光,好处是计算量要小一些,但和前者比较的话,安全性会稍低一些

点云配准过程一般分为三步:

  1. 3D关键点的选取;
  2. 对关键点处几何特征的描述;
  3. 到目标点云的匹配。 本文对不同的特征点选取(NARF和3D-SIFT)和特征描述方法(PFH,FPFH,PFHRGB,SHOT,Color-SHOT)进行比较,发现采用FPFH描述子能够提高点云配准的准确度和减少运算时间,而特征点的选取通常会降低匹配的准确性

常见的三维重建表达方式

常规的3D shape representation有以下四种:深度图(depth)、点云(point cloud)、体素(voxel)、网格(mesh)。

对于多视点图像的理解

深度图其每个像素值代表的是物体到相机xy平面的距离,单位为 mm。

对于多视点图像的理解

体素是三维空间中的一个有大小的点,一个小方块,相当于是三维空间种的像素。

对于多视点图像的理解

点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标X,Y,Z、颜色、分类值、强度值、时间等等。在我看来点云可以将现实世界原子化,通过高精度的点云数据可以还原现实世界。万物皆点云,获取方式可通过三维激光扫描等。

对于多视点图像的理解用三角网格重建

三角网格就是全部由三角形组成的多边形网格。多边形和三角网格在图形学和建模中广泛使用,用来模拟复杂物体的表面,如建筑、车辆、人体,当然还有茶壶等。任意多边形网格都能转换成三角网格。

三角网格需要存储三类信息:

顶点:每个三角形都有三个顶点,各顶点都有可能和其他三角形共享。 .

边:连接两个顶点的边,每个三角形有三条边。

面:每个三角形对应一个面,我们可以用顶点或边列表表示面。

参考资料

引用资料

维基百科-oencv

基于模糊匹配的多视点图像配准方法

基于多尺度分析的空间阵列图像配准研究

基于结构光的立体视觉

对点云配准的关键点和描述子的选取的比较

基于深度学习的视觉三维重建研究总结