如何从LSD线路探测器生成的数据中获取摄像机位置?

时间:2010-09-09 15:49:51

标签: algorithm 3d camera 2d line

所以例如我有such image这样的坐标线。如何(使用什么算法)可以生成某种简单的三维场景,这意味着从相机到面向我们的墙壁的相对距离是什么?

1 个答案:

答案 0 :(得分:3)

起点:http://en.wikipedia.org/wiki/Pinhole_camera_model和其中一本参考书:Richard Hartley和Andrew Zisserman(2003)。计算机视觉中的多视图几何。剑桥大学出版社。

对于C ++中的实现:http://opencv.willowgarage.com/documentation/cpp/calib3d_camera_calibration_and_3d_reconstruction.html

一种非常简单的方法:请注意,这只是为了解释一般原则。

假设你知道现实世界中墙上网格(瓷砖?)的措施你可以校准相机,所以得到内在外在相机参数;从这些参数中,您可以获得相机在现实世界场景中的位置(相机中心)。

例如,您可以将XYZ参考框架的原点放在右侧垂直墙与摄像机墙面相交的上角,然后在现实世界中测量XYZ参考系中每个瓷砖角的坐标,你有一组3D点(让我们称之为objectPoints),这些点的度量单位是毫米(或英寸)。

3D点不得位于同一平面上。

然后你需要在图像上找到相同的点,你将获得一组2D点,这些点的“度量单位”是像素(让我们称之为imagePoints)。

3D-2D对应是算法的输入,它为您提供相机参数(例如参见http://en.wikipedia.org/wiki/Camera_resectioning或OpenCV函数calibrateCamera http://opencv.willowgarage.com/documentation/cpp/calib3d_camera_calibration_and_3d_reconstruction.html#cv-calibratecameraobjectPoints作为第一个参数,imagePoints作为第二个参数)

根据摄像机参数,您可以获得摄像机中心,即摄像机距XYZ参考系(0,0,0)的距离。