我正在尝试在 OpenCV 中实现一种局部归一化算法,以减少图像中的照明差异。我找到了一个MATLAB 函数,并在 OpenCV 中实现了它。但是,我得到的结果与 MATLAB 函数给出的结果不同。
这是我的代码:
Mat localNorm(Mat image, float sigma1, float sigma2)
{
Mat floatGray, blurred1, blurred2, temp1, temp2, res;
image.convertTo(floatGray, CV_32FC1);
floatGray = floatGray/255.0;
int blur1 = 2*ceil(-NormInv(0.05, 0, sigma1))+1;
cv::GaussianBlur(floatGray, blurred1, cv::Size(blur1,blur1), sigma1);
temp1 = floatGray-blurred1;
cv::pow(temp1, 2.0, temp2);
int blur2 = 2*ceil(-NormInv(0.05, 0, sigma2))+1;
cv::GaussianBlur(temp2, blurred2, cv::Size(blur2,blur2), sigma2);
cv::pow(blurred2, 0.5, temp2);
floatGray = temp1/temp2;
floatGray = 255.0*floatGray;
floatGray.convertTo(res, CV_8UC1);
return res;
}
该函数NormInv
是 Euan Dean 在这篇文章中给出的 C++ 实现。
下面显示了我得到的结果和理论结果,对于相同的值sigma1
和sigma2
(分别为 2.0 和 20.0)
我尝试对 and 使用不同的值sigma1
,sigma2
但它们似乎都不起作用。我也尝试过在高斯函数中做blur1=0
和blur2=0
,但它也不起作用。
任何帮助,将不胜感激。提前致谢。