我有以下问题,主要是算法。
问题如下:
我用单个相机抓取简单矩形的图像,我想重建空间上的矩形。我可以抓取多个图像并使用三角测量,但这不是必需的。
仅投影矩阵是不够的,因为光线投射到同一点。对象具有已知维度的事实使我相信问题是可解决的并且存在有限的解决方案。
如果我弄清楚如何进行重建,我知道如何编程。所以我要求算法/数学答案。
欢迎任何想法 感谢
答案 0 :(得分:1)
您需要计算投影矩阵的倒数。 (你的矩阵不能是单数)
答案 1 :(得分:1)
我认为这个问题会产生一系列可能的解决方案,至少在二维方面确实如此。对于2D案例:
|
-----------+-----------
/|\
/ | \
/ | \
/---+---\VP
/ | \
/ | \
/ | \
/ | \
/ | -- \
/ | | \
/ | | \
在上图中,垂直线段和水平线段将投影到视图平面(VP)上的同一条线。如果您将其绘制成比例尺,则会看到眼睛中有两条光线穿过未投影线的每个终点。这条线可以处于许多位置和旋转 - 想象一下将一根棍子放入一个圆锥体中,它可能卡在任意位置。
因此,在2D空间中,在定义良好的集合中存在无数个解决方案。
这是否适用于3D?
该算法将遵循:
编辑:如果你知道到物体的距离就会变得微不足道。
编辑V2:
好吧,让Rn成为世界空间中的四条光线,即通过逆矩阵变换,用m.Rn表示,其中| Rn |是一个。因此,矩阵的四个点是:
P1 = aR1
P2 = bR2
P3 = cR3
P4 = dR4
其中P1..P4是矩形圆周周围的点。由此,使用一些矢量数学,我们可以导出四个方程:
|aR1 - bR2| = d1
|cR3 - dR4| = d1
|aR1 - cR3| = d2
|bR2 - dR4| = d2
其中d1和d2是矩形边的长度,a,b,c和d是未知数。
现在,上面可能没有解决方案,在这种情况下你需要将d1与d2交换。您可以将每一行扩展为:
(a.R1x - b.R2x) 2 +(a.R1y - b.R2y) 2 +(a.R1z - b.R2z) 2 = d1 2
哪里有R1?和R2?是光线1和2的x / y / z分量。注意你在上面解决a和b,而不是x,y,z。
答案 2 :(得分:1)
我将在这里给出一个相当简短的答案,但我认为你会得到我的一般漂移。我假设你有一个3x4投影矩阵(P),所以你应该能够通过找到P的正确空向量得到摄像机中心:称之为C.
一旦你有C,你将能够计算与向量CK,CL,CM和CN相同方向的光线(即C和K,L,M或N的交叉积,例如CxK)
现在你所要做的就是计算3个点(u1,u2,u3),它们满足以下6个约束条件(任意假设KL和KN相邻,|| KL ||> = || KN ||如果d1 > = d2):
其中,A.B =向量A和B的点积 ||一个|| =欧几里得的A范数 AxB = A和B的交叉乘积
答案 3 :(得分:0)
m_oLogin是对的。如果我了解你的目标,相机拍摄的图像是平面P,对吧?如果是这样,您将测量2D图像的K,L,M,N。您需要投影矩阵的逆来重建A,B,C和D.
现在我从来没有这样做过,但是对我来说,你可能会遇到同样的问题,GPS只做3个卫星修复 - 有两个可能的解决方案,一个'落后'P和一个'前面'它,对吗?
答案 4 :(得分:0)
投影矩阵包含透视和缩放,因此反向将为您提供所需的解决方案。我认为你假设它只封装了透视图,你需要别的东西来选择正确的尺度。