在许多应用中,会运用到特征提取。
比如,把下方两张图片缝合成一张图片。哪么从哪些地方开始缝合呢?这些地方可以通过特征提取找到。
1、特征
- 图片上的特征点应该具有怎样的特性?
a. 图片上的特征点不随图片的变化(平移,旋转,放大,缩小等)而改变
b. 图片上的特征点不随图片的亮度变化而改变
-
图片上什么样的区域能够看成是特征点? 平面?边缘?角?
角,因为小窗口在任意方向的移动,都可以引起大的变化
2、Harris角点检测
2.1 原理推导
移动窗口W,位移为(u,v),比较移动前后的像素变化
定义SSD(sum of squared differences)来量化这种变化,变化越大越好。
泰勒展开 I(x+u,y+v)
如果u,v的值很小,上式最后面的高阶项可以去掉。
所以:
简化上式:
如果把H看成一个椭圆,椭圆方程如下图所示。
椭圆长短轴的长度由H的特征值来确定,椭圆长短轴的方向由H的特征向量来确定。
平面,边沿,角,H表示的椭圆都不一样。
对于平面,H的特征值都很小,接近于0
对于边沿,H的特征值一大一小,小的接近于0
对于角,H的特征值都很大。
所以,设定一个阈值,当大于这个阈值时,即可检测为角。
实例图如下图所示,下图所示的看起来很小,但比零大
直接求解比较费时,还有一种方便的近视计算方法,f的值非常接近与
Harris 算子
2.2 Harris角点检测总结
- 计算图片的梯度
- 求H矩阵
- 计算H矩阵的特征值
- 设定一个阈值,当大于这个阈值时,即可检测为角
- 非极大值抑制
实际上,仅计算一个小的窗口W的效果不是特别好,学者基于到中心点的距离给导数赋予不同的权重。
这些权重可以通过高斯滤波器实现。
基于以上改变,Harris角点检测可以更新为:
- 计算图片的梯度
- 求H矩阵
- 高斯滤波
- 计算新H矩阵的特征值
- 设定一个阈值,当大于这个阈值时,即可检测为角
- 非极大值抑制