新增StereoSGBM实现
需要确认我们正在修改的头文件是处于OpenCV的源码路径,而不是OpenCV的安装路径。OpenCV在安装后, 会复制头文件到安装路径,不推荐直接修改安装路径下的文件。
增加per-pixel searching range的描述
在calib3d.hpp定义一个新类, 这个类用于描述disparity的检索index。OpenCV的SGBM的实现要求disparity的数量必须是16的整倍数。所以有一些流程是用来确保这一要求的。
class CV_EXPORTS_W PPSR { public: PPSR(int h, int w, int gdmin, int gdmax) : height(h), width(w), gDMin(gdmin), gDMax(gdmax), gD( gdmax - gdmin + 1 ) { ppsrMin = new int[height * width]; ppsrMax = new int[height * width]; } ~PPSR() { if ( NULL != ppsrMax ) { delete [] ppsrMax; ppsrMax = NULL; } if ( NULL != ppsrMin ) { delete [] ppsrMin; ppsrMin = NULL; } } void copy_pixel_disp_range(const int* fromStart, const int* fromEnd, const int base = 16) { const int n = height * width; int s, e, r; // Start, end, reminder. for ( int i = 0; i < n; ++i ) { s = fromStart[i] - gDMin; r = s % base; ppsrMin[i] = std::max(s - r, 0); e = fromEnd[i] - gDMin; e = std::min( ( e / base + 1 ) * base - 1, gD - 1 ); ppsrMax[i] = e <= 0 ? base : e; } } void initialize_pixel_disp_range(void) { const
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
风海流 于 2019-05-30 02:01:19 发布
本文介绍了如何修改OpenCV的StereoSGBM代码以实现像素级搜索范围约束。首先,增加了对per-pixel searching range的描述和MODE标签。接着,新增了函数computeDisparitySGBM_PPSR(),并在SGBM的计算过程中修改了搜索最优匹配的部分。通过简略测试验证了当搜索范围与全局一致时,结果与原版一致。最后,讨论了如何减少编译内容以提高效率,并预告了获取可信per-pixel searching range的后续工作。 
