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

前端之家收集整理的这篇文章主要介绍了python-cornerHarris中的ksize和k是什么意思? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我在玩OpenCV中的cornerHarris函数.我不明白ksize和k在函数中的含义.文档在公式中提到ksize是所用Sobel导数的Aperture参数,k是等式中的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,255]

    cv2.imshow('dst',img)
    if cv2.waitKey(0) & 0xff == 27:
        cv2.destroyAllWindows()

我尝试调整K,但不了解它的作用,尽管我意识到将K增加到超出限制会导致检测到零角.

最佳答案
哈里斯角落检测器用于从灰度图像中提取角落.
哈里斯探测器的工作原理是首先计算图像梯度,然后计算梯度的协方差,该协方差是局部Hessian的近似值.

它包含四个主要步骤:

>边缘检测(空间导数计算)-第一步是将灰度图像转换为边缘图像.有很多技术可以做到这一点,但是cv2使用了一个称为Sobel内核的过滤器,该过滤器与原始图像互相关. ksize参数确定Sobel内核的大小(3×3、5×5等).随着大小的增加,每个卷积过程将包含更多像素,并且边缘将变得更加模糊.
>结构张量设置-基本上,我们构造一个矩阵M,该矩阵M表示图像每个点上的渐变方向(边缘).然后可以使用此矩阵确定哪些边缘像素是角:

enter image description here

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

enter image description here

k参数可让您在此步骤中产生影响,权衡精度和召回率.因此,k越大,假角就越少,但真实的角也就越少(高精度),k越小,拐角就越多,因此,真角就越少,但是假角却越多错误的(高召回率).

>非最大抑制-找到每个局部区域中的角点像素最大值,其余部分被抑制.

猜你在找的Python相关文章