我有一张原始图像,已经变形了#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)中这样做,但我并不那么关心实际的编码,我真的只是想找到解决方案矩阵(如果这是正确的话)术语)。
答案 0 :(得分:1)
这种转换(2D到2D具有透视效果)是所谓的单应性,可用8个系数(a
到h
)来描述:
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 library(exe example)中实现了透视变换(任意凸四边形到矩形的映射,反之亦然)。
使用agg_trans_perspective
,您可以计算透视变换矩阵(使用您的点A, B, C, D, A', B', C', D'
),然后将其应用于从一个四边形到另一个四边形的地图坐标(E to E'
或{{1} })。