使用BM和SGBM方法的立体重建问题

时间:2014-01-18 21:10:50

标签: opencv stereo-3d disparity-mapping

我使用OpenCV的棋盘校准程序校准了我的立体相机。我目前正在使用获得的内在和外在矩阵来纠正我的消息,并使用块匹配方法(我已经使用BM和SGBM并得到相同的结果)最终转到3D点云。

不幸的是,我在3D点云中发现问题,出于某种原因,在深度值方面似乎存在一个错误的“步骤”。

我使用了一个简单的实验,对一堆有很多纹理的污垢进行成像,我希望看到一致的重建,但我发现它的一部分是在正确的深度值,而其余部分似乎在地面上平坦。我已经尝试改变我的立体声标记大小,最大/最小视差值等。但我仍然没有看到任何变化。我也试过水平和垂直成像,但问题仍然存在于两个视图中。

任何人都可以建议我可能做错了吗?

Disparity Image - Horizontal Setup 3D Reconstructed Point Cloud - Horizontal Setup 3D Reconstructed Point Cloud - Vertical Setup Left Rectified Image Right Rectified Image

目前,更简单的BM参数如下所述:

int ndisparities = 16*15;//16*10;  
int SADWindowSize = 31; 
cv::StereoBM sbm( CV_STEREO_BM_BASIC, ndisparities, SADWindowSize );    
sbm( rectified_imgRight, rectified_imgLeft, imgDisparity16S, CV_16S );
imgDisparity16S.convertTo(imgDisparity8U, CV_8U, 255/(ndisparities*16.));
cv::imwrite("disparity.png", imgDisparity8U);

2 个答案:

答案 0 :(得分:0)

我看到你的差异结果看起来很棒。没问题。

您的相机设置是什么,普通的水平立体声设置? (根据图片中的鞋子外观可能就是这种情况)

此外,似乎3D土墩位于图片项目的左侧:您是否检查过您是否使用正确的相机图像覆盖了您的3D数据?默认情况下,OpenCV算法会给出左校正图像深度图,但在您的情况下,看起来像对象图像已向右移动。根据我的经验,这是因为深度图与正确的矫正图像进行了比较,这是错误的。

您是否检查过您是否正在尝试将深度图与正确的图像进行比较(左相机校正后的图像)?还要检查图像的方向。

我相信你会立刻得到正确的身高。

答案 1 :(得分:0)

您的差异地图对我来说并不合适。除了黑洞之外,其他一切在视差图中具有相同的强度。这可能不对。

一般规则是:降低深度,差异越大。

我建议你再次查看你的视差图。

此外,一旦你获得了一个合适的视差图,你应该做一个填孔来照顾所有的黑色区域。这肯定会影响你的重建。