Shi-Tomasi 角点检测 和 Harris 角点检测的很多步骤都是一样的。
Harris 角点检测最后会得到一个相似度函数C,这个函数是一个对称矩阵M,可以将对称矩阵分解得到一个P的逆乘以特征值矩阵乘以P的形式(P是特征向量矩阵,正交的)。
对于一个角点来说, 随着位置的稍微移动,基本上相似度函数都会变化非常大。
如果固定函数E的值,那么后面的式子就是一个椭圆方程。而且M也是个定值,那么就是位置变化量(u, v)才是变化量,也就是说,在某个方向上,移动多少距离,C值就会变多少。移动相同位置,变化的越快的,说明像素差异变化越大,如果移动了很长的一点距离都没有怎么变化(C 值变化不大)那么说明像素值变化相差异不大,而我们希望得到水平和数值俩方向都变化很大的才是角点。
而这种变化程度,椭圆的变化程度,可以用特征值来表示。椭圆上某个方向越短,变化越剧烈,对应的这个特征值越大。椭圆上某个方向越长,变化越缓慢,对应的这个特征值越小。
在Harris算法中,通过下面的式子来判断是不是角点


而在Shi-Tomasi算法中,这点处理不一样,
是通过设置一个阈值λmin来判断是不是角点
如果λ1和λ2都小于λmin,则是平面点
如果只有一个小于,则是直线。
如果λ1和λ2都大于λmin,则是角点。


对比代码展示如下:
import cv2
import numpy as np
# 1.cv2.cornerHarris(img, blocksize, kszie, k) # 找出图像中的角点
# 参数说明:
# img:是数据类型为float32的输入图像,表示输入的灰度图,
# blocksize:我们检测过程中需要一个窗口,这个就是窗口的大小,W(x,y)
# kszie:运用Sobel算子求解每个像素的梯度。有Ix和Iy方向的。
# k:是角点响应值运算中的α数值,一般推荐是[0.06, 0.06]
img = cv2.imread

本文深入讲解了Harris角点检测和Shi-Tomasi角点检测两种算法的区别及实现方式,并通过实例代码展示了如何利用这两种算法进行角点检测。
最低0.47元/天 解锁文章
1876

被折叠的 条评论
为什么被折叠?



