特征提取
特征提取是指影像上明显区别于其他物体的目标,可以从几何形状、灰度、纹理等方面进行识别,常见的几何特征有点特征、线特征、面特征。由计算机自动进行特征提取主要通过各种算子(operator)实现。
点特征提取方法
Moravec算子
基本思想是,以像元的四个主要方向上最小灰度方差表示该像元与邻近像元的灰度变化情况,即像元的兴趣值(interest value),然后在图像的局部选择具有最大兴趣值的点,是选择具有最大&最小灰度方差的点作为特征点。
算法:
首先,计算各像元的兴趣值;
{D1=∑i=−kk−1(gc+i,r−gc+i+1,r)2D2=∑i=−kk−1(gc+i,r+i−gc+i+1,r+i+1)2D3=∑i=−kk−1(gc,r+i−gc,r+i+1)2D4=∑i=−kk−1(gc+i,r−i−gc+i+1,r−i−1)2
\left\{
\begin{aligned}
D_1= \sum_{i=-k}^{k-1}(g_{c+i,r}-g_{c+i+1,r})^2 \\
D_2= \sum_{i=-k}^{k-1}(g_{c+i,r+i}-g_{c+i+1,r+i+1})^2 \\
D_3= \sum_{i=-k}^{k-1}(g_{c,r+i}-g_{c,r+i+1})^2 \\
D_4= \sum_{i=-k}^{k-1}(g_{c+i,r-i}-g_{c+i+1,r-i-1})^2
\end{aligned}
\right.
⎩⎨⎧D1=i=−k∑k−1(gc+i,r−gc+i+1,r)2D2=i=−k∑k−1(gc+i,r+i−gc+i+1,r+i+1)2D3=i=−k∑k−1(gc,r+i−gc,r+i+1)2D4=i=−k∑k−1(gc+i,r−i−gc+i+1,r−i−1)2
其中,k=INT(n/2)k=INT(n/2)k=INT(n/2).取最小值为像元(c,r)(c,r)(c,r)的兴趣值:
INc,r=min{D1,D2,D3,D4}IN_{c,r} = min\{D_1, D_2, D_3, D_4\}INc,r=min{D1,D2,D3,D4}
根据给定的阈值,选择兴趣值大于该阈值的点作为候选特征点;
在候选点中选取局部极大值点作为特征点。
- 程序实现占位
Förstner算子
基本思想是通过计算各像元的Roberts梯度和以像元(c,r)(c,r)(c,r)为中心的一个窗口的灰度协方差矩阵,在图片中查找误差椭圆尽可能小而又接近圆形的点作为特征点。
计算过程:
(1)计算各像元的Roberts梯度以及n×nn \times nn×n窗口中高灰度的协方差矩阵QQQ,最后计算每个像元的兴趣值ω\omegaω与qqq。
Roberts梯度为
{gu=∂g∂u=gi+1,j+1−gi,jgv=∂g∂v=gi,j+1−gi+1,j
\left\{
\begin{aligned}
g_u= \frac{\partial g}{\partial u} = g_{i+1,j+1}-g_{i,j}\\
g_v= \frac{\partial g}{\partial v} = g_{i,j+1}-g_{i+1,j} \\
\end{aligned}
\right.
⎩⎨⎧gu=∂u∂g=gi+1,j+1−gi,jgv=∂v∂g=gi,j+1−gi+1,j
其中,
∑gu2=∑i=c−kc+k−1∑j=r−kr+k−1(gi+1,j+1−gi,j)2
\sum g_{u}^{2} = \sum_{i=c-k}^{c+k-1}\sum_{j=r-k}^{r+k-1}(g_{i+1,j+1} - g_{i,j})^2
∑gu2=i=c−k∑c+k−1j=r−k∑r+k−1(gi+1,j+1−gi,j)2
∑gv2=∑i=c−kc+k−1∑j=r−kr+k−1(gi,j+1−gi+1,j)2
\sum g_{v}^{2} = \sum_{i=c-k}^{c+k-1}\sum_{j=r-k}^{r+k-1}(g_{i,j+1} - g_{i+1,j})^2
∑gv2=i=c−k∑c+k−1j=r−k∑r+k−1(gi,j+1−gi+1,j)2
∑gugv=∑i=c−kc+k−1∑j=r−kr+k−1(gi+1,j+1−gi.j)(gi,j+1−gi+1,j)
\sum g_{u}g_{v} = \sum_{i=c-k}^{c+k-1}\sum_{j=r-k}^{r+k-1}(g_{i+1,j+1} - g_{i.j})(g_{i,j+1}-g_{i+1,j})
∑gugv=i=c−k∑c+k−1j=r−k∑r+k−1(gi+1,j+1−gi.j)(gi,j+1−gi+1,j)
通过下面公式求得,
ω=1tr Q=Det Ntr N\omega = \frac{1}{tr \space Q}=\frac{Det \space N}{tr \space N}ω=tr Q1=tr NDet N
q=4Det N(tr N)2=1−(a2−b2)a2+b2
q=\frac{4Det\space N}{(tr\space N)^2}=1-\frac{(a^2-b^2)}{a^2+b^2}
q=(tr N)24Det N=1−a2+b2(a2−b2)
上面,Det NDet\space NDet N代表矩阵NNN的行列式;tr Ntr \space Ntr N表示矩阵NNN的逆;qqq为像元(c,r)(c,r)(c,r)对应的误差椭圆的圆度,其中a,ba,ba,b分别是椭圆的长、短半轴。
(2)设置一定的经验阈值,选取兴趣值大于该阈值的点作为候选点。兴趣值大于给定的阈值,则该像元为待选点;阈值为经验值,参考范围如下:
Tq=0.5 to 0.75T_q = 0.5\space to \space0.75Tq=0.5 to 0.75
Tω={fω‾(f=0.5 to 1.5)cωc(c=5)
T_\omega= \left\{
\begin{aligned}
f \overline{\omega} (f = 0.5 \space to\space1.5)\\
c \omega_c (c=5) \\
\end{aligned}
\right.
Tω={fω(f=0.5 to 1.5)cωc(c=5)
其中,ω‾\overline{\omega}ω为权平均值,ωc\omega_cωc为权的中值;当q>Tqq>T_qq>Tq,ω>Tω\omega>T_{\omega}ω>Tω时,该像元为待选点。
(3)在一定大小的窗口内,以权值ω\omegaω为依据选取局部极大值点作为特征点。
- 程序实现占位
Harris算子
由C.Harris和J.Stephens在1988年提出,是一种基于信号处理的点特征提取算子。受信号处理中自相关函数启发,基本思想是通过给出与自相关函数相联系的矩阵MMM,MMM的特征值是自相关函数的一阶曲率,如果两个方向的曲率值都很高,则认为该点是特征点。
(1)计算每个像元在横向和纵向的一阶导数gxg_xgx和gyg_ygy,以及二者的乘积gxgyg_xg_ygxgy。对上述结果进行高斯滤波,滤波后结果为MMM,最后计算每个像元的兴趣值III.
{gx=∂g∂x=gi+1,j−gi,jgy=∂g∂y=gi+1,j−gi,jgxgy=(gi+1,j−gi,j)(gi,j+1−gi,j)
\left\{
\begin{aligned}
g_x= \frac{\partial g}{\partial x} = g_{i+1,j}-g_{i,j} \\
g_y= \frac{\partial g}{\partial y} = g_{i+1,j}-g_{i,j} \\
g_xg_y= (g_{i+1,j}-g_{i,j})(g_{i,j+1}-g_{i,j})
\end{aligned}
\right.
⎩⎨⎧gx=∂x∂g=gi+1,j−gi,jgy=∂y∂g=gi+1,j−gi,jgxgy=(gi+1,j−gi,j)(gi,j+1−gi,j)
M=G(s)∗[gxgxgygxgygy]
M=G(s)* \begin{bmatrix}
g_x & g_xg_y \\
g_xg_y & g_y \\
\end{bmatrix}
M=G(s)∗[gxgxgygxgygy]
I=Det(M)−k Trace2(M)I=Det(M)-k\space Trace^2(M)I=Det(M)−k Trace2(M)
上面,gxg_xgx是xxx方向的梯度;gyg_ygy是yyy方向的梯度;G(s)G(s)G(s)是高斯模板;∗*∗为卷积操作;III为各点的兴趣值;DetDetDet为矩阵的行列式;TraceTraceTrace为矩阵的迹;kkk为常数,一般取0.04。
(2)选择所有局部兴趣最大的点作为候选特征点。在一定大小的窗口内,去掉所有不是最大兴趣值的点,只留下兴趣最打结果,该点即为一个候选特征点。
(3)给定一个阈值TTT,在候选点中选取满足III大于TTT的点为特征点。
阈值根据实际图像进行确定。对于尺寸、纹理等属性,因为TTT不具有直观的物理意义,具体数值南意确定,因此采取间接确定TTT的方法,通过确定图像中所能提取的最大可能的特征点数目NmaxN_{max}Nmax来选择III值最大的若干像元点作为特征点。局部极值点的数目往往很多,根据III值进行排序,取钱NmaxN_{max}Nmax个为特征点。根据特征点进行加权重心化(超分),可达到亚像素级别。
- 程序实现占位