特征点检测数量:surf > orb > sift
检测特征点时间:orb < surf < sift
sift:特征提取技术的里程碑,消除了特征点提取不稳定、特征不足的弱点,对旋转平移缩放也具有鲁棒性。
特征检测方法:
1、构建尺度空间
2、在高斯差分空间(Difference of Gaussian,DOG)计算极值点,二次曲线插值获得亚像素精度的特征点
3、去除地对比度点,通过计算Hessian矩阵消除边缘响应点
/*
tip1:
不同模糊度的高斯滤波图像相减,得到的高斯差分空间,实质上就是不同尺度的Laplace边缘检测,但计算速度要比逐个进行Laplace滤波要快。
tip2:
①为一维f(x)时,
此时其一阶导数构成的向量为梯度向量g(x);
此时其二阶导数构成的矩阵为Hessian矩阵;
②为多维f(x)=(f1(x), f2(x),…,fm(x))T时,
此时其一阶导数构成的矩阵为Jacobian矩阵。
*/
特征描述方法:
1、统计特征点16*16邻域内的直方图,选择直方图峰值作为特征点的主方向
2、将坐标轴旋转至主方向,保证旋转不变性,根据梯度计算128维特征描述子
surf:speeded-up robust feature,是sift算法的重要改进,解决了sift计算复杂度高、耗时长的缺点,提高了三倍速度,但在光照和形变方面的鲁棒性要逊色于sift。
特征检测方法:
1、计算积分图(为了加速Box滤波和Harr小波的计算)
2、改变Box滤波器的尺度来得到不同的尺度空间
3、用Hessian矩阵行列式的特征值的符号来确定极值
特征描述方法:
1、根据像素在x、y方向上的Harr小波响应来确定极值点方向
2、采用扇形区域扫描来得到64维或128维的特征描述
fast、orb:fast是近年来最成功的特征点提取算法之一,orb也是采用fast作为特征点检测算法。(fast只是角点检测方法,而orb采用fast作为特征点检测方法,采用改进brief作为特征点描述方法)
fast特征检测方法:
1、选取图像中的某个像素点p。其像素值(亮度)为lp
2、以3像素为半径画圆,覆盖p点周围16个像素点
3、设定阈值t,若这16个像素点中有连续n个像素点的值小于lp-t或有连续n个像素点的值大于lp+t则认为是角点,OpenCV中n的取值为12(16周长的3/4)
(改进:检测1、5、9、13这4个像素点中是否有3个满足条件,如果没有则直接跳过,如果有则采用步骤3检测所有的点)
brief特征描述方法:
特征点附近随机选取点对,将这些点对的灰度值的大小,组合成一个二进制串,将这个二进制串作为特征点的描述子。
优点:速度快
缺点:1、不具备旋转不变性;2、不具备尺度不变性;3、对噪声敏感
orb中改进brief特征描述方法:
1、特征点主方向通过矩(moments)来实现,并根据该主方向计算brief描述子。然而由于主方向会变化,导致随机点对的相关性变大,从而降低描述子的判别性,因此采取穷举的方法,暴力找到相关性最低的随机点对,以实现旋转不变性;
2、fast算子本身就具有尺度不变性,因此orb算子中没有试图解决尺度不变性;
3、brief采用点对(pixel-pair)的大小来构成描述子中的每一位,orb中采用9*9的块对(patch-pair)构成描述子,对比像素值之和,通过积分图快速计算,以降低噪声干扰。
转自:
http://www.p-chao.com/2017-06-14/opencv%E7%89%B9%E5%BE%81%E7%82%B9%E6%8F%90%E5%8F%96%E7%AE%97%E6%B3%95%E5%AF%B9%E6%AF%94/
https://blog.csdn.net/wangyaninglm/article/details/44805709