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

10/18 10:57
阅读数 77

 

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

 

其中,MSE表示当前图像X和参考图像Y的均方误差(MeanSquare Error),H、W分别为图像的高度和宽度;n为每像素的比特数,一般取8,即像素灰阶数为256. PSNR的单位是dB,数值越大表示失真越小。

PSNR是最普遍和使用最为广泛的一种图像客观评价指标,然而它是基于对应像素点间的误差,即 基于误差敏感的图像质量评价。由于并未考虑到人眼的视觉特性(人眼对空间频率较低的对比差异敏感度较高,人眼对亮度对比差异的敏感度较色度高,人眼对一个 区域的感知结果会受到其周围邻近区域的影响等),因而经常出现评价结果与人的主观感觉不一致的情况。
 

PSNR高于40dB说明图像质量极好(即非常接近原始图像),

在30—40dB通常表示图像质量是好的(即失真可以察觉但可以接受),

在20—30dB说明图像质量差;

最后,PSNR低于20dB图像不可接受

 

其中 MAX2IMAXI2 为图片可能的最大像素值。如果每个像素都由 8 位二进制来表示,那么就为 255。通常,如果像素值由 BB 位二进制来表示,那么 MAXI=2B−1MAXI=2B−1。

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

上面是针对灰度图像的计算方法,如果是彩色图像,通常有三种方法来计算。

  • 分别计算 RGB 三个通道的 PSNR,然后取平均值。
  • 计算 RGB 三通道的 MSE ,然后再除以 3 。
  • 将图片转化为 YCbCr 格式,然后只计算 Y 分量也就是亮度分量的 PSNR。

其中,第二和第三种方法比较常见。

# 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) 函数原型可见此处

针对超光谱图像,我们需要针对不同波段分别计算 PSNR,然后取平均值,这个指标称为 MPSNR。

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

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

 

l(x,y)=2μxμy+c1μ2x+μ2y+c1l(x,y)=2μxμy+c1μx2+μy2+c1

 

 

c(x,y)=2σxσy+c2σ2x+σ2y+c2c(x,y)=2σxσy+c2σx2+σy2+c2

 

 

s(x,y)=σxy+c3σxσy+c3s(x,y)=σxy+c3σxσy+c3

 

一般取 c3=c2/2c3=c2/2。

  • μxμx 为 xx 的均值
  • μyμy 为 yy 的均值
  • σ2xσx2 为 xx 的方差
  • σ2yσy2 为 yy 的方差
  • σxyσxy 为 xx 和 yy 的协方差
  • c1=(k1L)2,c2=(k2L)2c1=(k1L)2,c2=(k2L)2 为两个常数,避免除零
  • LL 为像素值的范围,2B−12B−1
  • k1=0.01,k2=0.03k1=0.01,k2=0.03 为默认值

那么

 

SSIM(x,y)=[l(x,y)α⋅c(x,y)β⋅s(x,y)γ]SSIM(x,y)=[l(x,y)α⋅c(x,y)β⋅s(x,y)γ]

 

将 α,β,γα,β,γ 设为 1,可以得到

 

SSIM(x,y)=(2μxμy+c1)(2σxy+c2)(μ2x+μ2y+c1)(σ2x+σ2y+c2)SSIM(x,y)=(2μxμy+c1)(2σxy+c2)(μx2+μy2+c1)(σx2+σy2+c2)

 

每次计算的时候都从图片上取一个 N×NN×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。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部