特征检测

发布时间 2023-06-01 15:18:42作者: Laplace蒜子

特征点/区域

局部特征点的要求

可重复性和正确性:平面内几何变换不变,平面外几何变化不变,光照鲁邦。

局部性:特征是局部的,对遮挡物不敏感。

数量:要有足够多的特征点/区域来覆盖整个物体

特异性:区域需包含“感兴趣的”结构

有效性:接近实时

特征响应

在任何方向移动窗口,灰度值有较大的改变。

灰度改变度量/特征响应度量

基于灰度

优点:直接用图像灰度值,计算速度块,对噪声不敏感。

角点:特征点与其邻域内足够多的像素点处于不同区域

FAST

邻域Np:Bresenham圆上的16个像素。

特征响应度量:圆上有n个连续的像素点的灰度值都大于或小于中心点的值。

16个像素的轮询顺序决定检测速度(决策树决定轮询顺序)

ORB

在FAST基础上加速。

邻域Np:只包括上下左右四个像素点,效果与和16个像素比较相同。

特征响应度量:至少有一对连续像素的灰度高于Ip+t或小于Ip-t则将p作为关键点。

搜索时间缩减了四倍。

使用图像金字塔保证尺度不变。

使用执行标定方向保证旋转不变。

基于灰度一阶导数——Harris角点检测器

角点

两条直线的交点,轮廓的高曲率点。

窗口函数w(x,y)

可以是二值(窗口内为1,窗口外为0),也可以是高斯函数。

移动后[u,v]灰度值的变换SSD

梯度近似SSD

使用泰勒展开,变化后的灰度值 近似为 变化前的灰度加上梯度。

   

Ix为x方向梯度,Iy为y方向梯度。

自相关矩阵

 

自相关矩阵特征值与变化率的关系

M的特征向量决定方向,特征值λ的大小决定与特征值λ对应特征向量的模长。

在SSD中,特征向量的模长可以视为变化的快慢,也就是特征值越大,变化越快。

特征向量决定方向,特征值决定变化快慢。

特征值1表示水平方向变化率,特征值2表示竖直方向变化率。

在水平边缘上,特征值2远大于特征值1。在竖直边缘上,特征值1远大于特征值2。

在角点,任意方向的变化率都非常大,故所有的特征值都很大。

Harris角点检测器

Harris角点检测器中,因为计算特征值分解的计算量大,不直接计算特征值。

利用公式,将对特征值的运算,转换为对矩阵元素的运算

利用自相关矩阵

R=ac-b2-α(a+c)2

Harris角点检测器步骤

1.计算图像x方向和y方向的梯度Ix,Iy(梯度)

