В настоящее время я пытаюсь понять, как работает алгоритм дисбаланса SGBM в OpenCV, я знаю, что расчеты стоимости пикселей следуют алгоритмам Берчфилда и Томаси.
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.
Будет использоваться во время calcPixelCostBT. На мой взгляд, полезным значением вкладки является только индексная форма (TAB_OFS — ftzero) до (TAB_OFS + ftzero), если вы заметили «tab + = tabOfs;» в течение calcPixelCostBT. Значение табуляции в этой области равно [0, 2 * ftzero], которое вы можете получить из правила клипа.
правило клипа:
Других решений пока нет …