新增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