关键词:特征点检测
特征点的性质
Harris角点
做者:李二 日期:23/04/2020 - 27/04/2020node
声明:对于大多数作遥感研究的人来讲,我以为不必深挖里面的技术细节,大体了解一下特征点检测是怎么回事,用到了什么思路便可。若是想看技术细节,自有不少其余博客以及文献可供参考。web
我这我的喜欢经过讲解去启发,而不是直接将各位看官带入细节。
李二上次说道:在执行基于图像的三维重建时,要求不一样视角的图像可以同时看到地物的相同地方
,咱们必须在不一样图像中精准的找出这些相同的地方,才可以进行三角定位。算法
通常状况下,不一样视角图像中相同的点千千万,都能拿来使用吗?非也!app
咱们须要从图像中选择比较有表明性的点。套用张麻子一句话,什么TM的是TM的表明性的点?编辑器
不妨先看一下图像是个什么东西,图像是一个由亮度和色彩组成的矩阵。咱们要从这个矩阵中找出表明性的元素。表明性的点就是相机视角发生变化后,这些点会保持不变,所以这些点是比较特别的点,所以也叫
特征点 feature
。svg
特征点应当具备以下性质:函数
可重复性(repeatable)
:相同的特征点能够在不一样的图像中找到局部性(localization)
:特征点仅与一小块图像区域有关可区别性(distinctiveness)
:不一样的特征点有不一样的表达高效性(efficiency)
:同一图像中,特征点数量应远小于像素的数量
那图像中哪些点是特别的点呢?spa
很容易想到,物体的
角点 corner
、边缘点 edge
应当具备表明性。咱们可以方便的指出,某两幅图像中出现了同一个角点。边缘点则稍微困难一些,毕竟沿着边缘,图像局部是类似的。设计
好啦,咱们只须要将图像中角点提取出来就行了。目前通常认为角点提取算法的终极算法是Harris角点法
,效率最高的算法是FAST角点法
(若是须要实时功能的话)。指针
咱们须要思考一下,角点能不能做为稳定的特征点呢? 对于角点,从远处看是角点的地方,近处看可能就不显示为角点了。或者相机或物体旋转后,角点在图像上的外观会发生变化,我看不容易辨认出这是个角点。
(小注:不是说Harris角点不能用,而是一些状况下,不那么好用)
对于特征点,咱们追求的一个终极目标是:
敲重点: 不一样视角下,物体的光线条件可能不一致,图像的分辨率可能不一致,图像亦可能存在旋转,物体可能存在平移和旋转,所以咱们但愿这些特征点在几何上可以尺度不变、平移旋转不变,且具备必定的光照不变特色。
接下来,咱们一步一步来看看,如何人工设计一些更加稳定的局部图像特征来代替这种普通的角点呢? 咱们先从Harris角点入手,而后逐步对其的旋转、尺度等几何不变进行探索。
以指定大小的滑窗 (locality)为局部特征搜索域,向任意方向移动滑窗,若是均可以获得较大的梯度变化(gradient change)
,则该滑窗所在中心点即为角点。
咱们经过图像中灰度的变化来建模,图像中滑窗 处的灰度矩阵为 ,滑窗移动 后的滑窗的灰度矩阵为 ,那么灰度的变化为:
这里 为
滑窗函数(window function)
,其实就是一个加权平均
,咱们能够将滑窗内每一个像元的权重设为一致,但更常见的是按照二元Gaussian分布的形式设置权重。
小注:假如窗口中心点是角点时,移动前与移动后,该点的灰度变化应该最为剧烈,因此该点权重系数能够设定大些,表示窗口移动时,该点在灰度变化贡献较大;而离窗口中心(角点)较远的点,这些点的灰度变化几近平缓,这些点的权重系数,能够设定小点,以示该点对灰度变化贡献较小,那么咱们天然想到使用二元高斯函数来表示窗口函数,
根据上式,当滑窗在灰度平坦区域上滑动,滑窗灰度矩阵不会发生变化,那么 ;当滑窗在边缘或角点处滑动,滑窗灰度矩阵变化会很大,那么 就很大。
Harris算法核心思想就是计算灰度发生较大变化时所对应的位置,固然这个较大是指针任意方向上的滑动,并不是单指某个方向。
接下来对公式(1)进行展开(为何要展开?容易算呗)。咱们对二元函数进行一阶泰勒展开(复习一下去吧),就有:
分别是 在 轴方向求一阶导。而后就能够把公式(1)写成:
写成矩阵的形式:
(小注,此时不妨假定滑窗内每一个像元的权重一致)
看一个最简单的例子,当角点与 坐标轴对齐时,在下图窗口内(大白格),有一个角点,只有上侧和左侧存在边缘,且在上边缘, 很大,而 ;在左侧边缘, 很大而 。 因此有
当出现相似这种形式的 则意味着:(1)梯度变化主要沿着 和 轴方向;(2) 若是 或者 约为0,则这不是一个角点。
实际并不是老是如此简单,当角点与 坐标轴没有对齐时,通过旋转变换就能够将其转换到与坐标轴对齐的角度,而这种旋转操做可使用矩阵的类似化来表示(具体不讲了,由于李二也没想了解)。但不管如何,矩阵 是对称矩阵。
来,咱们看看,不一样情形下, 和 到底有什么规律。
经过对窗口内的每一个像素的 方向上的梯度与 方向上的梯度进行统计,这里以 和 为坐标轴,所以每一个像素的梯度坐标能够表示成 。同时用椭圆进行数据集表示。
根据这个图咱们能够看出:
(小注:咱们对矩阵 进行特征值分解)
咱们能够根据这些特征来判断哪些区域存在角点,最直观的是下图。虽然咱们的基本思想利用
E(u,v)
来描述角点,但最终发现仅仅使用的是矩阵M
。
然而矩阵的特征值计算较为复杂,因此使用下面的方法进行近似计算更为高效。即便用
角点响应函数 corner response function
其中
为常数,一般为0.04 - 0.06
。
刚才用到了权重系数相等的权重函数,如今咱们能够用下高斯权重函数(标准正态分布),此时矩阵 :
好啦,咱们能够用下图总结一下。
若是角点响应函数 大于某个阈值,则能够将角点筛选出来。固然其中还可能会有一些后处理步骤,好比说角点的极大值抑制等,就不说了。
咱们在section 1中提到了特征点的终极目标是:平移+旋转+尺度+光线变化后,特征点保持不变。那么,Harris角点知足这个须要吗?话很少说,看图便知。
那么,接下来咱们看一下,是否能尝试设计出一个尺度不变的特征点检测方法。那就是大名鼎鼎的SIFT
。
特征点这块内容有点多,须要3期的内容。由于特征点检测在技术上十分重要,相关算法的一些思路,也极具借鉴价值,因此多写了一些。
特征点,能够用于三维重建(3D reconstruction),也能够用于图像匹配(image matching),我比较建议看一下Stanford University的Fei-Fei Li的CS131中的lec5-7.
有的看官可能以为人眼应该就能够找出特征点而后进行匹配。好吧,看来是不当家不知炒菜油和洗洁精的区别(嘿嘿,Mme.Zhang),给个例子
啊,居然还有人能找出来,请收下个人膝盖,这是我职业以来见过最伟大的对眼。再来一发。