4

我有 4 个 ps3eye 相机。我已经使用棋盘图案的OpenCV库的cvStereoCalibrate()函数校准了camera1和camera2,方法是找到角点并将它们的3d坐标传递给这个函数。

此外,我还使用camera2和camera3查看的另一组棋盘图像校准了camera2和camera3。

使用相同的方法,我校准了 camera3 和 camera4。

所以现在我有了camera1和camera2的外在参数和内在参数,camera2和camera3的外在参数和内在参数,以及camera3和camera4的外在参数和内在参数。

其中外部参数是旋转和平移矩阵,内部参数是焦距和主点矩阵。

现在假设有一个 3d 点(世界坐标)(而且我知道如何从立体相机中找到 3d 坐标),它被 camera3 和 camera4 查看,而 camera1 和 camera2 没有看到。

我的问题是:你如何获取camera3和camera4查看的这个3d世界坐标点,并使用旋转、平移、焦点和主点参数相对于camera1和camera2的世界坐标系对其进行转换?

4

1 回答 1

1

OpenCV 的立体校准只为您提供两个相机之间的相对外在矩阵。

根据其文档,您不会获得世界坐标中的转换(即与校准模式有关)。它建议尽管对其中一张图像进行常规相机校准,并且至少知道它的转换。cv::stereoCalibrate

如果校准完美,您可以使用菊花链设置来导出任何相机的世界变换。

据我所知,这不是很稳定,因为在运行校准时应该考虑到您有多个摄像头这一事实。

多相机校准不是最琐碎的问题。看一下:

我也在寻找解决方案,所以如果您了解有关此和 OpenCV 的更多信息,请告诉我。

于 2012-06-14T12:03:13.133 回答