我已经使用 OpenCV 的棋盘校准例程校准了我的立体相机。我目前正在使用获得的内在和外在矩阵来纠正我的消息并使用块匹配方法(我使用了 BM 和 SGBM 并获得了相同的结果)最终转到 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);