在扭曲的2d图像中定位一个点

时间:2016-05-31 11:47:46

标签: image matrix geometry transformation

我有一张原始图像,已经变形了#34;有人可以帮我计算出原始图像中给定点在扭曲状态下的位置吗?

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

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

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

我不一定要" unwarp"图像,我只想要新坐标空间中的坐标,点已经结束了。鉴于我知道A,B,C,D,E,F,A',B',C',D'和E' (在他们各自的图像中),是足够的信息来简单地计算新E'点应该在图像中吗?

我觉得这是一个3D矩阵变换,但数学超出了我的范围,我试图弄清楚只能求解(E')新坐标的方程式。我从技术上讲,这是一个2D物体,通过3D空间投射到2D表面上。

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

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

我能够理解的是,这将解决一系列联立方程,但我不确定有多少"知道"需要解决E'(x,y)。

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

2 个答案:

答案 0 :(得分:1)

这种转换(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))。

答案 1 :(得分:0)

您需要perspective transformations

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

使用agg_trans_perspective,您可以计算透视变换矩阵(使用您的点A, B, C, D, A', B', C', D'),然后将其应用于从一个四边形到另一个四边形的地图坐标(E to E'或{{1} })。