在扭曲的二维图像中定位一个点

locating a point in a 2d image that was warped

我有一张原图 "warped"。有人可以帮我计算一下原始图像中的给定点会出现在扭曲图像中的什么位置吗?

我有一张图片,里面有一个矩形。我知道在平面图像中,点 A、B、C、D、E 和 F 在哪里。

+------------------------------------------------+
|                                                |
|          A                     B               |
|           +-------------------+                |
|           |                   |                |
|           |     •F            |                |
|           |                   |                |
|           |                   |                |
|           |                   |                |
|           |    •E             |                |
|           +-------------------+                |
|          C                     D               |
|                                                |
+------------------------------------------------+

新图像 (A') 是由于相机设置不完善导致图像变形而创建的。我现在有 A',B',C'D',E',F'。

我不一定想要 "unwarp" 图像,我只想要新坐标 space 中的坐标,即点结束的位置。鉴于我知道 A、B、C、D、E、F、A'、B'、C'、D' 和 E'(在它们各自的图像中)在哪里,是否有足够的信息来简单地计算新 E' 的位置点应该在图像中?

我觉得这是一个 3D 矩阵变换,但数学超出了我的范围,我正在尝试找出可以求解 (E') 新坐标的方程式。我想从技术上讲,这是一个通过 3D space 投影到 2D 表面上的 2D 对象。

+------------------------------------------------+
|                                                |
|         A'                                     |
|          +---------            B'              |
|           |        -----------+                |
|           |                   |                |
|           |     •F'            |               |
|            |                   |               |
|            |                    |              |
|            |                    |              |
|            |    •E'             |              |
|             |            -------+              |
|             +------------        D'            |
|            C'                                  |
|                                                |
+------------------------------------------------+

如果我需要添加另一个点(G 和 G')来求解 E',我可以添加它。

我能理解的是,这将求解一系列联立方程,但我不确定求解 E'(x,y) 需要多少 "knowns" .

我在 iOS (Objective C) 中这样做,但我不太关心实际编码,我真的只是想找到解决方案矩阵(如果是正确的术语)。

你需要perspective transformations.

Anti-Grain Geometry library (exe example 中实现了透视变换(将任意凸四边形映射到矩形,反之亦然)。

使用agg_trans_perspective你可以计算透视变换矩阵(使用你的点A, B, C, D, A', B', C', D')然后将它应用到从一个四边形到另一个四边形的地图坐标(E to E'E' to E).

这个变换(2D到2D,有透视效果)就是所谓的单应性,可以用8个系数(ah)来描述:

X = (a.x + b.y + c) / (g.x + h.y + 1)
Y = (d.x + e.y + f) / (g.x + h.y + 1)

您可以轻松地将这些方程线性化为:

a.x + b.y + c                 - g.x.X - h.y.X = X
                d.x + e.y + f - g.x.Y - h.y.Y = Y

你通过取四个点(四个角)来求解它们,得到八个方程八个未知数,然后你可以从那里转换任何新点。

由于单应性的逆也是单应性,因此您可以通过两种方式应用此分辨率(直立到扭曲或相反)。确保您要查找的未知坐标在上述开发中显示为 (X, Y)(而不是 (x, y))。