opencv sgbm создает выбросы по краям объекта

Я использую opencv sgmb для вычисления стерео диспаратности, чтобы реконструировать некоторый простой объект, помещенный в таблицу. Все работает более или менее хорошо, за исключением того, что по краям объекта я нахожу некоторые выбросы, прикрепившие его к цвету фона. Дело в том, что я думаю, что sgbm не соответствует этим точкам фона, которые являются соседями к краям объекта, и они получают то же значение диспаратности, что и эти края.
Это один пример первое выпрямленное изображение второе выпрямленное изображение несоответствие изображения 3D

Как вы можете видеть, некоторые изображения с пола прилипли к объекту. Я использую стандартные значения для параметров sgbm:

int sgbmWinSize = 3;//size of the window to be matched
int numberOfDisparities = 256; //number of different disparity values in pixels

int cn = inputImage1.channels();

sgbm.minDisparity = -128; //minimum possible disparity value in pixels
sgbm.SADWindowSize = sgbmWinSize;
sgbm.numberOfDisparities = numberOfDisparities;
//parameters controling disparity smoothness
//values taken from openCV example
//additional tuning may be needed
sgbm.P1 = 8 * cn*sgbmWinSize*sgbmWinSize;
sgbm.P2 = 32 * cn*sgbmWinSize*sgbmWinSize;

sgbm.uniquenessRatio = 1;

//parameters for speckle filtering
sgbm.speckleWindowSize = 100;
sgbm.speckleRange = 5;

//maximum difference value in left-right disparity check
sgbm.disp12MaxDiff = 1;

//wether to run the full dp algorithm
//if set to true it may consume a lot of memory
sgbm.fullDP = true;
sgbm.preFilterCap = 4;

Я попытался изменить и настроить параметры, чтобы получить лучшее несоответствие, но независимо от того, что я делаю, некоторые точки фона все еще привязаны к объекту.
У кого-нибудь был подобный опыт? Кто-нибудь знает способ преодолеть эту проблему?

1

Решение

Это совершенно нормально для СГБМ. Вы можете уменьшить этот эффект, настроив размер блока, но на краях объектов всегда есть некоторый шум. Другой распространенный прием — применить медианный фильтр к карте диспаратности. Существуют и другие алгоритмы диспаратности, такие как Graph Cuts, которые производят более четкие края.

1

Другие решения