在这种情况下是否有任何算法来确定3d位置?(下图)

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)而没有旋转)?

Dan*_*ory 5

你想要找到的是一个投影矩阵.确定精确的反投影通常要求您在源向量和目标向量中牢固地建立坐标,上面的图像不会给您提供.但是,您可以使用像素位置进行近似.

本主题将为您提供您需要使用的技术的基本演练.


Vic*_*Liu 2

我先说一下:这个问题很难。丹·斯托里的相关问题尚未得到解答是有原因的。让我们为那些想尝试一下的人提供一个解释。不过,我希望我对这件事的难度的判断是错误的。

我假设您知道 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以及定义的刚性变换Rv

困难

  • 该方程在未知数中是非线性的,涉及R和的商z_i
  • 到目前为止,我们假设您知道哪个 2D 坐标对应于原始形状的哪些顶点(如果您的形状是正方形,那么问题稍微小一些)。
  • 我们假设甚至有一个解决方案;如果二维数据存在误差,那么很难说方程的(*)满足程度如何;变换将是非刚性或非线性的。