4,271
社区成员




在研究CLAHE算法时,本人直接阅读的源代码,但没有机器来构建C++环境来测试,因此有2个问题请教:
在《OpenCV自适应直方图均衡CLAHE C++源代码分享》https://blog.csdn.net/LaoYuanPython/article/details/121507082中,关于插值的代码(上述博文的源代码的第240、256行的代码:
int lut_step = static_cast<int>(lut_.step / sizeof(T));
ind1_p[x] = tx1 * lut_step;
中的lut_step对于T取值为uchar时该值是否为256?上述代码中的lut是存储的总分块数为行数、T取值为uchar时256为列数的一个直方图矩阵。
最重要的问题是源代码的第302-310行:
int srcVal = srcRow[x] >> shift;
int ind1 = ind1_p[x] + srcVal;
int ind2 = ind2_p[x] + srcVal;
float res = (lutPlane1[ind1] * xa1_p[x] + lutPlane1[ind2] * xa_p[x]) * ya1 +
(lutPlane2[ind1] * xa1_p[x] + lutPlane2[ind2] * xa_p[x]) * ya;
计算出来的ind1和ind2应该会超过255,这样会导致数组访问越界。哪位能帮忙指点一下?上述lutPlane1、lutPlane2指向计算点所在块的前后直方图。
这个问题已经解决了。