Почему край моей карты несоответствия такой толстый? - PullRequest
0 голосов
/ 08 октября 2019

Я использую алгоритм BM в openCV для бинокулярного соответствия. Исходные изображения представляют собой спекл-узоры. Край несоответствия изображения жирный. Я хочу знать, как исправить край?

Я знаю, что жирный край является результатом агрегации затрат с использованием boxfilter.

Но несоответствие другого метода агрегации затрат настолько плохо,

Кроме того, для решения этой проблемы я использовал пост-фильтр диспаратности и распределение затрат на сопоставление, но он не работает.

Первое изображение - это левый спекл, а второе -image - изображение несоответствия, использующее BM в opencv.

left speckle pattern

OpenCV BM

Мой код вызывает алгоритм BM opencv:

bm->setPreFilterType(StereoBM_C::PREFILTER_NORMALIZED_RESPONSE); 
bm->setBlockSize(9); 
bm->setMinDisparity(0); 
bm->setNumDisparities(64); 
bm->setPreFilterSize(5); 
bm->setPreFilterCap(31); 
bm->setTextureThreshold(10); 
bm->setUniquenessRatio(10); 
copyMakeBorder(leftImg, leftImg, 0, 0, 64, 0, cv::BORDER_REPLICATE); 
copyMakeBorder(rightImg, rightImg, 0, 0, 64, 0, cv::BORDER_REPLICATE); 
bm->compute(leftImg, rightImg, disp); 
disp = disp.colRange(64, leftImg.cols); 
...