基于像素点特征的Harris角点检测图像拼接(matlab实现)
基于像素点特征的Harris角点检测图像拼接(matlab实现)
piccolo,之前做的东西,简单整理下,不是做图像方向的,写的不好轻喷
主要原理参看Harris角点检测原理及实现和Harris角点检测算法优化
下面简单说下:
角点( Corner Points )
1.局部窗口沿各方向移动,均产生明显变化的点。这个变化是多样的,如灰度
2.图像局部曲率突变的点
Harris角点检测
Harris角点检测作为一种典型的角点检测算法,受信号处理中相关函数的启发,给出与自相关函数相联系的矩阵M,M矩阵的特征值是自相关函数的一阶曲率,如果两个曲率值都高,那么就认为该点是角点,此方法对图像旋转、亮度变化、视角变化和噪声的影响具有很好的鲁棒性。
Harris角点检测算法使用了信号处理中的自相关函数的思想,它只涉及图像的一阶导数。先定义矩阵
其中,
——图像????在????方向的梯度
——图像????在y方向的梯度
——高斯模板
角点响应函数定义为:
其中,
——矩阵的迹(矩阵对角线的和——经验值,通常~
当某点的角点响应函数值大于设定的阈值T时,判定点改为角点
具体实现(matlab实现部分:基于像素点特征的Harris角点检测图像拼接算法)
上述情况是在经验值K取得比较合适的时候拼接的,下图是经验值k取得太大导致的拼接失败,所以harris角点检测的K值选取比较关键。同时,写的比较简单,这个性能也并不好。
经验值K 的选取会影响特征点提取的可靠性和准确性,针对不同的图片,K 值的选取会有不同。同时,阈值T难以确定,T值过大,则提取的特征点数目过少,丢失的信息过多,影响匹配的准确性;T值过小,则判定的特征点过多,增加了匹配的计算量且降低了准确率。即使阂值T大小合适,但针对不同类型的图片,图像纹理和结构特征相差很大,都会导致合适的阈值T也相差很多,难以自动选取。
下面是一种改进的角点响应函数CRF,无需选择K值,能有效避免K 值选取的随机性,具有实用性,可靠性好。