图像质量评估指标:SNR、PSNR、MSE和SSIM

图像质量评估指标

一般进行图像噪声的评估手段有四种,分别是:

  • 信噪比(Signal to Noise Ratio,SNR)
  • 峰值信噪比(Peak Signal to Noise Ratio, PSNR)
  • 均方误差(Mean Square Error, MSE)
  • 结构相似性(Structural SIMilarity, SSIM)。

下面分别介绍这四种评估指标。

均方误差(MSE)

均方差值是用于比较两幅图像 K K K, I I I 的均方差值
M S E = 1 m n ∑ i = 0 n − 1 ∑ j = 0 m − 1 ∥ K ( i , j ) − I ( i , j ) ∥ 2 M S E=\frac{1}{m n} \sum_{i=0}^{n-1} \sum_{j=0}^{m-1}\|K(i, j)-I(i, j)\|^{2} MSE=mn1i=0n1j=0m1K(i,j)I(i,j)2

信噪比(SNR)

SNR用于描述信号与噪声的比值
S N R ( d B ) = 10 log ⁡ 10 [ ∑ x = 0 m − 1 ∑ y = 0 n − 1 ( f ( x , y ) ) 2 ∑ x = 0 m − 1 ∑ y = 0 n − 1 ( f ( x , y ) − f ^ ( x , y ) ) 2 ] S N R(d B)=10 \log _{10}\left[\frac{\sum_{x=0}^{m-1} \sum_{y=0}^{n-1}(f(x, y))^{2}}{\sum_{x=0}^{m-1} \sum_{y=0}^{n-1}(f(x, y)-\hat{f}(x, y))^{2}}\right] SNR(dB)=10log10[x=0m1y=0n1(f(x,y)f^(x,y))2x=0m1y=0n1(f(x,y))2]

SNR代码实现

下面的代码是加入信噪比未为leveldB的噪声的代码:

def add_noise(y, level):
        with torch.no_grad():
            sigma = 10 ** (- (1 / 20) * level)
            y = y + sigma * torch.randn(y.size()).to(self.device)
        return y

峰值信噪比(PSNR)

灰度图PSNR计算

给定一个大小为 m × n m\times n m×n的干净图像 I I I和噪声图像 K K K,均方误差( M S E MSE MSE)定义为:
M S E = 1 m n ∑ i = 0 m − 1 ∑ j = 0 n − 1 [ I ( i , j ) − K ( i , j ) ] 2 M S E=\frac{1}{m n} \sum_{i=0}^{m-1} \sum_{j=0}^{n-1}[I(i, j)-K(i, j)]^{2} MSE=mn1i=0m1j=0n1[I(i,j)K(i,j)]2
在此基础上,PSNR(dB)被定义为:
P S N R = 10 ⋅ log ⁡ 10 ( M A X I 2 M S E ) P S N R=10 \cdot \log _{10}\left(\frac{M A X_{I}^{2}}{M S E}\right) PSNR=10log10(MSEMAXI2)
其中 M A X I 2 MAX_I^2 MAXI2为图片可能的最大像素值。如果每个像素都由 8 位二进制来表示,那么就为 255。通常,如果像素值由 B B B位二进制来表示,那么 M A X I = 2 B − 1 MAX_I=2^B-1 MAXI=2B1

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

RGB图像PSNR计算

如果是彩色图像,通常有三种方法来计算。

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

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

峰值信噪比PSNR衡量图像失真或是噪声水平的客观标准2个图像之间PSNR值越大,则越相似。普遍基准为30dB,30dB以下的图像劣化较为明显

PSNR代码实现

方法一:利用skimage模块的compare_psnr函数计算。

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

方法二:来自大佬LeCun的PSNR函数:

# 计算PSNR
def PSNR(target, pred, R=1, dummy=1e-4, reduction='mean'):
    with torch.no_grad():
        dims = (1, 2, 3) if len(target.shape) == 4 else 1
        mean_sq_err = ((target - pred) ** 2).mean(dims)
        mean_sq_err = mean_sq_err + (mean_sq_err == 0).float() * dummy  # if 0, fill with dummy -> PSNR of 40 by default
        output = 10 * torch.log10(R ** 2 / mean_sq_err)
        if reduction == 'mean':
            return output.mean()
        elif reduction == 'none':
            return output

结构相似性(SSIM)

