图像增强处理之:同态滤波与Retinex算法(三)Retinex邻域算法:SSR,MSR,MSRCR

来源:互联网 发布:神经网络算法预测股市 编辑:程序博客网 时间:2024/04/29 19:54

关于Retinex的基础知识这里就不再说了,http://blog.csdn.net/piaoxuezhong/article/details/78248219已经介绍过了,本篇将继续讲一下基于邻域的Retinex算法实现,主要分为三类:单尺度Retinex,多尺度Retinex和带色彩恢复的Retinex。

单尺度Retinex:SSR

根据之前对retinex算法的原理分析,我们可以得到:r=s-l=logS-logL,其中原始图像为S(x, y),反射图像为R(x, y),亮度图像为L(x, y),下面我直接贴下SSR的公式部分:


在 SSR 算法中,参数 c 的选择直接影响图像增强的效果:c 越小,SSR 的动态压缩能力越强,图像阴暗部分的细节得到更好的增强,但是由于平均对比度范围较小,结果会产生颜色失真;c 越大,SSR 的颜色保真度越高,但是动态压缩能力会减弱。通常 SSR 是在动态范围压缩和色感一致性之间寻找平衡点。

    %计算SSR    SS=zeros(m,n);    for i=1:m       for j=1:n        SS(i,j)=log(S(i,j)+0.00005); %对原始图像取对数操作        GG(i,j)=log(G(i,j)+0.00005);        V(i,j)= SS(i,j)-GG(i,j); %初步得到反射图像       end    end
函数实现我放在资源里了,链接地址,可以实现灰度图像或彩色图像的SSR,测试函数为:

%SSR测试函数clc,clear all,close all;Img=imread('../testImg/15.jpg');if length(size(Img))>2    OutImg=Img;    R = Img(:,:,1);      G = Img(:,:,2);      B = Img(:,:,3);      OutImg(:,:,1) = SSR(R);      OutImg(:,:,2) = SSR(G);     OutImg(:,:,3) = SSR(B);  else    OutImg=SSR(Img);endfigure,subplot(1,2,1),imshow(Img); title('original image');subplot(1,2,2),imshow(OutImg); title('SSR image');


可以看出,单独使用传统SSR算法很有可能不能取得很好的处理效果,所以有许多改进算法出现,如参考2,3;

多尺度Retinex:MSR

SSR 算法可能出现 halo 现象,Jobson等人又提出了多尺度Retinex算法。通过联合多个尺度的滤波结果,补偿 halos 和照射信息的缺失,突出暗区域的细节;MSR在SSR基础上,同时保持图像高保真度与对图像的动态范围进行压缩,MSR也可实现色彩增强、颜色恒常性、局部动态范围压缩、全局动态范围压缩。公式为:


为了保证兼有SSR高、中、低三个尺度的优点,K取值通常为3,高斯尺度分别取15, 80, 200(这个可以自己多次尝试)。当K=1时,即为SSR。代码请参见:http://download.csdn.net/download/piaoxuezhong/10029685。

测试函数如下:

%% MSRclc,clear all,close all;Img=imread('../testImg/25.jpg');if length(size(Img))>2    OutImg=Img;    R = Img(:,:,1);      G = Img(:,:,2);      B = Img(:,:,3);      OutImg(:,:,1) = MSR(R);      OutImg(:,:,2) = MSR(G);     OutImg(:,:,3) = MSR(B);  else    OutImg=MSR(Img);endfigure,subplot(1,2,1),imshow(Img); title('original image');subplot(1,2,2),imshow(OutImg); title('MSR image');

我选择了雾天图像做了测试,参数还有优化的余地,这里效果感觉不是很好。


带色彩恢复的Retinex:MSRCR

SSR或MSR算法,可能会导致结果图像增加噪声,使得图像的局部细节色彩失真,不能显现出物体的真正颜色,为此,MSRCR在MSR的基础上,加入了色彩恢复因子,补偿由于图像局部区域对比度增强而导致颜色失真的缺陷。目前来看,MSRCR算法受关注程度比较高,可以查到的文献相对也多。这里介绍两种色彩恢复方法:

(1)IPOL的《Multiscale Retinex》一文中给出的颜色恢复方法为:


Ii(x, y)表示第i个通道的图像,S表示通道数,Ci表示第i个通道的彩色恢复因子; f()表示颜色空间的映射函数; β表示增益常数;α表示受控制的非线性强度;

算法实现链接地址:http://download.csdn.net/download/piaoxuezhong/10030135,测试函数:

%% MSRCRclc,clear all,close all;Img=imread('../testImg/25.jpg');OutImg=MSRCR(Img);figure,subplot(1,2,1),imshow(Img); title('original image');subplot(1,2,2),imshow(OutImg); title('MSRCR image');

以上都是在RGB空间域操作的,还可以转换到HSV或者频率域操作,这里就不再码了,有兴趣的可以尝试,说不定效果输出会有意外的惊喜哦~~

(2)contrast-retinex.c文件的算法:http://gimp.sourcearchive.com/documentation/2.6.1/contrast-retinex_8c-source.html

这个我没测试过,只是拷贝一下算法步骤,参见参考7:

  • 计算出 log[R(x,y)]中R/G/B各通道数据的均值Mean和均方差Var(注意是均方差)。
  • 类似下述公式计算各通道的Min和Max值。
    • Min = Mean - Dynamic * Var;
    • Max = Mean + Dynamic * Var;
  • 对Log[R(x,y)]的每一个值Value,进行线性映射:
    R(x,y) = ( Value - Min ) / (Max - Min) * (255 - 0), 同时要注意增加一个溢出判断,即:
    • if (R(x, y) > 255) R(x,y) = 255;
    • else if (R(x,y) < 0) R(x,y) = 0;

参考:

  1. https://www.researchgate.net/publication/272643640_Multiscale_Retinex
  2. 《基于改进SSR的LDCT影像增强算法》[J].计算机工程
  3. 《改进单尺度Retinex算法在图像增强中的应用》[J].计算机应用与软件
  4. http://download.csdn.net/download/u011004632/8071643?locationNum=2&fps=1
  5. 《A Multiscale Retinex for Bridging the Gap Between Color Images and the Human Observation of Scenes》
  6. http://blog.csdn.net/ajianyingxiaoqinghan/article/details/71435098

  7. http://blog.csdn.net/bluecol/article/details/45675615

  8. http://www.cnblogs.com/Imageshop/archive/2013/04/17/3026881.html

  9. http://www.cnblogs.com/Imageshop/p/3810402.html

阅读全文
0 0