2015-06-11 8 views
1

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

Как вы можете видеть некоторые изображения от пола застревают к объекту. Я использую стандартные значения для параметров 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

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

+0

Я попробовал несколько значений для размера блока, но всегда есть некоторые краевые эффекты. Я попробую средний фильтр, хотя thx для предложения. Я думаю, что алгоритмы сокращения графа могут замедляться. – user3847160