SSIM(structural similarity index),結構相似性


ssim算法原理 - 我們都不是神的孩子 - CSDN博客 http://blog.csdn.net/ecnu18918079120/article/details/60149864

 

 

一、結構相似性(structural similarity)

      自然圖像具有極高的結構性,表現在圖像的像素間存在着很強的相關性,尤其是在空間相似的情況下。這些相關性在視覺場景中攜帶着關於物體結構的重要信息。我們假設人類視覺系統(HSV)主要從可視區域內獲取結構信息。所以通過探測結構信息是否改變來感知圖像失真的近似信息。
    大多數的基於誤差敏感度(error sensitivity)的質量評估方法(如MSE,PSNR)使用線性變換來分解圖像信號,這不會涉及到相關性。我們要討論的SSIM就是要找到更加直接的方法來比較失真圖像和參考圖像的結構。

二、SSIM指數

    物體表面的亮度信息與照度和反射系數有關,且場景中的物體的結構與照度是獨立的,反射系數與物體有關。我們可以通過分離照度對物體的影響來探索一張圖像中的結構信息。 這里,把與物體結構相關的亮度和對比度作為圖像中結構信息的定義。因為一個場景中的亮度和對比度總是在變化的,所以我們可以通過分別對局部的處理來得到更精確的結果。
                   
      由SSIM測量系統可得相似度的測量可由三種對比模塊組成,分別為:亮度,對比度,結構。接下來我們將會對這三模塊函數進行定義。
      首先,對於離散信號,我們以平均灰度來作為亮度測量的估計:
                                                        (1)
       亮度對比函數l(x,y)是關於 的函數。
       然后,由測量系統知道要把平均灰度值從信號中去除,對於離散信號 ,可使用標准差來做對比度估量值。
                                         (2)
       對比度對比函數c(x,y)就是 的函數。
       接下來,信號被自己的標准差相除,結構對比函數就被定義成 的函數。
       最后,三個對比模塊組合成一個完整的相似測量函數:
                                     (3)
       
       S(x,y)應該滿足以下三個條件:
       (1) 對稱性:
       (2) 有界性:
       (3) 最大值唯一性:當且僅當x=y時,S(x,y)=1 。
      
       現在,我們定義三個對比函數。
       亮度對比函數:
                                                   (4)
       常數 是為了避免 接近0時造成系統的不穩定。
       特別的,我們選擇 ,L為圖像灰度級數,對於8-bit灰度圖像,L=255, 。公式(4)滿足上述三個條件。
       對比度對比函數:
                                                    (5)
       常數 ,且 。公式(5)依然滿足上述三個條件。
       結構對比函數:
                                                      (6)
       其中
                                          (7)
      最后把三個函數組合起來,得到SSIM指數函數:
                                    (8)
      這里 ,用來調整三個模塊間的重要性。
      為了得到簡化形式,設 ,得到:
                                  (9)
 

三、SSIM指數應用於圖像質量評估

   在圖像質量評估之中,局部求SSIM指數的效果要好於全局。第一,圖像的統計特征通常在空間中分布不均;第二,圖像的失真情況在空間中也是變化的;第三,在正常視距內,人們只能將視線聚焦在圖像的一個區域內,所以局部處理更符合人類視覺系統的特點;第四,局部質量檢測能得到圖片空間質量變化的映射矩陣,結果可服務到其他應用中。
     所以,在上述公式中, 都加入了一個8*8的方形窗,並且逐像素的遍歷整幅圖片。每一步計算, 和SSIM都是基於窗口內像素的,最終得到一個SSIM指數映射矩陣,由局部SSIM指數組成。然而,簡單的加窗會使映射矩陣出現不良的“分塊”效應。為解決這問題,我們使用11*11的對稱高斯加權函數 作為加權窗口,標准差為1.5,且
                                                  (10)
 
的估計值表示為:
                                                (11)
                                   (12)
                                (13)
       應用這種加窗方法,映射矩陣就可展現出局部各向同性的性質。
       在這里,經過一些實驗總結,我們把K1設為0.01,K2設為0.03,然后用平均SSIM指數作為整幅圖像的估計質量評價:
                     (14)
其中X,Y為圖像, 為局部SSIM指數在映射中的位置,MN為局部窗口的數量。
 
     
四、matlab實現
[plain]  view plain  copy
 
 
  1. function [mssim, ssim_map,siga_sq,sigb_sq] = SSIM(ima, imb)  
  2. % ========================================================================  
  3. %ssim的算法主要參考如下論文:  
  4. %Z. Wang, A. C. Bovik, H. R. Sheikh, and E. P. Simoncelli, "Image  
  5. % quality assessment: From error visibility to structural similarity,"  
  6. % IEEE Transactios on Image Processing, vol. 13, no. 4, pp. 600-612,  
  7. % Apr. 2004.  
  8. %  首先對圖像加窗處理,w=fspecial('gaussian', 11, 1.5);  
  9. %                 (2*ua*ub+C1)*(2*sigmaa*sigmab+C2)  
  10. %   SSIM(A,B)=————————————————————————  
  11. %              (ua*ua+ub*ub+C1)(sigmaa*sigmaa+sigmab*sigmab+C2)  
  12. %     C1=(K1*L);  
  13. %     C2=(K2*L);   K1=0.01,K2=0.03  
  14. %     L為灰度級數,L=255  
  15. %-------------------------------------------------------------------  
  16. %     ima - 比較圖像A  
  17. %     imb - 比較圖像B  
  18. %  
  19. % ssim_map - 各加窗后得到的SSIM(A,B|w)組成的映射矩陣  
  20. %    mssim - 對加窗得到的SSIM(A,B|w)求平均,即最終的SSIM(A,B)  
  21. %  siga_sq - 圖像A各窗口內灰度值的方差  
  22. %  sigb_sq - 圖像B各窗口內灰度值的方差  
  23. %-------------------------------------------------------------------  
  24. %  Cool_ben  
  25. %========================================================================  
  26.   
  27. w = fspecial('gaussian', 11, 1.5);  %window 加窗  
  28. K(1) = 0.01;                      
  29. K(2) = 0.03;                      
  30. L = 255;       
  31. ima = double(ima);  
  32. imb = double(imb);  
  33.   
  34. C1 = (K(1)*L)^2;  
  35. C2 = (K(2)*L)^2;  
  36. w = w/sum(sum(w));  
  37.   
  38. ua   = filter2(w, ima, 'valid');%對窗口內並沒有進行平均處理,而是與高斯卷積,  
  39. ub   = filter2(w, imb, 'valid'); % 類似加權平均  
  40. ua_sq = ua.*ua;  
  41. ub_sq = ub.*ub;  
  42. ua_ub = ua.*ub;  
  43. siga_sq = filter2(w, ima.*ima, 'valid') - ua_sq;  
  44. sigb_sq = filter2(w, imb.*imb, 'valid') - ub_sq;  
  45. sigab = filter2(w, ima.*imb, 'valid') - ua_ub;  
  46.   
  47. ssim_map = ((2*ua_ub + C1).*(2*sigab + C2))./((ua_sq + ub_sq + C1).*(siga_sq + sigb_sq + C2));  
  48.   
  49.   
  50. mssim = mean2(ssim_map);  
  51.   
  52. return  
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM