【问题标题】:How to convert 2D points back after applying homography to an entire image?将单应性应用于整个图像后如何将 2D 点转换回来?
【发布时间】:2020-07-23 14:54:31
【问题描述】:

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

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

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

谢谢

【问题讨论】:

  • 也许我错了,但我认为单应矩阵的逆矩阵将是从 dst_points 映射回 src_points 的新矩阵
  • @alan.elkin 感谢您的回复。我尝试了numpy.linalg.inv(H)*np.transpose(np.matrix[[x, y, 1]]),得到了一个3-d向量V。然后我尝试了V[0],V[1]它似乎不是正确的位置。我在这里做错了吗?
  • @alan.elkin V 的第三个元素是这里的缩放因子吗?我绘制的 (V[0]/V[2], V[1]/V[2]) 点似乎在所需的位置。我不确定是否总是这样。
  • 是否this help?
  • @gnodab 您的链接指向同一个 OP

标签: python opencv image-processing homography perspectivecamera


【解决方案1】:

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

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

(x, y) → (x′/w, y′/w)
(x′, y′, w′) = mat ⋅ [x y 1]
(...) 在二维向量变换的情况下,z 分量被省略。

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

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

单应矩阵被确定为一个尺度。因此,它被归一化,使得 h33=1。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2020-05-31
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2011-04-06
    相关资源
    最近更新 更多