Как я уже писал в заголовке, у меня проблема с несоответствием, генерируемым стереоБМ.
Проблема в том, что я вижу различия только в диапазоне расстояний, т.е. я вижу себя, если стою от 1 метра до 2 метров, до и после того, как я вижу только черные (дыры, используя словарь OpenCV)).
Мне нужно, чтобы я мог создать карту глубины с расстоянием более 2 метров, и я не знаю, почему существует это ограничение.
Есть ли проблемы, связанные с калибровкой или выпрямлениемпроцесс?
Надеюсь, вы мне поможете.
edit:
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();
Все параметры настраиваютсяв реальном времени с ползунками и значением, прокомментированным после каждой строки, является значение по умолчанию или начальное значение.
Спасибо за ваше терпение.