【发布时间】:2014-07-01 10:21:38
【问题描述】:
我正在尝试增强 stereobm(Opencv 立体块匹配)。 他们声称该算法使用 SAD cost_function 方法。 (绝对差异的 SAD 总和)。
但是在代码中 他们以这种方式计算了 SAD:
for( y = -dy0; y < height + dy1; y++, cbuf += ndisp, cbuf_sub += ndisp,
hsad += ndisp, lptr += sstep, lptr_sub += sstep, rptr += sstep )
{
int lval = lptr[0];
for( d = 0; d < ndisp; d++ )
{
int diff = std::abs(lval - rptr[d]);
cbuf[d] = (uchar)diff;
hsad[d] = hsad[d] + diff - cbuf_sub[d];
}
htext[y] += tab[lval] - tab[lptr_sub[0]];
}
......
sad[d] = (int)(hsad0[d-ndisp*dy0]*(wsz2 + 2 - dy0));
// *******************************
Instead of
//....
hsad[d] = hsad[d] + diff ;
// .....
sad[d] = hsad[d]
那么,为什么他们要与 *(wsz2 + 2 - dy0)) 相乘?
以及为什么他们在 (hsad[d] = hsad[d] + diff - cbuf_sub[d];) 中从 hsad[d] 中减去 cbuf_sub[d]
【问题讨论】:
-
wsz2的值是多少?我猜这是某种标准化术语? -
wsz2 是窗口大小的一半,dy0 来自感兴趣区域 dy0= roi.y;