Rel*_*lla 5 algorithm 3d 2d rotation detection
所以首先我有这样的图像(当然,我在2d中有所有点坐标,所以我可以重新生成线并检查它们彼此交叉的位置)
alt text http://superior0.narod.ru/2d.jpg
但是,嘿,我有另一张相同线条的图像(我知道它们是相同的)和我的点的新坐标就像在这张图片上的 alt文本http://superior0.narod.ru/3d.jpg
所以...现在在第一张图像上有点(坐标),我如何确定第二张图像上的平面旋转和Z深度(假设第一个中心位于点(0,0,0)而没有旋转)?
我先说一下:这个问题很难。丹·斯托里的相关问题尚未得到解答是有原因的。让我们为那些想尝试一下的人提供一个解释。不过,我希望我对这件事的难度的判断是错误的。
我假设您知道 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
Run Code Online (Sandbox Code Playgroud)
几乎任何合理的预测都有这种形式。通过渲染管道,您会发现
a_i = px x_i / (s z_i)
b_i = py y_i / (s z_i)
Run Code Online (Sandbox Code Playgroud)
其中(x_i, y_i, z_i)是该点的原始 3D 坐标。
现在,假设您知道一组规范坐标中的形状(无论您想要什么),因此顶点为(x0_i, y0_i, z0_i)。我们可以将它们排列为矩阵的列C。形状的实际坐标是这些坐标的刚性变换。让我们以类似的方式将实际坐标组织为矩阵的列V。那么这些是相关的
V = R C + v 1^T (*)
Run Code Online (Sandbox Code Playgroud)
其中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(*)满足程度如何;变换将是非刚性或非线性的。