2.计算每个像素点的梯度的乘积。(梯度乘积

3.计算每个像素点的梯度的乘积的累积(直接用每个像素点梯度乘积的累积求自相关矩阵M,这里使用高斯核)(累积梯度

x方向梯度乘积累积,x方向和y方向梯度乘积的累积,y方向的梯度乘积累积。

4.定义每个像素点的矩阵M(自相关矩阵)

5.计算每个像素点的角点响应R

6.对响应R做阈值处理和非极大值抑

基于灰度的二阶导数

Harris角点检测器的问题

Harris具有平移不变性,旋转不变性,但是不具有尺度不变性

自动尺度选择

理想的特征尺度函数是突出剧烈的图像不连续性:图像与突出边缘核进行卷积。高斯核的拉普拉斯算子(LoG)是最优的。

因此在高斯金字塔/拉普拉斯金字塔上计算LoG。

二维高斯核拉普拉斯算子

一阶导

二阶导

高斯核的拉普拉斯算子LoG的导数进行卷积分析(为了简便,以一维为例)

使用高斯拉普拉斯LoG一阶导进行卷积时,边缘点就是响应值最大的点。

使用高斯拉普拉斯LoG二阶导进行卷积时,边缘点就是响应值过0的点。

LoG斑点检测

假设一组一维的像素出现斑点,也就是某段区域灰度突然变大。(这里为了简便)

从上述推论可知,使用高斯核的拉普拉斯算子(二阶导)进行卷积的时候,过0点就是其边缘点。

所以在检测斑点的时候,要检测各个边界,也就是过0点。

但是使用不同σ的LoG,得到的过0点位置不同。

当LoG的尺度与斑点的宽度匹配时,LoG的幅值在斑点的中心取得最大值。

  

因为σ可以调节的,所以LoG算子可以检测不同尺寸图片上的斑点。

二维上的过0点的响应最大值(例如一个圆)

LoG的过0点应该和圆对齐,从而推导出合适的σ参数。

所以有如下结论

边缘:灰度值跃迁,与二阶LoG卷积后的过0点。

斑点:两个阶跃之间的区域,也就是两个过0点之间的区域。

本征尺度:调整σ,过0点逐渐靠近,最终合并成一个最大值,得到的响应最大尺度。

目标:使得两个过0点逐渐接近,逐渐形成最大值,这个最大值就是斑点。

LoG可以通过调整σ,检测到不同尺寸图像的斑点。

斑点检测基本步骤

求二维LoG的梯度

再做归一化(归一化见下一节推导)

找到响应最大的尺度,也就是找到合适的σ

代入归一化的LoG即可求得。

归一化的高斯核拉普拉斯算子

用不同尺度的LoG和信号卷积,寻找幅值的最大值,选择最佳尺度。

但是随着尺度的增大,LoG的曲线由双波谷逐渐融合成单波谷。且最大幅度逐渐减小,响应尺度也不断减少,无法判断尺度是否合适,因此需要进行尺度归一化

归一化方式:对于一阶高斯核的导数的响应值乘以σ,保证σ不变。对于二阶高斯核的导数的响应值乘以σ2,从而对σ不变。

  

尺度归一化后的效果

尺度不变检测器DoG(Difference of Gaussian)

可以将LoG近似为DoG计算效率更高

检测尺度归一化的LoG在尺度空间的极值,近似于检测DoG在尺度空间的极值,且DoG效率更高。

DoG与LoG的关系

k-1是常量,不影响函数极值点

k的选择

k趋近于1时,近似程度越高,但是需要计算更多的DoG

Lowe的SIFT基本步骤

构造尺度空间——高斯金字塔:使用高斯函数和与原图像卷积,然后下采样

尺度空间极值检测:使用DoG检测。

关键点定位

关键点方向确定

关键点描述

构造高斯金字塔

对图像采用不同尺度σ的高斯函数进行平滑。

平滑操作会减少图像中的高频信息。这样也就没必要再用相同数量的像素表示,可以缩小尺寸。对图像进行下采样,逐渐形成金字塔。

平滑图像

相邻金字塔的尺度因子为2倍。

注:大尺度的高斯平滑可通过连续小尺度σ1,σ2高斯平滑,这样可以加速卷积运算。

L(x,y,σ) = g(σ) * I(x,y) = [ g(σ1) * g(σ2) ] * I(x,y)  = g(σ1) * [ g(σ2)*I(x,y)  ],其中σ21222

下采样

水平和竖直分辨率变为原来的一半

  

初始

预先模糊输入图像作为第0组第0层图像,相当于丢弃了最高的空域的采样率。

SIFT中Lowe将初始图像的尺度设定为σ-1=0.5,先将图像的尺度扩大一倍,生成第-1组图像。

构造图像金字塔

尺度空间:八度(o)和八度中的第几层(s)组成尺度空间。

一个八度中图像的长宽都相等,也就是变量八度控制图像尺寸。

一个八度中不同层(s)的图像模糊程度不同,也就会层(s)控制模糊程度。

每个八度(Octave)内有S+3层(Interval)。

相邻八度尺度相差2倍,同一组相邻层尺度相差k倍。

第0个八度的尺度:

σ0,kσ0,...,ksσ0,ks+1σ0,ks+2σ0

第1个八度的尺度:

2 σ0,2 kσ0,...,2 ksσ0,2 ks+1σ0,2 ks+2σ0

第2个八度的尺度:

4 σ0,4 kσ0,...,4 ksσ0,4 ks+1σ0,4 ks+2σ0

....

第n个八度的尺度:

2n σ0,2n0,...,2n ksσ0,2n ks+1σ0,2n ks+2σ0

上一个八度的导数第三层 和 下一个八度的第0层相同:

也就是

ksσ0=2 σ0,得到:

构造高斯差分金字塔

在高斯金字塔中,每两个相邻层进行相减,生成了高斯差分金字塔。

第一个八度中高斯差分图像的尺寸为:(系数2都是n/3次方)

第二个八度中高斯差分图像的尺寸为:

 

   去除边缘效应

DoG算子会产生较强的边缘响应,需要剔除不稳定的边缘响应点。

       类似于Harris角点检测器,使用DoG算子定义Hessian矩阵

  

为了能够剔除边缘点,det(H)和trace(H)的比值要小于一定阈值:

通常r取10。

极值点检测

每个八度的S+3个金字塔图像,得到S+2DoG图像,只能检测S个尺度的极值点。

Lowe建议S=3,也就是检测同尺度的8个相邻点,和上下相邻尺度对应的18个点,一共26个点进行比较。