- 从三维物体到二维成像损失了深度信息,因此直接处理三维数据理应得到更好的结果也是解决问题最直接最根本的方法
特征点检测与匹配
背景介绍
-
三维模型重建流程:三维点云获取(这些点是没有结构的,但是可能有一些属性,如颜色和法向量) -> 几何结构恢复(由点云到网格表面重建) -> 场景绘制(渲染的过程)
-
三维点云的获取方式:雷达获取 / Kinect / 单目多视角 / 双目立体视觉
-
首先有大量图像(可以是无序的)然后进行运动恢复结构,进行稀疏点云的重建(对相机进行标定,得到相机的所有对外参数,然后在这个基础上进行多视角的稠密匹配来得到稠密点云)。接着对点云进行结构化(网格重建)然后为了提高网格可视化的效果,对网格进行贴纹理。最后由于图像光度存在一些变化,所以可能存在一些比较明显的缝隙,就需要用图像处理,如柏松图像编辑去去除缝隙。
图像特征点介绍
- 特征点要具有光度/旋转/尺度的不变性
图像特征检测子 Feature Detector
Harris角点检测
- 如何描述这个差异性:以这个点为中心取一个窗口(5*5 / 7 * 7) 若这个点有差异性,那么我们把这个窗口往任意点移动,其变化都比较大。
- (x,y)是窗口内每一个像素 / w为权重,设为高斯权重:距离点近的权重大 / I表示取像素 / 第二步泰勒展开 / u和v代表方向
- 但很少进行Harris矩阵特征值分析,因为其运算量太大,取而代之是用Harris角点检测
- 图像一般拿来有很多噪声,一般先使用高斯滤波来将图像进行平滑操作。避免存在一些变化比较大的值。
- Harris角点一般用在视频里的快速跟踪。但其窗口大小固定无法解决尺度变化的问题。所以提出了LOG这种尺度归一化算法
基于LoG的特征检测子
- 对图像使用不同大小的滤波核进行滤波。使用比较大的滤波核滤波后,图像会变得模糊。这样就得到了一连串图像,将其摞在一起,就像是一个三维图像。
- 尺度空间是模拟人的视觉,看比较远的物体模糊,比较近的物体清晰。
- 但LoG算法运算量太大
基于DoG的特征检测子(SIFT)
- 这里L高斯空间也就是前面的尺度空间
- 特征点是具有旋转不变性的,即相机视角变化,仍可以检测到。
快速特征检测
特征描述子
- 基于直方图 / 基于不变性的描述子 / 二进制描述子
- 通过特征检测子我们确定了特征点的位置,但我们用到特征点的时候通常用的是特征点的一个匹配。要想匹配特征点的话,就需要用到特征点的一个身份:特征描述子。
- 在计算特征匹配的时候实际上是计算向量之间的距离。
- 特征支持区域
- 主方向保持旋转不变性,特征尺度表示支撑区域的大小
基于直方图的描述子
- 只适用于变化非常小的图片之间,如视频序列。当图片发生旋转,光照等,这种方法就不再适用了。
- 旋转不变性:统计支撑区域内每一个点的梯度方向,找到比较一致的方向,就是主方向。比如:我们将360度分为8个区间,每45度是一个区间。一个16像素的区域,统计这些像素的梯度方向,如果里面有12个像素的梯度方向都处于45度的空间,那么我们的主方向也就是45度。
- 这个主方向是不管你是什么视角,不管你的视角有多大,我都能通过这个主方向来把你对齐到同一个方向上,所以只要是同一个特征点,其局部区域都是一样的。
- 为了让特征点具有光照不变性,所以就需要对像素进行归一化(光照引起的图像变化一般是一个固定值)
- 这样的话,16*8 = 128,我们就得到了一个128维的特征向量。
(一般变形都是其支撑区域发生变化)
二进制描述子(BRIEF)
- 计算使用的不再是欧式距离了,而是汉明距离。
特征匹配
- 距离度量 / 匹配策略 / 高效匹配 / 特征匹配验证
距离度量
- 计算两幅图像中特征描述子的匹配关系。
匹配策略
高效匹配
- 错误的匹配可以通过估计相机模型的方式去除