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