我正在编写一个程序,该程序通过两个经过校准的摄像机从场景中捕获实时图像(因此我们知道了摄像机的内部参数)。使用两个视图几何,我可以找到基本矩阵,并使用OpenCV或MATLAB查找一个摄像机相对于另一个摄像机的相对位置和方向。具有基本矩阵,Hartley和Zisserman的多视图几何表明,可以使用三角测量法按比例缩放场景。现在,我想使用参考长度来确定重建的规模并解决歧义。
我知道前壁的高度,所以我想用它来确定重建的规模,以测量其他物体及其尺寸或距我的第一台相机中心的距离。在实践中该怎么做?
谢谢。
编辑:要添加更多信息,我已经完成了线性三角剖分(最小化代数误差),但是我不确定它是否有用,因为我仍然存在比例歧义不知道如何摆脱它。我的最终目标是识别一个对象(如百事可乐罐头)并将其分离到一个矩形区域(它将由其他人作为一个单独的模块编写),然后找到该矩形区域中每个像素的距离,即相机感兴趣的区域。然后,从摄像机到对象的距离将是从摄像机到感兴趣区域中像素的3D坐标的距离中的最小值。
答案 0 :(得分:0)
可能会晚一点,但至少对于那些与同一员工苦苦挣扎的人而言。
据我所知,这实际上是线性问题。您获得了基本矩阵,该矩阵为您提供了旋转矩阵和指定摄像机相对位置的归一化平移矢量。如果跟随Hartley和Zissermanm,您可能会选择其中一台摄像机作为世界坐标系的原点。意味着您所有的三角测量点都在距该原点的标准化距离内。重要的是每个三角点的方向是正确的。
如果您在场景中有一些参考(比如说墙的高度),则只需找到该参考(2点就足够了-因此墙的相对两端)并计算“归一化系数”(对不起)术语)为
coeff = realWorldDistanceOf2Points / distanceOfTriangulatedPoints
一旦有了这个系数,只需将所有的三角测量点都加倍,就可以得到真实的测量点。
示例:
您知道墙壁的对角彼此是5m。您可以在两个图像中找到这些角,对其进行三角测量(将其称为三角点c1
和c2
),然后将它们在“规范化”世界中的距离计算为|| c1
-{{1} } ||并获得
c2
您将获得真实的3d世界点作为coeff = 5 / ||c1 - c2||
。
也许更简单的选择是将两个摄像机固定在相对的相对位置,并通过triangulatedPoint*coeff
openCV / Matlab函数(在Matlab中实际上有一个非常漂亮的GUI)将它们校准在一起-它不仅返回固有参数,而且还返回也外在的。但是我不知道这是否是你的情况。