- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 OpenCV 中的标准方法计算两个图像 img1
和 img2
之间的单应性(图像主要包含一个平面对象,因此它们之间的单应性效果很好)在 python 。也就是说,我使用 sift 计算图像之间的点匹配,然后调用 cv2.findHomography
。
为了加快计算速度,我将两个图像缩小为 small1
和 small2
并对这些较小的副本执行计算,因此我计算了单应矩阵 H
,它将small1
映射到small2
。但是,最后,我想使用计算单应矩阵将一张全尺寸图像 img1
投影到另一张全尺寸图像 img2
上。
我以为我可以按以下方式简单地转换单应矩阵 H
H_full_size = A * H * A_inverse
其中 A
是矩阵表示从 img1
到 small1
的缩放比例,A_inverse
是它的倒数。但是,这不起作用。如果我将 cv2.warpPerspective
应用于具有 H
的缩小图像 small1
,一切都会按预期进行,结果(大部分)与 小2
。如果我将 cv2.warpPerspective
应用于具有 H_full_size
的全尺寸图像 img1
,结果不会映射到 img2
。
但是,如果我使用 A
投影点匹配(在按比例缩小的图像上检测到)(使用类似 projected_pts = cv2.perspectiveTransform(pts, A)
的方法)然后我根据这些计算 H_full_size
,一切正常。
知道我在这里做错了什么吗?
最佳答案
在我看来,问题在于单应性应用的透视投影是非线性变换(仅在使用齐次坐标时才为线性变换),不能表示为正常变换矩阵。因此,将这种透视投影矩阵与其他一些变换相乘会产生不良结果。
您可以尝试将原始矩阵 H 元素明智地乘以:
S = [1,1,scale ; 1,1,规模; 1/比例,1/比例,1]
H_full_size = S * H
如果将原始图像的大小减小 2,则比例为 2。
关于python - opencv中的单应性和图像缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39668174/
我是一名优秀的程序员,十分优秀!