gpt4 book ai didi

python - cornerHarris 中的 ksize 和 k 是什么意思?

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:08 25 4
gpt4 key购买 nike

我在玩弄 cornerHarris OpenCV 中的函数。我无法理解 ksizek 在函数中的含义。文档中提到 ksize所用 Sobel 导数的孔径参数k方程中的 Harris 检测器自由参数 但我不确定它的真正含义是什么?

谁能帮我理解一下?

我试图检测立方体中的角,结果如下:

enter image description here

使用我从文档中使用的简单代码:

    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 个主要步骤:

  1. 边缘检测(空间导数计算)- 第一步是将灰度图像转换为边缘图像。有很多技术可以做到这一点,但 cv2 使用称为 Sobel 内核的过滤器,它与原始图像互相关。 ksize 参数确定 Sobel 内核的大小(3x3、5x5 等)。随着尺寸的增加,更多像素成为每个卷积过程的一部分,并且边缘会变得更加模糊

  2. 结构张量设置 - 基本上我们构建了一个矩阵 M,它表示图像每个点的梯度(边缘)的方向。然后可以使用该矩阵来确定哪些边缘像素是角点:

enter image description here

  1. Harris 响应计算 - 在这一步中,我们计算每个边缘像素的“角点分数”R。这个想法是,只有当像素在 2 个垂直方向上具有大梯度时,才将其定义为角,这意味着 M 矩阵具有 2 个大特征值(1 个大特征值将只是一条边)。在这里我们可以看到 Harris 检测器的自由参数 - k。它是 [0.04,0.06] 范围内的经验确定常数:

enter image description here

k 参数 可让您影响此步骤,权衡精确度和召回率。因此,使用更大的 k,您将获得更少的假角,但您也会错过更多真实的角(高精度),使用更小的 k,您将获得更多的角 ,所以你会错过较少的真角,但会得到很多假角(高召回率)。

  1. 非极大值抑制 - 找到每个局部区域角点像素的最大值并抑制其余部分。

关于python - cornerHarris 中的 ksize 和 k 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54720646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com