圖像質量評價指標之 PSNR 和 SSIM

1. PSNR (Peak Signal-to-Noise Ratio) 峯值信噪比

給定一個大小爲 m×n 的乾淨圖像 I 和噪聲圖像 K,均方偏差 (MSE) 定義爲:html

MSE = \frac{1}{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}[I(i, j)-K(i,j)]^2

而後 PSNR (dB) 就定義爲:python

PSNR = 10 \cdot log_{10}(\frac{MAX_I^2}{MSE})

其中 MAX_I^2 爲圖片可能的最大像素值。若是每一個像素都由 8 位二進制來表示,那麼就爲 255。一般,若是像素值由 B 位二進制來表示,那麼 MAX_I = 2^B-1api

通常地,針對 uint8 數據,最大像素值爲 255,;針對浮點型數據,最大像素值爲 1。函數

上面是針對灰度圖像的計算方法,若是是彩色圖像,一般有三種方法來計算。ui

  • 分別計算 RGB 三個通道的 PSNR,而後取平均值。
  • 計算 RGB 三通道的 MSE ,而後再除以 3 。
  • 將圖片轉化爲 YCbCr 格式,而後只計算 Y 份量也就是亮度份量的 PSNR。

其中,第二和第三種方法比較常見。spa

# im1 和 im2 都爲灰度圖像,uint8 類型

# method 1
diff = im1 - im2
mse = np.mean(np.square(diff))
psnr = 10 * np.log10(255 * 255 / mse)

# method 2
psnr = skimage.measure.compare_psnr(im1, im2, 255)
複製代碼

compare_psnr(im_true, im_test, data_range=None) 函數原型可見此處code

針對超光譜圖像,咱們須要針對不一樣波段分別計算 PSNR,而後取平均值,這個指標稱爲 MPSNR。cdn

2. SSIM (Structural SIMilarity) 結構類似性

SSIM 公式基於樣本 xy 之間的三個比較衡量:亮度 (luminance)、對比度 (contrast) 和結構 (structure)。htm

l(x,y) =  \frac{2\mu_x \mu_y + c_1}{\mu_x^2+ \mu_y^2 + c_1}
c(x,y) =  \frac{2\sigma_x \sigma_y + c_2}{\sigma_x^2+ \sigma_y^2 + c_2}
s(x,y) =  \frac{\sigma_{xy} + c_3}{\sigma_x \sigma_y  + c_3}

通常取 c_3 = c_2 / 2圖片

  • \mu_xx 的均值
  • \mu_yy 的均值
  • \sigma_x^2x 的方差
  • \sigma_y^2y 的方差
  • \sigma_{xy}xy 的協方差
  • c_1 = (k_1L)^2, c_2 = (k_2L)^2 爲兩個常數,避免除零
  • L 爲像素值的範圍,2^B-1
  • k_1=0.01, k_2=0.03 爲默認值

那麼

SSIM(x, y) = [l(x,y)^{\alpha} \cdot c(x,y)^{\beta} \cdot s(x,y)^{\gamma}]

\alpha,\beta,\gamma 設爲 1,能夠獲得

SSIM(x, y) = \frac{(2\mu_x \mu_y + c_1)(2\sigma_{xy}+c_2)}{(\mu_x^2+ \mu_y^2 + c_1)(\sigma_x^2+\sigma_y^2+c_2)}

每次計算的時候都從圖片上取一個 N×N 的窗口,而後不斷滑動窗口進行計算,最後取平均值做爲全局的 SSIM。

# im1 和 im2 都爲灰度圖像,uint8 類型
ssim = skimage.measure.compare_ssim(im1, im2, data_range=255)
複製代碼

compare_ssim(X, Y, win_size=None, gradient=False, data_range=None, multichannel=False, gaussian_weights=False, full=False, **kwargs) 函數原型可見此處

針對超光譜圖像,咱們須要針對不一樣波段分別計算 SSIM,而後取平均值,這個指標稱爲 MSSIM。

獲取更多精彩,請關注「seniusen」!

相關文章
相關標籤/搜索