图像质量评价指标之 PSNR 和 SSIM

发布时间:2020-10-06  栏目:图像处理  评论:0 Comments

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

给定一个大小为m×n的干净图像I和噪声图像K,均方误差(MSE)定义为:

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

然后PSNR (dB)就定义为:

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

其中MAX_I^2为图片可能的最大像素值。针对无符号类型,如果每个像素都由 8 位二进制来表示,那么就为 255。通常,如果像素值由B位二进制来表示,那么MAX_I = 2^B-1

一般地,针对 uint8 数据,最大像素值为 255,;针对浮点型数据,最大像素值为 1 (Why??)。

 

示例代码:

# 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)

PSNR取值范围为(0,∞),mse越小,PSNR越大,越好

2. SSIM (Structural SIMilarity) 结构相似性

SSIM公式基于样本xy之间的三个比较衡量:亮度 (luminance)、对比度 (contrast) 和结构 (structure)。

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)
data_range可选输入
ssim取值为(0, 1],越大两个图像越相似,1代表两个图象完全相同 一般来说,SSIM值为0.97, 0.98, 0.99等,代表图像重建效果比较好。 

 

参考:

https://zhuanlan.zhihu.com/p/50757421

https://blog.csdn.net/Lu597203933/article/details/51019732

Comments are closed.

相册集

pix pix pix pix pix pix

关于自己

杨文龙,微软Principal Engineering Manager, 曾在各家公司担任影像技术资深总监、数据科学团队资深经理、ADAS算法总监、资深深度学习工程师等职位,热爱创新发明,专注于人工智能、深度学习、图像处理、机器学习、算法、自然语言处理及软件等领域,目前发明有国际专利19篇,中国专利28篇。

联系我

个人技术笔记

welonshen@gmail.com

2015 in Shanghai