所以首先我有这样的图像(当然我有二维坐标,所以我可以重新生成线条并检查它们相互交叉的位置)
(来源:narod.ru)
但是,嘿,我有另一个相同线条的图像(我知道它们是相同的)和我的点的新坐标,就像这张图片一样
(来源:narod.ru)
所以......现在在第一张图像上有点(坐标),我如何确定第二张图像上的平面旋转和 Z 深度(假设第一个的中心在点 (0,0,0) 中没有旋转)?
您要查找的内容称为投影矩阵。确定精确的逆投影通常需要您在源向量和目标向量中建立牢固的坐标,上面的图像不会给您。但是,您可以使用像素位置进行近似。
该主题将为您提供需要使用的技术的基本演练。
让我先说:这个问题很难。Dan Story 的相关问题没有得到回答是有原因的。让我们为想要尝试它的人提供一个解释。不过,我希望我错了它有多难。
我假设你知道 2D 屏幕坐标和投影/透视矩阵。你至少需要知道这么多(如果你不知道投影矩阵,基本上你正在使用不同的相机来观察这个世界)。让我们调用每对 2D 屏幕坐标(a_i, b_i)
,我将假设投影矩阵的形式为
P = [ px 0 0 0 ]
[ 0 py 0 0 ]
[ 0 0 pz pw]
[ 0 0 s 0 ], s = +/-1
几乎任何合理的投影都有这种形式。通过渲染管道,您会发现
a_i = px x_i / (s z_i)
b_i = py y_i / (s z_i)
(x_i, y_i, z_i)
该点的原始 3D 坐标在哪里。
现在,让我们假设您在一组规范坐标中知道您的形状(无论您想要什么),因此顶点是(x0_i, y0_i, z0_i)
. 我们可以将它们排列为矩阵的列C
。形状的实际坐标是这些坐标的刚性变换。让我们类似地将实际坐标组织为矩阵的列V
。然后这些是相关的
V = R C + v 1^T (*)
其中1^T
是具有正确长度的行向量,R
是刚体变换的正交旋转矩阵, 是变换v
的偏移向量。
现在,对于上面的每一列,您都有一个表达式V
:第一列是{ s a_1 z_1 / px, s b_1 z_1 / py, z_1 }
,依此类推。
您必须求解一组(*)
标量的方程组z_i
,以及定义的刚性变换R
和v
。
困难
R
和z_i
(*)
满足程度如何;变换将是非刚性或非线性的。它被称为(数字)摄影测量。开始谷歌搜索。
如果你真的对这类问题感兴趣(在计算机视觉中很常见,用相机跟踪物体等),下面这本书包含了详细的处理:
Ma, Soatto, Kosecka, Sastry,3-D 视觉的邀请,Springer 2004。
注意:这是一本高级工程教材,使用了许多本质上属于数学的技术。浏览本书网页上的示例章节以获得一个想法。