如何将 cv2.findHomography() 与压缩图像一起使用

How to use cv2.findHomography() with Squeezed Images

我正在使用 opencv 的 python 绑定。我正在使用关键点检测和描述(即 SURF、SIFT 等)来查找包含在目标图像中的模板图像,但有一个问题:模板可以在目标图像中 "squeezed",因此宽高比与目标图像不同。

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

有没有办法做到这一点?我考虑过以不同的方式逐步拉伸目标图像以改变纵横比,并在每次迭代时使用 findHomography,但据我所知,没有办法比较拟合的质量(因为我使用 RANSAC 来找到最合适的),所以我不知道它最适合哪个挤压级别。

也许通过查看返回掩码的长度来计算从 RANSAC 中正确匹配的点数?这看起来有点恶心。

This does not work with findHomography(), since it assumes a simple perspective transform, which cannot have this sort of stretching.

这不是真的;即使是仿射扭曲也包括 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)

生成输出:

所以这不是你的问题。单应性允许更强烈的扭曲。您是 运行 RANSAC 自己还是让 findHomography() 函数通过 RANSAC 决定您的分数?请post你的预期输出和你当前的代码,可能在一个反映你面临的问题的新问题中。