如何使用带有压缩图像的cv2.findHomography()

时间:2017-06-07 00:01:36

标签: python opencv stretch homography

我正在使用opencv的python绑定。我正在使用关键点检测和描述(即SURF,SIFT,...)来查找目标图像中包含的模板图像,但有一个问题:模板可以在目标图像中“挤压”,以便方面比率与目标图像不同。

这不适用于findHomography(),因为它假定了一个简单的透视变换,不能进行这种拉伸。

有没有办法做到这一点?我已经考虑过逐步拉伸目标图像不同的数量以改变纵横比,并在每次迭代时使用findHomography,但据我所知,没有办法比较拟合的质量(因为我使用RANSAC来找到最合适的),所以我无法确定最适合的挤压水平。

也许通过查看返回蒙版的长度来计算从RANSAC正确匹配的点数?这看起来很糟糕。

1 个答案:

答案 0 :(得分:1)

  

这不适用于findHomography(),因为它假定了一个简单的透视变换,不能进行这种拉伸。

事实并非如此;甚至仿射经线也包括stretching the aspect ratios甚至剪切变形,并且单应性甚至可以通过非均匀的扭曲来扩展它。例如,矩阵给出的仿射变换

2 0 0
0 1 0

将图像水平拉伸两倍,如此短程序所示:

import cv2
import numpy as np

img = cv2.imread('lena.png')
affine_warp = np.array([[2, 0, 0], [0, 1, 0]], dtype=np.float32)
dsize = (img.shape[1]*2, img.shape[0])
warped_img = cv2.warpAffine(img, affine_warp, dsize)

cv2.imshow("2x Horizontal Stretching", warped_img)
cv2.waitKey(0)

制作输出:Lena stretched 2x wide

这不是你的问题。 Homographies允许更强的翘曲。您是自己运行RANSAC还是让findHomography()功能通过RANSAC决定您的积分?请将您的预期输出和当前代码发布,以反映您遇到的问题的新问题。