首页 > 编程语言 >LocalNormalization算法原理、实现和在视频处理中震铃效果的发现和去除

LocalNormalization算法原理、实现和在视频处理中震铃效果的发现和去除

时间:2022-12-22 15:13:32浏览次数:37  
标签:中震铃 gray LocalNormalization float 算法 num blur 去除


    这个名字比较长,但其实说的是一系列问题:LocalNormalization这种图像增强算法是什么?有什么用?如何实现?当这种图像算法运用到动态视频的过程中会出现什么新的问题,如何解决问题获得做好效果?     感谢labviewpbt(imageshop作者)的指导和帮助。     这里是博客处理图片,红外光下的手臂血管图片。

 

 

     一、LocalNormalization是什么?有什么用?(资料来自imagej)      The local normalization tends to uniformize the mean and variance of an image around a local neighborhood. This is especially useful for correct non-uniform illumination or shading artifacts.     Local Normalization(局部正规)定义?对于光照均衡有很好的效果。      二、LocalNormalization如何实现?(来自stack overflow)      LN的定义比较简单            其中
  • f(x,y) is the original image
  • mf(x,y) is an estimation of a local mean of f(x,y)
  • σf(x,y) is an estimation of the local variance
  • g(x,y) is the output image
       那么如何计算图像的局部均值和局部方差了?很容易就会想到卷积的方法。具体思路可以参考上一篇博客。实际过程中采用如下方法

 

 

      由于Gaussian Smooth的速度比较慢,所以在实际过程中会使用Box Filter,基于Opencv的代码如下:
        //Local Normalization  input is 32f1u
cv::Mat LocalNormalization(cv::Mat float_gray,float sigma1,float sigma2){
    Mat gray, blur, num, den;
    float_gray.convertTo(float_gray, CV_32F, 1.0/255.0);
    // numerator = img - gauss_blur(img)
                 boxFilter(float_gray,blur,float_gray.depth(),Size(sigma1,sigma1));
    num = float_gray - blur;
    boxFilter(num.mul(num),blur,num.depth(),Size(sigma2,sigma2));
    // denominator = sqrt(gauss_blur(img^2))
    cv::pow(blur, 0.5, den);
    // output = numerator / denominator
    gray = num / den;
    // normalize output into [0,1]
    cv::normalize(gray, gray, 0.0, 1.0, NORM_MINMAX, -1);
    return gray;
}
    效果如下,可以看到原先不是很明显的血管得到了有效的增强。       进一步可以EqualHist 、Clahe甚至Frangi,但这里不是重点。       三、这种图像算法运用到动态视频的过程中会出现什么新的问题,如何解决这些问题。       现在看来,一切都很美好,预期的目的也基本实现了。但是当将代码移动到视频的时候就会发现一个比较严重的问题:屏幕闪动比较厉害,造成用户体验很差。       这个时候我在思考,如果出现这种情况,一般上是因为局部的运算造成了整体的均值的变化。本来想通过一些平滑的方法去除这个变化,但是效果都不是很好。一个偶尔的机会我采用photoshop对这个此时产生的图像进行了曲线计算。

 

 

可以发现直方图非常的窄。这个时候我想起以前在做美颜算法的时候,有一个从GIMP中挖过来的"对比度自动调节"函数。拿来使用,对于单幅图像,可以将对比度进行拉升,而且效果不错。更为关键的是对于连续的视频,很好地去除了抖动的效果。 四、小结 到目前为止,LocalNormalization这个问题算是比较好的解决了。反思解决问题的关键点,一个是平时的积累,这个包括经验的积累和资料的积累;一个是朋友和网络的支持;还有一个就是项目的拉动。总的来说,还是“产、学、研”的协力拉动,才能够产出好的产品。  

标签:中震铃,gray,LocalNormalization,float,算法,num,blur,去除
From: https://www.cnblogs.com/jsxyhelu/p/16998753.html

相关文章