2014-01-18 61 views
0

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

不幸的是,我发现问题在我的三维点云和出于某种原因,似乎是在深度值方面具有errorenous“台阶”。

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

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

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); 

回答

0

你的悬殊结果看起来棒极了,我明白了。那里没问题。

什么是您的相机设置,一个正常的水平立体声设置? (通过在图像中的鞋的外观,这可能是这种情况)

此外,似乎三维丘是在图片项目的左侧:你有没有检查过,你是覆盖你的3d数据与正确相机图像?默认情况下,OpenCV算法会给出一个左校正的图像深度图,但在您的情况下,看起来像对象图像已经向右移动。根据我的经验,这是因为深度图与正确的矫正图像进行比较,这是错误的。

你检查,你正试图以比较正确的图像深度图(左相机校正的图像)?同时检查图像的方向。

我相信你很快就会得到正确的身高。

+0

请不要发布澄清问题作为答案。 –

0

您的视差图看起来不太适合我。除了黑洞之外,其他所有内容在视差图中都具有相同的亮度。这不可能是正确的。

一般规律是:深度越低,差距越高。

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

而且,一旦你获得适当的视差图,你应该做一个空洞填充采取一切黑色区域的照顾。这肯定会影响你的重建。