计算梯度方向(HOG样)精度差

时间:2016-01-18 10:44:32

标签: opencv computer-vision gradient polar-coordinates linear-interpolation

我正在尝试实现基于渐变方向匹配的图像匹配算法。主要算法包含以下步骤:

enter image description here

  1. 将图像转换为极坐标:
  2. enter image description here

    1. 使用sobel算子计算渐变:

      Xgrad = cv2.Sobel(gr,cv2.CV_64F,1,0,ksize = 5)

    2. enter image description here

      Ygrad = cv2.Sobel(gr,cv2.CV_64F,0,1,ksize=3)
      

      enter image description here

      3)计算梯度的方向并将其二值化。 :

      enter image description here

      现在我可以使用最后一个功能图来比较图像,而忽略旋转和小变化。

      但是我发现这个算法可以通过旋转来检测相同图像的旋转。我用圆圈建立了一个测试图像来测试这个算法:

      enter image description here

      并将其旋转至10 Grads

      enter image description here

      这里是极地转换:

      enter image description here

      enter image description here

      和渐变方向遮罩:正如你在这里已经在渐变矩阵上产生了很多噪音。它打破了匹配的算法。

      enter image description here enter image description here

      并且它是最好的通过差异掩码:整行区域被标记为不匹配。在不同的步骤上的小高斯模糊根本没有帮助。我不知道为什么。

      enter image description here

      更新

      渐变计算:

      gx = cv2.Sobel(gr,cv2.CV_64F,1,0,ksize=1)
      gy = cv2.Sobel(gr,cv2.CV_64F,0,1,ksize=1)
      blurredgx = cv2.GaussianBlur(gx,(11,3),1)
      blurredgy = cv2.GaussianBlur(gy,(11,3),1)
      magnitude, angle = cv2.cartToPolar(blurredgx, blurredgy)
      

1 个答案:

答案 0 :(得分:0)

您能否解释一下您如何计算渐变方向?我相信你已经对每个4x4窗口进行了分组,并计算了每个窗口内渐变的方向。但是使用的索贝尔算子尺寸为5x5。这显然会导致一些重叠。你能解释一下吗?