我在标题中写道,stereoBM产生的视差问题。
问题是我只能在一定距离范围内看到视差,即我能看到我是否站在1米到2米之间,然后才看到黑色(使用OpenCV字典在洞中)。
我需要创建一个距离图大于2米的深度图,并且我不知道为什么会有这个限制。
是否存在与校准或校正过程有关的问题?
希望你能帮助我。
编辑:
https://mega.nz/#!c5BnlCxT!U0EVi2cizy3fJbyfUF7m3haBibhz-SJpecdw0hYjFv8
https://mega.nz/#!RgBnhY4Z!v2CJKVRAPGK0cco1C02AFc8HeUgTCfhrTtWZs4aREqQ
https://mega.nz/#!IpJnRQSb!YVfd094W2KfRr6gdyiduiwJtkr2n13TVaGf1THvTM3A
下面是原始图像(未扭曲),校正过程后的dmap以及用于测试校准的源代码。
bm->setPreFilterType(StereoBM::PREFILTER_XSOBEL);
bm->setPreFilterSize(preFilterSize); //31
bm->setPreFilterCap(preFilterCap); //31
bm->setBlockSize(blockSize); //31
bm->setMinDisparity(minDisp); //-5
bm->setNumDisparities(numDisp); //16
bm->setTextureThreshold(textThres); //10
bm->setUniquenessRatio(uniqueRatio); //15
bm->setSpeckleWindowSize(speckleSize); //101
bm->setSpeckleRange(speckleRange); //32
bm->setDisp12MaxDiff(dispDiff); //1
cvtColor(img1,img1gray,CV_BGR2GRAY);
cvtColor(img2,img2gray,CV_BGR2GRAY);
bm->compute(img1gray, img2gray, disp);
disp.convertTo(disp8, CV_8UC1, 255/(numDisp*16.));
displayImages();
所有参数均可通过滑块实时调整,每行后的注释值为默认值或初始值。
感谢您的耐心等候。