- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在玩弄 cornerHarris OpenCV 中的函数。我无法理解 ksize
和 k
在函数中的含义。文档中提到 ksize
是 所用 Sobel 导数的孔径参数
和 k
是 方程中的 Harris 检测器自由参数
但我不确定它的真正含义是什么?
谁能帮我理解一下?
我试图检测立方体中的角,结果如下:
使用我从文档中使用的简单代码:
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,您将获得更多的角 ,所以你会错过较少的真角,但会得到很多假角(高召回率)。
关于python - cornerHarris 中的 ksize 和 k 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54720646/
我如何知道 cornerHarris 计算的角点数?我写的函数如下: ... Mat gray; cvtColor( img, gray, CV_BGR2GRAY );
我只想试试 openCV 函数 -- cvCornerHarris。这是我的 C++ 代码: //image file char imagePath[256] = "./images/lena
我在玩弄 cornerHarris OpenCV 中的函数。我无法理解 ksize 和 k 在函数中的含义。文档中提到 ksize 是 所用 Sobel 导数的孔径参数 和 k 是 方程中的 Harr
我是一名优秀的程序员,十分优秀!