【发布时间】:2016-04-23 12:11:29
【问题描述】:
我正在尝试实现基于梯度方向匹配的图像匹配算法。主要算法包含以下步骤:
- 将图像转换为极坐标:
-
使用 sobel 算子计算梯度:
Xgrad = cv2.Sobel(gr,cv2.CV_64F,1,0,ksize=5)
Ygrad = cv2.Sobel(gr,cv2.CV_64F,0,1,ksize=3)
3) 计算梯度方向并将其二值化。 :
现在我可以比较使用最后一个特征图的图像,而忽略旋转和微小的变化。
但是我发现这个算法检测到同一个图像的旋转,而旋转是相当纯粹的。我已经用圆圈构建了一个测试图像来测试这个算法:
并将其旋转到 10 个 grads
这里是极性转换:
和梯度方向蒙版:正如你在这里看到的,梯度矩阵上已经有很多噪音了。它破坏了匹配算法。
最好的传递差异掩码:整行区域被标记为不匹配。不同步骤上的小高斯模糊根本没有帮助。我不知道为什么。
更新:
梯度计算:
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)
【问题讨论】:
标签: opencv computer-vision gradient polar-coordinates linear-interpolation