1. 程式人生 > >影象增強處理之:同態濾波與Retinex演算法(三)Retinex鄰域演算法:SSR,MSR,MSRCR

影象增強處理之:同態濾波與Retinex演算法(三)Retinex鄰域演算法:SSR,MSR,MSRCR

關於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);
end
figure,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也可實現色彩增強、顏色恆常性、區域性動態範圍壓縮、全域性動態範圍壓縮。公式為:


測試函式如下:

%% MSR
clc,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);
end
figure,
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()表示顏色空間的對映函式; β表示增益常數;α表示受控制的非線性強度;

%% MSRCR
clc,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或者頻率域操作,這裡就不再碼了,有興趣的可以嘗試,說不定效果輸出會有意外的驚喜哦~~

這個我沒測試過,只是拷貝一下演算法步驟,參見參考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