我目前正在尝试了解OpenCV的SGBM视差算法如何工作,我知道像素成本的计算遵循Birchfield和Tomasi算法。
http://robotics.stanford.edu/~birch/publications/dissimilarity_pami1998.pdf
我似乎无法弄清楚什么是clipTab [TAB_SIZE]以及为什么用这种方式填充它。
int ftzero = std::max(params.preFilterCap, 15) | 1;
PixType clipTab[TAB_SIZE];
for( k = 0; k < TAB_SIZE; k++ )
clipTab[k] = (PixType)(std::min(std::max(k - TAB_OFS, -ftzero), ftzero) + ftzero);
完整的代码可以使用以下链接找到:
https://github.com/opencv/opencv/blob/master/modules/calib3d/src/stereosgbm.cpp
最佳答案
它是sobel过滤器之后的剪辑运算符(operator)的剪辑选项卡。
它将在 calcPixelCostBT 期间使用。在我看来,如果您注意到“tab + = tabOfs;”,则该选项卡的有用值仅是从(TAB_OFS + ftzero)到(TAB_OFS + ftzero)的索引形式。在 calcPixelCostBT 期间。此区域中的tab值为[0,2 * ftzero],您可以从裁剪规则中获取它。
the clip rule:
关于c++ - OpenCV的SGBM算法中的 “cliptab”是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38441529/