前言:前面的一片文章中較爲系統的歸納了圖像質量評價的各種指標,其中使用的最多的就是PSNR和SSIM,鑑於PSNR較爲簡單,本文專門介紹SSIM的思想以及它的實現。
前一篇文章參考:圖像質量評估各項指標(一)
一、從均方誤差MSE和峯值信噪比PSNR說起
計算圖像降噪後的質量,最 直接的思路即比較降噪後的圖像與真實圖像(distortion-free)之間的差剖面,即可視誤差,通過 visibility of errors 評價圖像質量。PSNR 和 MSE 就是基於這種簡單直接的思路確定的指標,
MSE(Mean Squared Error),顧名思義,定義略。
PSNR(Peak Signal to Noise Ratio),峯值信噪比,即峯值信號的能量與噪聲的平均能量之比,通常表示的時候取 log 變成分貝(dB),由於 MSE 爲真實圖像與含噪圖像之差的能量均值,而兩者的差即爲噪聲,因此 PSNR 即峯值信號能量與 MSE 之比。定義式如下:
第二個等式由於圖像像素點數值以量化方式保存,bits 即每個像素點存儲所佔的位數。因此 MaxValue 即爲 2^bits - 1。
計算PSNR
def cal_psnr(im1, im2):
mse = (np.abs(im1 - im2) ** 2).mean()
psnr = 10 * np.log10(255 * 255 / mse)
return psnr
由於 灰度等級gray scale 存成 8bit ,故最大值255。
當時上面的評價指標有一個大的問題,那就是
由於基於差剖面的簡單計算不符合人類視覺系統(Human Visual System,HVS)的評價結果,因此需要對評價方式進行重新考量。如果圖片的最終目的是對人類展示的話,那麼質量應該以人的主管測評爲準。但是由於主管評價不方便且費時,因此我們試圖用客觀的 圖像質量評價來對圖像進行評價,使其接近 HVS 的特點。由於 HVS 具有可以抓取圖像的結構特徵的特點,因此設計(結構相似性) Structural Similarity 進行評價,即 SSIM 。
注意:PSNR和SSIM都是全參考的(full reference)的,也就是需要無噪聲的真實圖像作爲參考依據。
二、結構相似性SSIM
SSIM的基本思路是,通過以下三個方面來對兩幅圖像的相似性進行評估,即
1. luminance,亮度
2. contrast,對比度
3. structure,結構
算法的框圖基本如下:
基本流程爲:
(1)對於輸入的x和y,首先計算出(亮度測量)luminance measurement,進行比對,得到第一個相似性有關的評價;
(2)再減去luminance的影響,計算(對比度測量)contrast measurement,比對,得到第二個評價;
(3)再用上一步的結果除掉對比度的影響,再進行structure的比對。最後將結果combine,得到最終的評價結果。
從實現角度來講,
(1)亮度luminance用均值表徵,以標準圖像x爲例,當然還有另外一張作爲對比的圖像y,公式是一樣的,如下:
(2)對比度contrast用經過均值歸一化之後的方差表徵,以標準圖像x爲例,當然還有另外一張作爲對比的圖像y,公式是一樣的如下:
(3)結構用相關係數(就是統計意義上的 r ,協方差與方差乘積的比值)。
相關係數本來的公式如下:
在這裏即爲:
其中,有:
注意:
上面的計算我們在實際應用的時候一般不這樣去逐像素計算,一般採用高斯核函數(即高斯卷積)計算圖像的均值、方差以及協方差,而不是採用遍歷像素點的方式,以換來更高的效率。
具體的計算公式如下所示:
(1)亮度luminance測量值——實際上式ux,uy的函數
(2)對比度contrast測量值——實際上是δx和δy的函數
(3)結構structure測量值——實際上是δxy與δx,δy的函數
其中,有:
最終的結構相似性公式如下:
其中三個參數α,β,γ 用來表示這三個模塊的重要性。
其中SSIM表示相似度,這個算子應當滿足作爲度量的基本性質,即
- Symmetry,交換x和y順序不影響結果。
- Boundedness,值要有界,這裏時小於等於1.。
- Unique maximum,最大值,即1,只有當 x = y 時候取到。
爲了得到簡化形式,令
於是得到下面的簡化公式:
這就是一般我們計算的表達式。
所以結構相似度指數從圖像組成的角度將結構信息定義爲獨立於亮度、對比度的反映場景中物體結構的屬性,並將失真建模爲亮度、對比度和結構三個不同因素的組合。用均值作爲亮度的估計,標準差作爲對比度的估計,協方差作爲結構相似程度的度量。
補充:
但是由於SSIM應該應用於局部,這是爲了擬合人類視覺的局部性的特點,因此實際上我們用 mean-SSIM或者MSSIM,對各個local window的SSIM求平均。什麼意思呢?
實際上就是先將一副圖像劃分成一些區域,對每一個區域求一個SSIM的值,然後一幅圖像上面的所有區域的SSIM的平均值作爲整個圖像的SSIM值。
三、SSIM的實現
(1)方式一:python的skimage庫中實現了一些常見的評價指標如
from skimage.measure import compare_mse #均方誤差
from skimage.measure import compare_psnr #峯值信噪比
from skimage.measure import compare_ssmi #結構相似性
(2)自己實現:代碼如下