为什么要用角点检测?
因为我们认为在轮廓是两条线的相交产生的,而角点正好可以去表现这两条相交的线。
怎么去表示角点?
公式可见 :https://blog.csdn.net/linqianbi/article/details/78930239
用海森矩阵
为什么要用海森矩阵?
因为一阶导表示线的斜率,二阶导表示线的曲率。所以同样在二维矩阵中,一阶导就是灰度的梯度,二阶导就是灰度梯度的变化程度。而边缘的出现恰好是灰度梯度变化程度大的时候。而在海森矩阵中,最大的特征值表示二维曲线最大的曲率和方向,同样最小的特征值表示二维曲线取消的曲率和方向。
因此二维图像可以表示为2*2的海森矩阵,当两个特征值都大时说明是角点。但是,两个特征值的表示太麻烦了,因此大牛给出了一个响应函数,为了能够去除加权常数k,因此我们使用。当响应函数超过了一个阈值我们就认为他是角点。
得到了角点的坐标之后,根据响应值的大小进行排序并设定一个每个角点相隔的最小距离,从而返回被筛选过的角点。
那如何进行两张图片的相似点的匹配呢?
我们可以通过角点并设定width来分别获得两张图片中的很多个patch。然后两两对比获得的patch的相似度。因为两个向量相乘,如果值越大说明这两个向量的相似度越高。并把得到的值放入相关矩阵当中,当然相关矩阵应当做归一化处理(对像素的变化具有稳健性)。因为值越大说明两个patch越相似,因此将其排序排好,将非对称的匹配去除。通过划线将两个patch相连。
为什么Harris角点检测有旋转不变性?
因为Harris使用的是角点附近的二阶矩阵,而二阶矩阵可以表示成椭圆,椭圆的长短轴可以表示为二阶矩阵特征值平方根的倒数,所以椭圆经过旋转之后长短轴的长度不变,因此Harris具有旋转不变性。
为什么Harris角点检测不具有尺寸不变性?
右侧的图片不会被检测为角点,但是当图片变小以后,左侧的图片会被检测为角点。
网友评论