图像特征匹配技术——点集匹配(一)

1,411 阅读8分钟

特征匹配已广泛应用于计算机视觉和模式识别等诸多领域,常用方法是将其分为两阶段:

  • 第一阶段,显著的明显的特征,即从每幅图像中提取关键点及其局部描述子(descriptor),基于描述子的相似度约束建立一组假定的特征对应。
  • 第二阶段,通过额外的局部或全局几何约束来排除错误匹配或异常值。

手工特征匹配

两阶段特征匹配流水线的第一步是建立一组初始对应关系。经典方法包括scale invariant feature transform (SIFT)、speed up robust features (SURF)、oriented FAST and rotated BRIEF (ORB)。这些经典的特征匹配器在效率和鲁棒性方面都表现出了良好的性能,并被广泛应用于各个领域。

SIFT(1999)

检测兴趣点

SIFT框架首先需要检测兴趣点,称为:keypoints。利用高斯滤波器对图像进行不同尺度的卷积,然后获取连续高斯模糊图像的差分(图像差分:把两幅图像的对应像素值相减,以削弱图像的相似部分,突出显示图像的变化部分)。在多个尺度在高斯差分(Difference of Gaussians, DoG)的最大/最小值取为Keypoints。具体的,一个DoG图D(x,y,σ)D(x,y,\sigma)定义为:

D(x,y,σ)=L(x,y,kiσ)L(x,y,kjσ)D(x,y,\sigma)= L(x,y,k_i\sigma)-L(x,y,k_j\sigma)

此处的L(x,y,kσ)L(x,y,k\sigma)指的是原始图像I(x,y)I(x,y)经过尺度为kσk\sigma的高斯模糊G(x,y,kσ)G(x,y,k\sigma)卷积过的结果。即:

L(x,y,kσ)=G(x,y,kσ)I(x,y)L(x,y,k\sigma)=G(x,y,k\sigma)*I(x,y)

也就是说一个在尺度kiσ,kjσk_i\sigma,k_j\sigma间的DoG图就是在尺度kiσ,kjσk_i\sigma,k_j\sigma间高斯模糊图像的差分。

获取DoG图后,将DoG图像中的每个像素与同一尺度下的8个相邻像素以及每个相邻尺度下的9个对应相邻像素进行比较,如果该像素值是所有比较像素中最大或最小的,则将其作为候选关键点。

舍弃不必要的点

仅使用上面的方法会产生太多的候选关键点如下图所示,而且其中一些是不稳定的。算法的下一步是对附近的数据进行细节拟合,以获得精确位置、尺度和主曲率比值(ratio of principal curvatures),这种方式排除了低对比度(因此对噪声敏感)或沿边缘局部较差的点。

首先,对每个候选keypoints,利用附近数据的插值来精确确定其位置。插值计算使用二项式泰勒展开式在差值高斯尺度空间函数(Difference-of-Gaussian scale-space function)上,即D(x,y,σ)D(x,y,\sigma),以候选keypoint为原点。泰勒展开式为:

D(x)=D+DTxx+12xT2Dx2xD(x)=D+\frac{\partial D^T}{\partial x}x+\frac{1}{2}x^T\frac{\partial ^2 D}{\partial x^2}x

其中,DD及其导数在候选keypoint处计算,x=(x,y,σ)Tx=(x,y,\sigma)^T表示该点的偏移量。

为了剔除对比度低的keypoints,对二阶泰勒展开D(x)D(x)在偏移x^\hat{x}的值进行了计算,若小于0.03则抛弃该点。

DoG函数沿着边缘会有很强的响应,导致候选关键点对少量噪声没有鲁棒性。因此,为了增加鲁棒性需要消除那些位置不确定但边缘响应高的关键点。对于DoG函数中定义较差的峰,沿边缘的主曲率将比沿边缘的主曲率大得多,找到这些主曲率等于求解二阶Hessian矩阵HH的特征值:

H=[DxxDxyDxyDyy]H=\left[ \begin{matrix} D_{xx}&D_{xy}\\ D_{xy}& D_{yy} \end{matrix} \right]

HH的特征值与DD的主曲率成正比,R=Tr(H)2/Det(H)R=Tr(H)^2/Det(H),两个特征值的绝对差越大,相当于DD的两个主曲率的绝对差越大,RR的值越大。对于阈值特征值比rthr_{th},一个keypoint的RR若大于(rth+1)2/rth(r_{th}+1)^2/r_{th},该点被认为是位置不确定的点并剔除。

为关键点标定方向

在此步骤中,每个关键点根据局部图像的梯度方向分配一个或多个方向。这是实现旋转不变性的关键步骤,因为关键点描述器可以相对于这个方向表示,实现图像旋转不变性

对于高斯模糊图像L(x,y,σ)L(x,y,\sigma),keypoint的尺度σ\sigma使所有计算都以尺度不变的方式执行。对于一个图像样本L(x,y)L(x,y)在尺度σ\sigma上,梯度梯度幅值(gradient magnitude :梯度幅值是描述标量场局部变化率的标量)m(x,y)m(x,y)和方向θ(x,y)\theta(x,y),使用像素差值预先计算:

