美文网首页
Harris角点检测

Harris角点检测

作者: 徐振杰 | 来源:发表于2018-11-09 15:11 被阅读0次
    为什么要用角点检测?

    因为我们认为在轮廓是两条线的相交产生的,而角点正好可以去表现这两条相交的线。

    怎么去表示角点?

    公式可见 :https://blog.csdn.net/linqianbi/article/details/78930239
    用海森矩阵

    为什么要用海森矩阵?
    因为一阶导表示线的斜率,二阶导表示线的曲率。所以同样在二维矩阵中,一阶导就是灰度的梯度,二阶导就是灰度梯度的变化程度。而边缘的出现恰好是灰度梯度变化程度大的时候。而在海森矩阵中,最大的特征值表示二维曲线最大的曲率和方向,同样最小的特征值表示二维曲线取消的曲率和方向。

    因此二维图像可以表示为2*2的海森矩阵,当两个特征值都大时说明是角点。但是,两个特征值的表示太麻烦了,因此大牛给出了一个响应函数\lambda_1*\lambda_2-k(\lambda_1+\lambda_2),为了能够去除加权常数k,因此我们使用\frac{\lambda_1*\lambda_2}{\lambda_1+\lambda_2}。当响应函数超过了一个阈值我们就认为他是角点。

    得到了角点的坐标之后,根据响应值的大小进行排序并设定一个每个角点相隔的最小距离,从而返回被筛选过的角点。

    那如何进行两张图片的相似点的匹配呢?

    我们可以通过角点并设定width来分别获得两张图片中的很多个patch。然后两两对比获得的patch的相似度。因为两个向量相乘,如果值越大说明这两个向量的相似度越高。并把得到的值放入相关矩阵当中,当然相关矩阵应当做归一化处理(对像素的变化具有稳健性)。因为值越大说明两个patch越相似,因此将其排序排好,将非对称的匹配去除。通过划线将两个patch相连。

    为什么Harris角点检测有旋转不变性?

    因为Harris使用的是角点附近的二阶矩阵,而二阶矩阵可以表示成椭圆,椭圆的长短轴可以表示为二阶矩阵特征值平方根的倒数,所以椭圆经过旋转之后长短轴的长度不变,因此Harris具有旋转不变性。

    为什么Harris角点检测不具有尺寸不变性?

    右侧的图片不会被检测为角点,但是当图片变小以后,左侧的图片会被检测为角点。


    相关文章

      网友评论

          本文标题:Harris角点检测

          本文链接:https://www.haomeiwen.com/subject/saxoxqtx.html