我在OpenCV中玩cornerHarris函数。我不明白ksize
和{ksize
是Aperture parameter of Sobel derivative used
,而{
有人能帮我理解吗?在
我试着在一个立方体中探测角,结果是:
使用我在文档中使用的简单代码:
import cv2
import numpy as np
filename = "cube.jpg"
img = cv2.imread("./images/{}".format(filename))
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray,12,3,0.04)
dst = cv2.dilate(dst,None)
# Threshold for an optimal value, it may vary depending on the image.
img[dst>0.01*dst.max()]=[0,0,255]
cv2.imshow('dst',img)
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
我试着调整K
,但无法理解它的作用,尽管我意识到将其增加到超出限制的值会导致检测到零角点。在
Harris角点检测器用于从灰度图像中提取角点。 Harris检测器首先计算图像梯度,然后计算梯度的协方差,这是局部Hessian的近似值。在
它有4个主要步骤:
边缘检测(空间导数计算)-第一步是将灰度图像转换为边缘图像。有很多技术可以做到这一点,但是cv2使用了一个称为Sobel内核的过滤器,它与原始图像交叉相关。ksize参数决定Sobel内核的大小(3x3、5x5等)。随着大小的增加,每个卷积过程中会有更多的像素,的边缘将变得更加模糊。
结构张量设置-基本上我们构造一个矩阵M,它代表图像每个点的梯度(边)的方向。然后,该矩阵可用于确定哪些边缘像素是角点:
k参数允许您在这一步中进行影响,以牺牲精确度和召回率为代价。所以当k较大时,你会得到较少的假角,但你也会错过更多的真实角点(高精度),当k变小时,你会得到更多的角点,所以你会错过较少的真角,但会得到很多假角(高召回率)。在
相关问题 更多 >
编程相关推荐