SSIM 描述两个图像的相似性,公式基于样本 x x x y y y之间的三个比较衡量:亮度 (luminance)、对比度 (contrast) 和结构 (structure)。
l ( x , y ) = 2 μ x μ y + c 1 μ x 2 + μ y 2 + c 1 c ( x , y ) = 2 σ x σ y + c 2 σ x 2 + σ y 2 + c 2 s ( x , y ) = σ x y + c 3 σ x σ y + c 3 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_{x y}+c_{3}}{\sigma_{x} \sigma_{y}+c_{3}} l(x,y)=μx2+μy2+c12μxμy+c1c(x,y)=σx2+σy2+c22σxσy+c2s(x,y)=σxσy+c3σxy+c3
一般取 c 3 = c 2 / 2 c_3=c_2/2 c3=c2/2

  • μ x \mu_x μx x x x的均值, μ y \mu_y μy x x x的均值; σ x 2 \sigma_x^2 σx2 x x x的方差, σ y 2 \sigma_y^2 σy2 y y y的方差; σ x y 2 \sigma_{xy}^2 σxy2 x y xy xy的方差;
  • c 1 = ( k 1 L ) 2 , c 2 = ( k 2 L ) 2 c_{1}=\left(k_{1} L\right)^{2}, c_{2}=\left(k_{2} L\right)^{2} c1=(k1L)2,c2=(k2L)2为两个常数,避免除零, L L L为像素值的范围;
  • k 1 = 0.01 , k 2 = 0.03 k_{1}=0.01, k_{2}=0.03 k1=0.01,k2=0.03为默认值。

那么:
SSIM ⁡ ( x , y ) = [ l ( x , y ) α ⋅ c ( x , y ) β ⋅ s ( x , y ) γ ] \operatorname{SSIM}(x, y)=\left[l(x, y)^{\alpha} \cdot c(x, y)^{\beta} \cdot s(x, y)^{\gamma}\right] SSIM(x,y)=[l(x,y)αc(x,y)βs(x,y)γ]
α , β , γ \alpha,\beta,\gamma α,β,γ设为 1,可以得到
SSIM ⁡ ( x , y ) = ( 2 μ x μ y + c 1 ) ( 2 σ x y + c 2 ) ( μ x 2 + μ y 2 + c 1 ) ( σ x 2 + σ y 2 + c 2 ) \operatorname{SSIM}(x, y)=\frac{\left(2 \mu_{x} \mu_{y}+c_{1}\right)\left(2 \sigma_{x y}+c_{2}\right)}{\left(\mu_{x}^{2}+\mu_{y}^{2}+c_{1}\right)\left(\sigma_{x}^{2}+\sigma_{y}^{2}+c_{2}\right)} SSIM(x,y)=(μx2+μy2+c1)(σx2+σy2+c2)(2μxμy+c1)(2σxy+c2)

每次计算的时候都从图片上取一个 N × M N\times M N×M的窗口,然后不断滑动窗口进行计算,最后取平均值作为全局的 SSIM。

SSIM返回图像的MSSIM。这也是一个介于零和一之间的浮点数(越高越好)

SSIM代码实现

# im1 和 im2 都为灰度图像,uint8 类型
ssim = skimage.measure.compare_ssim(im1, im2, data_range=255)
目 录 第一章 引言 1 1.1 图像质量评价的定义 1 1.2 研究对象 1 1.3 方法分类 2 1.4 研究意义 3 第二章 历史发展和研究现状 4 2.1 基于手工特征提取的图像质量评价 4 2.1.1 基于可视误差的“自底向上”模型 4 2.1.1.1 Daly模型 4 2.1.1.2 Watson’s DCT模型 5 2.1.1.3 存在的问题 5 2.1.2 基于HVS的“自顶向下”模型 5 2.1.2.1 结构相似性方法 6 2.1.2.2 信息论方法 8 2.1.2.3 存在的问题 9 2.2 基于深度学习图像质量评价 10 2.2.1 CNN模型 10 2.2.2 多任务CNN模型 12 2.2.3 研究重点 15 第三章 图像质量评价数据集和性能指标 16 3.1 图像质量评价数据集简介 16 3.2 图像质量评价模型性能指标 17 第四章 总结与展望 19 4.1 归纳总结 19 4.2 未来展望 19 参考文献 21 第一章 引言 随着现代科技的发展,诸如智能手机,平板电脑和数码相机之类的消费电子产品快速普及,已经产生了大量的数字图像。作为一种更自然的交流方式,图像中的信息相较于文本更加丰富。信息化时代的到来使图像实现了无障碍传输,图像在现代社会工商业的应用越来越广泛和深入,是人们生活中最基本的信息传播手段,也是机器学习的重要信息源。 图像质量图像系统的核心价值,此外,它也是图像系统技术水平的最高层次。但是,对图像的有损压缩、采集和传输等过程会很容易导致图像质量下降的问题。例如:在拍摄图像过程中,机械系统的抖动、光学系统的聚焦模糊以及电子系统的热噪声等都会造成图像不够清晰;在图像存储和传输过程中,由于庞大的数据量和有限通讯带宽的矛盾,图像需要进行有损压缩编码,这也会导致振铃效应、模糊效应和块效应等图像退化现象的出现。所以,可以说图像降质在图像系统的各个层面都会很频繁地出现,对图像质量作出相应的客观评价是十分重要且有意义的。为了满足用户在各种应用中对图像质量的要求,也便于开发者们维持、控制和强化图像质量图像质量评价(Image Quality Assessment,IQA)是一种对图像所受到的质量退化进行辨识和量化的
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗的西瓜瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值