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;

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


person user3847160    schedule 11.06.2015    source источник


Ответы (1)


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

person Dima    schedule 12.06.2015
comment
Я пробовал несколько значений размера блока, но всегда есть какие-то краевые эффекты. Я попробую медианный фильтр, хотя спасибо за предложение. Я думаю, что алгоритмы сокращения графа могут быть слишком медленными. - person user3847160; 13.06.2015