如何从透视图确定物体的三维位置?

5
我有一个如图所示的情况,需要在透视下确定矩形空间中红色和蓝色正方形的x、y坐标。矩形的长度和宽度已知。这些矩形是相同的,只是从不同的位置观察。不同之处在于其中一个与矩形向右90度偏移。谢谢... alt text

所以你不想要实际距离而是视觉距离(A 离 B 看起来似乎有 5 英寸远)? - EricSchaefer
不是物体之间的距离,而是它们在矩形内的坐标。假设第一张图像的右下角(或第二张图像的左下角)为0,0。红色正方形的坐标是什么? - NccWarp9
3个回答

3
请注意以下是通用解决方案。我认为我已经正确地计算了数学问题;如果有人知道得更好,请发表评论(或者如果您确定,可以进行编辑...)
首先,您需要校准相机:它们的位置、指向和视野。这将以每个相机的投影矩阵形式呈现(或必须缩小到该形式),该矩阵将齐次世界空间点转换为齐次视图点。如果您事先不知道这一点,您可能可以从已知的公共特征(例如,您图中投影的灰色矩形)中弄清楚它。
然后,您需要识别每个图像上的对象及其位置。例如,找到红色和蓝色矩形的中心。
这将为每个对象或特征提供线性系统:
P=[x,y,z,w]^t = world point (homog. 4-vector)
p1=[x1,y1,w1]^t = point on screen 1;  M1= 3x4 projection matrix 1:  p1=M1*P
p2=[x2,y2,w2]^t = point on screen 2;  M2= 3x4 projection matrix 2:  p2=M2*P

您好!这段文字的英译中文如下:

您已知的数据为:p1/w1=(u1,v1,1) 和 p2/w2=(u2,v2,1);将它们分别乘以变量 w1 和 w2,得到:

(u1,v1) are constant  ->  p1=[u1*w1,v1*w1,w1]^t
(u2,v2) are constant  ->  p2=[u2*w2,v2*w2,w2]^t
assume that w=1       ->  P=[x,y,z,1]^t

最终,您得到了一个包含5个变量(x,y,z,w1,w2)的6个方程组成的系统:由于这个系统是超定的,因此您可以使用最小二乘法来解决它。
理解超定部分的一种方式是:假设有一对摄像机(如其矩阵所描述),您期望它们能够一致地显示场景。如果其中一个摄像机未对齐(即,摄像机矩阵不能完美地反映实际摄像机),则可能会显示比应该更高或更低的位置上的物体,从而导致该摄像机的结果与另一个摄像机不一致。
由于您可能使用浮点数(甚至是真实世界的数据),您的值永远不会完全准确,因此您总是需要处理这个问题。最小二乘法允许您解决这种超定系统;它还提供了可能有助于诊断和解决数据问题的误差值。

w、u和v是什么?我在图形编程方面没有任何背景。 - NccWarp9
(u,v)是“屏幕”上的实际点。 “w”坐标是使系统齐次化的额外坐标。 基本上,它们是一个缩放因子:在变换之后,您将通过其“w”坐标将齐次向量除以其(u,v)坐标。 (这就是允许您进行3D相机操作的原因 - 您需要除以相机距离) - comingstorm
嗯,澄清一下以避免可能的混淆:你不是按照点到相机的确切字面距离来除,而是按照与“深度”成比例的值来除,这个深度是相机中心轴线上的距离。实际上,如果你没有图形编程方面的背景,最好先了解一下。我推荐读一下Foley和Van Dam的《计算机图形学:原理与实践》——虽然是古老的书籍,但仍然有用。 - comingstorm

2

你是否具备基本的线性代数知识?如果是,那么这很容易。

1)你需要两个投影矩阵的投影矩阵(称为P1和P2,它们是3x2矩阵) 2)你有方程式:t(x1,y1)= P1 t(x,y,z)和t(x2,y2)= P2 t(x,y,z)(其中t是向量的转置) 3)你得到一个由3个未知数和4个方程组成的系统

也许你不知道投影矩阵,那么你首先要找出它们。

你很可能可以想出更高级的东西(只需一个3乘4的矩阵,其左侧应该有一个伪逆)。

如果你对线性代数一无所知,那么...请问我,我会详细解释。

附注:如果数学内容用的英语不好,请见谅。


1
我将非常感激任何帮助,至少提供一些解释了数学的伪代码。 - NccWarp9
给定三维坐标,你知道如何绘制这两个图像吗?或者你只知道灰色平面的大小? - Tristram Gräbener
哦!那事情就变得复杂了...你需要找出相机的位置。抱歉,我猜你可能需要更深入地研究整个投影问题... - Tristram Gräbener
相机位置已知。假设其与边界的偏移量(对于两个相机)为20,高度为20,聚焦于平面中心。 - NccWarp9
你说得对。我有点匆忙了。 然而,如果你考虑到相机是以(0,0,0)为中心的,那么它就可以工作了;使用齐次坐标来建模平移是必要的(投影和旋转没有问题)。 但这是一个很强的假设,在一般的计算机图形学中并不适用(因为相机在空间中移动)。 - Tristram Gräbener
显示剩余2条评论

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接