的OpenCV sgbm上产生的对象边缘的异常值(opencv sgbm produces outl

2019-10-23 08:24发布

我使用OpenCV的SGMB的立体视差计算以重建放在桌子上一些简单的对象。 一切正常,或多或少地,除了在物体的边缘,我觉得有些异常与背景的颜色始终不离不弃。 事情是我认为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;

我试图改变和调整参数,以获得更好的差距,但无论我做什么,一些背景点仍停留在物体上。 有没有人有类似的经历? 有谁知道一个方法来解决这个问题?

Answer 1:

这是SGBM完全正常。 您可以通过调节块的大小,以减少这种影响,但总有一些噪音,在物体的边缘。 另一种常见的伎俩是一个中值滤波器应用到视差图。 还有其他的视差算法,如图割,这将产生更清洁的边缘。



文章来源: opencv sgbm produces outliers on object edges