图像/视频增强一般包含去噪、去雾和超分辨率等等,如何来评价经过增强后的图像就需要衡量指标来评定,图像质量评价从方法上可分为主观评价方法和客观评价方法,本文主要介绍客观评价方法中三个重要的评价指标均方误差(MSE,Mean Squared Error)、峰值信噪比(PSNR,Peak Signal to Noise Rate)和结构相似性(SSIM,Structural Similarity)。
在深度学习中选择不同的loss function对模型的训练也有不同的影响,在图像增强领域中常用L1、L2距离。
1.均方误差(MSE,Mean Squared Error)
假设大小为
M
×
N
M \times N
M×N的原始图像
I
I
I和经过处理的图像
K
K
K,均方误差为
M
S
E
=
1
M
N
∑
i
=
0
N
−
1
∑
j
=
0
M
−
1
[
I
(
i
,
j
)
−
K
(
i
,
j
)
]
2
MSE=\frac{1}{MN}\sum_{i=0}^{N-1}\sum_{j=0}^{M-1}[I(i,j)-K(i,j)]^2
MSE=MN1i=0∑N−1j=0∑M−1[I(i,j)−K(i,j)]2
均方误差衡量的是原始图像和经过处理图像像素差值的均方值,通过均方值的大小来确定两个图像之间的差异。MSE越大,两者之间的差异越大;MSE越小,两者之间的差异越小。
2.峰值信噪比(PSNR,Peak Signal to Noise Rate)
数学公式定义如下:
P
S
N
R
=
10
l
o
g
10
(
M
A
X
I
2
M
S
E
)
PSNR=10log_{10}(\frac{MAX_I^2}{MSE})
PSNR=10log10(MSEMAXI2)
其中
M
A
X
I
2
MAX_I^2
MAXI2为原始图像的最大像素值。如果图像像素值是由8位二进制表示,则该值为255;如果图像像素值是由B为二进制表示,则该值为
M
A
X
I
2
=
2
B
−
1
MAX_I^2=2^B-1
MAXI2=2B−1。一般针对uint8图像,最大像素值为255,浮点型数据的最大像素值为1。PSNR单位是dB。
上述公式是针对灰度图像的计算方法,如果是彩色图像,通常由三种方法来计算:
1.分别计算 RGB 三个通道的 PSNR,然后取平均值。
2.计算 RGB 三通道的 MSE ,然后再除以 3 。
3.将图片转化为 YCbCr 格式,然后只计算 Y 分量也就是亮度分量的 PSNR。
如果是计算视频的PSNR,需要计算整个视频的MSE进行计算,而不是计算每一帧的MSE后加和后作为整个视频的MSE,具体公式如下:
M
S
E
=
1
M
N
F
∑
f
=
0
F
−
1
∑
i
=
0
N
−
1
∑
j
=
0
M
−
1
[
I
(
i
,
j
,
f
)
−
K
(
i
,
j
,
f
)
]
2
MSE=\frac{1}{MNF}\sum_{f=0}^{F-1}\sum_{i=0}^{N-1}\sum_{j=0}^{M-1}[I(i,j,f)-K(i,j,f)]^2
MSE=MNF1f=0∑F−1i=0∑N−1j=0∑M−1[I(i,j,f)−K(i,j,f)]2
其中,F为视频的帧数。
3.结构相似性(SSIM,Structural Similarity)
结构相似性基于两个图像的三个指标来比较:亮度 (luminance)、对比度 (contrast) 和结构 (structure)
l
(
x
,
y
)
=
2
u
x
u
y
+
c
1
u
x
2
+
u
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{2u_{x}u_{y}+c_{1}}{u_{x}^2+u_{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}}
l(x,y)=ux2+uy2+c12uxuy+c1c(x,y)=σx2+σy2+c22σxσy+c2s(x,y)=σxσy+c3σxy+c3
其中,
u
x
u_{x}
ux为
x
x
x的均值;
u
y
u_{y}
uy为
y
y
y的均值;
σ
x
2
\sigma_{x}^2
σx2为
x
x
x的方差;
σ
y
2
\sigma_{y}^2
σy2为
x
x
x的方差;
σ
x
y
\sigma_{xy}
σxy为
x
x
x和
y
y
y的协方差;
c
1
、
c
2
和
c
3
c_{1}、c_{2}和c_{3}
c1、c2和c3为常数,防止除零,一般
c
1
=
(
k
1
L
)
2
,
c
2
=
(
k
2
L
)
2
c_{1}=(k_{1}L)^2,c_{2}=(k_{2}L)^2
c1=(k1L)2,c2=(k2L)2,
L
=
2
B
−
1
L=2^B-1
L=2B−1,
B
B
B为图像位数。
那么,
S
S
I
M
(
x
,
y
)
=
[
l
(
x
,
y
)
α
⋅
c
(
x
,
y
)
β
⋅
s
(
x
,
y
)
γ
]
SSIM(x,y)=[l(x,y)^\alpha\cdot c(x,y)^\beta\cdot s(x,y)^\gamma]
SSIM(x,y)=[l(x,y)α⋅c(x,y)β⋅s(x,y)γ]
当
α
,
β
,
γ
\alpha,\beta,\gamma
α,β,γ为1,得到
S
S
I
M
(
x
,
y
)
=
(
2
u
x
u
y
+
c
1
)
(
2
σ
x
y
+
c
2
)
(
u
x
2
+
u
y
2
+
c
1
)
(
σ
x
2
+
σ
y
2
+
c
2
)
SSIM(x,y)=\frac{(2u_{x}u_{y}+c_{1})(2\sigma_{xy}+c_{2})}{(u_{x}^2+u_{y}^2+c_{1})(\sigma_{x}^2+\sigma_{y}^2+c_{2})}
SSIM(x,y)=(ux2+uy2+c1)(σx2+σy2+c2)(2uxuy+c1)(2σxy+c2)
每次计算的时候都从图片上取一个
N
×
N
N \times N
N×N 的窗口,然后不断滑动窗口进行计算,最后取平均值作为全局的 SSIM。
4.图像增强中的loss选择
一般情况下都是使用L2作为损失函数,也就是均方误差。L2和L1的区别在于L2比L1多了平方,以L2为loss的网络会对异常值特别敏感,因为平方放大了异常值,会赋予异常点更大的损失值和梯度,反向传播过程中调整网络参数向减小异常点误差的方向更新,因此容易造成训练的不稳定和发散。以L1为loss的网络则对异常点有较好的适应,具有更好的鲁棒性。
《Loss Functions for Image Restoration With Neural Networks》文章中实验了L1,L2、SSIM和MS-SSIM对图像去马赛克、去噪、超分以及JPEG图像去块化做了研究,实验结果以MS-SSIM+L1的组合作为损失函数最佳。
具体的loss选择还是需要经过实验验证,在不同情况下,loss的选择对模型有一定影响。