将单应性应用于整个图像后如何将 2D 点转换回来?

How to convert 2D points back after applying homography to an entire image?

我是 opencv 和图像相关几何的新手。但现在我正在处理一些图像处理任务。 这是我所做的: 给定 pts_src、pts_dst,我用 cv2.findHomograpy() 和 cv2.warpPerspective()

扭曲了整个图像

cv2.findHomography 为我提供了一个 3x3 单应矩阵。 cv2.warpPerspective() 为我提供了一个扭曲的图像,我可以从这个扭曲的图像中检测到一些特征点。

但是,我需要将特征点坐标映射回原始输入图像。 有人可以告诉我如何实现吗?

谢谢

我认为单应矩阵的逆将是从 pts_dst 映射回 pts_src 的新矩阵。

正如您在评论中所说并如图所示 here,您的第三个分量似乎确实是结果向量的缩放系数 w

(x, y) → (x′/w, y′/w)
where (x′, y′, w′) = mat ⋅ [x y 1]
(...) In case of a 2D vector transformation, the z component is omitted.

所以您可以通过 (V[0]/V[2], V[1]/V[2]) 重新缩放它,就像您在评论中提到的那样。

另外,我认为这个比例因子与矩阵的生成方式有关,所以请查看矩阵的详细信息,正如cv2.findHomography()的官方documentation所说:

Homography matrix is determined up to a scale. Thus, it is normalized so that h33=1.

希望对您有所帮助!