c – OpenCV中的本地规范化

前端之家收集整理的这篇文章主要介绍了c – OpenCV中的本地规范化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在OpenCV中实现局部归一化算法,以减少图像中的照明差异.我找到了一个 MATLAB function,我在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,sigma1))+1;
    cv::GaussianBlur(floatGray,cv::Size(blur1,blur1),sigma1);
    temp1 = floatGray-blurred1;

    cv::pow(temp1,2.0,temp2);
    int blur2 = 2*ceil(-NormInv(0.05,sigma2))+1;
    cv::GaussianBlur(temp2,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在this post年给出的C实现.

以下显示了我得到的结果和理论结果,对于sigma1和sigma2的相同值(分别为2.0和20.0)

我尝试过为sigma1和sigma2使用不同的值,但它们似乎都没有用.我也尝试在高斯函数中做blur1 = 0和blur2 = 0,但它也不起作用.

任何帮助,将不胜感激.提前致谢.

解决方法

在将图像转换为CV_8UC1之前,需要将图像标准化为0到255之间

猜你在找的C&C++相关文章