Sop*_*hia 5 python opencv image-processing computer-vision
我在玩OpenCV中的cornerHarris函数。我不明白什么呢ksize
,并k
在功能上的意思。文档中提到ksize
了存在Aperture parameter of Sobel derivative used
和k
存在,Harris detector free parameter in the equation
但我不确定它的真正含义是什么?
有人可以帮我理解吗?
我试图检测立方体中的角,结果是:
使用我在文档中使用的简单代码:
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()
Run Code Online (Sandbox Code Playgroud)
我尝试进行调整,K
但不了解它的作用,尽管我意识到将其增加到超过限制会导致检测到零角。
Mar*_*k.F 10
Harris 角点检测器用于从灰度图像中提取角点。Harris 检测器首先计算图像梯度,然后计算梯度的协方差,它是局部 Hessian 的近似值。
它有4个主要步骤:
边缘检测(空间导数计算)——第一步是将灰度图像转换为边缘图像。有很多技术可以做到这一点,但 cv2 使用称为 Sobel 内核的过滤器,它与原始图像互相关。所述ksize参数确定索贝尔内核(3×3,5×5等。)的大小。随着尺寸的增加,每个卷积过程的像素越来越多,边缘会变得更加模糊。
结构张量设置 - 基本上我们构建一个矩阵 M,它表示图像每个点的梯度(边缘)的方向。然后可以使用该矩阵来确定哪些边缘像素是角点:
该参数k,您可以在此步骤中的影响力,权衡精度和召回。因此,k 越大,假角就越少,但也会错过更多真实角(高精度),k 越小,角就越多,因此您错过的真角就越少,但会得到很多错误的(高召回率)。