可能有答案,但我根本不明白我发现了什么。也许这是语言障碍。所以我决定最后问。我需要的是从两个摄像机记录的两个视频中找到3D坐标。设置如下:
我似乎无法掌握如何做到这一点。我拥有的是
现在怎么办? OpenCV文档包含以下公式:
我不知道是什么,也不知道[R | T]矩阵,外在参数。我不知道主要观点在哪里以及如何找到它(cx,cy)我只能假设将其设置为0不会是灾难性的。此外,这看起来只使用其中一个2D图像,而不是两者。
我知道calibrateCamera
,solvePnP
。和stereoCalibrate
函数,但我不知道如何使用它们。
我知道当你将相机作为两只“眼睛”时会有多复杂,我希望在相机拍摄垂直图像的情况下会更容易。我现在有一个计算3D坐标的公式,但它并不完全精确。误差小于1英寸,但是太大了1英寸。
xa, ya, xb, yb - pixel coordinates from pictures
focalAB - focal length
W = -(Ax*xb*pixelSize - focalB*By)/(xa*pixelSize*xb*pixelSize - focalA*focalB)
X = Ax + W*xa*pixelSize
Y = W*focalA
Z = W*xa*pixelSize
错误:
这些是由制造商提供的焦距和像素大小。 5400um和1,75um。然而,对于值4620um和1,69um,误差最小,其中最大值为3#X轴,2,3cm,高度误差amost消失(最大0.2cm),其余为0,1cm或1-1.5厘米。
答案 0 :(得分:0)
除了告诉你阅读@YangKui建议的立体视觉之外,我还可以回答你的一些子问题。
您引用的等式是(单相机)3D到2D投影方程。这是一个投影几何方程(因此1s作为最后一个坐标),一切都达到了某种尺度s
。
s
是这个比例因子。R
是相机相对于世界/所选坐标系的3x3旋转。t
是来自世界/所选坐标系原点的相机原点的转换。cx
和cy
是图像中的主要点 - Z轴相交的像素单位中的图像平面点。它通常被认为是图像的中心。答案 1 :(得分:0)
我发现,如果不是高性能实现,我发现一种方法就是为两个摄像机构建摄像机矩阵,然后使用非线性优化来解决M
最小化"重投影误差&#34 ;。
所以想出相机矩阵:A的相机矩阵将A的世界坐标中的相机中心映射到A相机坐标中的(0,0,0)。 A相机矩阵的旋转部分将世界坐标中的(0,1,0)映射到相机坐标中的(0,0,1)。
现在您可以将世界坐标映射到A和B图像坐标,因此对于任何(x,y,z),您都有相应的4向量:(x_A,y_A,x_B,y_B)。如果你投掷点(A_x,B_y,0),你得到一个4向量。该4向量与测量位置之间的差异是您的重投影错误。把它扔在求解器上它应该很快收敛于答案。
您可以尝试在计算机视觉中使用多视图几何图形''作者:Hartley和Zisserman。