0

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

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

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

谁能建议我可能做错了什么?

视差图像 - 水平设置 3D 重建点云 - 水平设置 3D 重建点云 - 垂直设置 左校正图像 右校正图像

目前,更简单的 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);
4

2 回答 2

0

你的视差图对我来说看起来不太合适。除黑洞外,视差图中的其他一切都具有相同的强度。这不可能是对的。

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

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

此外,一旦获得适当的视差图,您应该进行孔填充以处理所有黑色区域。这肯定会影响你的重建。

于 2014-04-03T04:37:04.710 回答
0

我明白了,您的差异结果看起来很棒。那里没问题。

你的相机设置是什么,一个普通的水平立体设置?(从图片中鞋子的外观来看,可能是这种情况)

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

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

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

于 2014-02-25T23:15:15.247 回答