三维重建达到实际规模

时间:2013-08-09 21:37:22

标签: opencv computer-vision camera-calibration 3d-reconstruction

我正在开发一个项目来检测对象的3D位置。我在房间的两个角落安装了两台摄像机,我在它们之间获得了基本矩阵。这些相机在内部进行校准。我的照片是2592 X 1944

K = [1228 0 3267      0 1221 538      0 0 1]

F = [ - 1.098e-7 3.50715e-7 -0.000313       2.312e-7 2.72256e-7 4.629e-5       0.000234 -0.00129250 1]

现在,我如何进行以便在空间中给定3D点时,我应该能够在图像上获得与房间中相同对象相对应的点。如果我可以获得正确的投影矩阵(具有正确的比例),我可以在以后使用它们作为OpenCV的traingulatePoints函数的输入来获得对象的位置。

很长一段时间以来,我一直被困在这里。所以,请帮助我。

感谢。

3 个答案:

答案 0 :(得分:2)

从我收集的信息中,您通过某种校准手段获得了基本矩阵?无论哪种方式,使用基本矩阵(或校准装备本身),您都可以通过分解基本矩阵来获得姿势差异。完成后,您可以使用匹配的特征点(使用特征提取器和SURF,BRISK等描述符)来识别一个图像中的哪个点属于同一个对象点,而另一个图像中的另一个特征点。 有了这些信息,您应该能够进行三角测量。

答案 1 :(得分:0)

可能会更简单地使用cv::reprojectImageTo3D功能吗?它会给你3D坐标。

答案 2 :(得分:0)

对不起它的评论范围不大.. 所以@ user2167617回复你的评论。 差不多。但是有几点:奇异值应该是(s,s,0),所以(1.3,1.05,0)是一个很好的猜测。关于R:从技术上讲,这是正确的,但忽略了迹象。很可能你得到的旋转矩阵不满足约束deteminant(R)= 1,而是-1。在这种情况下,您可能希望将其乘以-1。通常,如果您遇到此方法的问题,请尝试使用5点算法确定Essential Matrix(在最新版本的OpenCV中实现,您必须自己构建它)。用这些信息确实无法获得规模。但是,这一切都是为了扩展。如果您定义相机之间的距离为1个单位,则所有内容都将以该单位进行测量。