m(x,y)=(L(x+1,y)L(x1,y)2+L(x,y+1)L(x,y1))2θ(x,y)=atan2(L(x,y+1)L(x,y1),L(x+1,y)L(x1,y))m(x,y)=\sqrt{(L(x+1,y)-L(x-1,y)^2+L(x,y+1)-L(x,y-1))^2} \\ \theta(x,y)=atan2(L(x,y+1)-L(x,y-1),L(x+1,y)-L(x-1,y))

对高斯模糊图像l中关键点附近区域的每个像素进行梯度大小和方向计算,形成36个bin的方向直方图,每个bin覆盖10度。

缺点

SIFT算法的缺点

SURF

SIFT算法的速度较慢,SURF是其加速版。

SIFT中使用高斯差分寻找尺度空间来近似拉普拉斯算子(Laplacian of Gaussian,LoG),SURF使用积分图像的概念按照积分图,图像与高斯二阶微分模板的滤波转换为了对积分图像的加减运算,降低特征点检测搜索时间。图像点的二阶微分Hessian矩阵的行列式(determinant of Hessian,DoH),可用于图像斑点检测(斑点检测意义和原理

SURF的介绍

ORB

ORB是oriented FAST and rotated BRIEF的简称,ORB的诞生主要是因为SIFT和SURF当时是专利算法。而ORB是免费使用的。在特征检测方面,ORB的表现与SIFT一样好(优于SURF),而且几乎快了两个数量级,ORB基于FAST关键点检测器和BRIEF描述器。

FAST(feature from accelerated segment test)关键点检测

image.png

  • 选择图像中的一个像素pp,确定其是否为兴趣点,其强度为IpIp
  • 选择合适的阈值tt
  • 考虑一个围绕被测试像素的16像素的圆。(这是一个半径为3的Bresenham Circle)
  • 若圆上nn个连续像素(此处的n=16)的值都亮于或都暗于Ip+tIp+t,像素pp则被认为是一个角点。
  • 为了让算法更快,首先对于圆上的1、5、9、13个像素,从上图中可以明显看出,这四个像素中至少有三个应该满足阈值标准,这样才可能存在兴趣点。
  • 重复上述步骤直到算法完成。

然而FAST特征没有方向组件和多尺度特征,ORB算法使用多尺度图像金字塔,图像金字塔是单一图像的多尺度表示,它由图像序列组成,所有这些图像都是不同分辨率的图像版本。金字塔中的每一层都包含比前一层低采样的图像。通过检测每一层的关键点,ORB算法可以有效地定位不同尺度的关键点,从而就具有局部尺度不变性。

image.png

定位关键点后需要给每个关键点分配一个方向,比如朝左还是朝右,这取决于关键点周围强度的变化程度。为了检测强度变化,ORB算法使用强度中心,强度中心假设一个角点的强度从它的中心偏移,该向量可以用来估算方向。定义一个patch的moments为:

mpq=x,yxpyPI(x,y)m_{pq}=\sum_{x,y}x^py^PI(x,y)

有了这些moments,我们就可以找到patch的center of mass,即

C=(m10m00,m01m00)C=(\frac{m_{10}}{m_{00}},\frac{m_{01}}{m_{00}})

我们可以构造一个从角的中心OO到质心(center of mass)OC-OC的向量,则该patch的方向定义为:

θ=atan2(m01,m10)\theta=atan2(m_{01},m_{10})

atan=tan1atan=tan^{-1},下图为一个方向计算的例子:

image.png

一旦我们计算出patch的方向,我们就可以将其旋转到正则旋转,然后计算描述器,从而得到一定的旋转不变性。

# Brief(Binary robust independent elementary feature)

Brief采通过FAST算法找到的所有关键点,并将其转换为二进制特征向量,从而共同表示一个对象。二进制特征向量又称二进制特征描述器,是只包含1和0的特征向量。简单地说,每个关键点由一个128-512位字符串组成的特征向量来描述。

image.png

首先,使用高斯核平滑图像,以防止描述器对高频噪声敏感。在像素周围定义的邻域称为patch,它是某个像素的宽度和高度的正方形。随机对中的第一个像素来自于一个以关键点为中心的高斯分布,该分布的偏差和范围同Sigma一致。随机对中的第二个像素来自于以第一个像素为中心的高斯分布,其标准差或标准差为2。现在,如果第一个像素比第二个像素亮,它将赋给相应的位值1,否则为0。

image.png

再次简短地选择一个随机对,并为它们赋值。对于一个128位向量,对一个关键点简单地重复这个过程128次。然而,BRIEF也不是旋转不变的,因此orb使用rBRIEF(Rotation-aware BRIEF)。

对于一个平滑图像patch p。一个二进制测试τ\tau定义为:

image.png

p(x)p(x)表示图像pp在点xx处的强度,特征定义为nn个二进制测试值的向量:

f(n)=1<i<n2i1τ(p;xi,yi)f(n)=\sum_{1<i<n}2^{i-1}\tau(p;x_i,y_i)

当平面内旋转超过几度时,BRIEF的匹配性能急剧下降。ORB提出了一种根据关键点方向控制BRIEF的方法。对于某个特征的nn个二进制测试值在位置(xi,yi)(x_i,y_i)处,我们需要一个2Xn矩阵:

image.png

使用patch方向θ\theta及其对应的旋转矩阵RθR\theta,并构建一个SθS_\theta

Sθ=RθSS_\theta=R_\theta S

则BRIEF操作器变为:

image.png

然后将角度离散为2π/30(12度),并构造一个预计算的BRIEF图形查找表。