SSIM 原理及公式
date: 2022-01-18 12:53
什么是SSIM?
Structural Similarity 结构相似性,源自论文《Image Quality Assessment: From Error Visibility to Structural Similarity》(图像质量评估:从错误可见性到结构相似性)。
在SSIM 被提出之前被广泛应用的是MES,因为它计算简单,物理意义明确。
MSE公式:
M
S
E
=
1
m
n
∑
i
=
0
m
−
1
∑
j
=
0
n
−
1
[
I
(
i
,
j
)
−
K
(
i
,
j
)
]
2
MSE=\frac1{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}[I(i,j)-K(i,j)]^2
MSE=mn1i=0∑m−1j=0∑n−1[I(i,j)−K(i,j)]2
就是 element-wise 地计算重建图像与输入图像的像素差的平方,然后在全图上求平均。 下图可以看出,MSE 反应的距离和人力的直观感受有很大差别。 左侧为原图,中间为把灰度值调整为原来额0.9 倍的图,右侧为高斯模糊的图。以MSE 为评价指标则右图与原图更接近,和人类观感不同。
由于MSE不能表达人的视觉系统对图片的直观感受(涉及生物学),因此作者提出了更为科学的SSIM 评价指标。SSIM 更侧重于两图的结构相似性,而不是逐像素计算亮度的差异。作者声称其比MSE 更能反应人类视觉系统对两幅图相似性的判断。
SSIM 评价如何实现?
作者将两幅图的相似性比较拆成了三个维度:亮度(luminance)
l
(
x
,
y
)
l(x,y)
l(x,y),对比度(contrast)
c
(
x
,
y
)
c(x,y)
c(x,y),结构(structure)
s
(
x
,
y
)
s(x,y)
s(x,y)。 最终x和y 的相似度为这三者的函数:
S
(
x
,
y
)
=
f
(
l
(
x
,
y
)
,
c
(
x
,
y
)
,
s
(
x
,
y
)
)
S(x,y) = f(l(x,y),c(x,y),s(x,y))
S(x,y)=f(l(x,y),c(x,y),s(x,y))
作者设计的三个公式定量计算三者的相似性,公示的设计遵顼三个原则: 对称性:
s
(
x
,
y
)
=
s
(
y
,
x
)
s(x,y)=s(y,x)
s(x,y)=s(y,x) 有界性:
s
(
x
,
y
)
<
=
1
s(x,y)<=1
s(x,y)<=1 极限值唯一:
s
(
x
,
y
)
=
1
s(x,y)=1
s(x,y)=1 当且仅当 x=y
亮度
如果一幅图有 N 个像素点,每个像素点的像素值为xi,那么该图像的平均亮度为: 图像亮度平均值:
μ
x
=
1
N
∑
i
=
1
N
x
i
\mu_x=\frac{1}{N}\sum_{i=1}^Nx_i
μx=N1i=1∑Nxi
亮度相似度:
l
(
x
,
y
)
=
2
μ
x
μ
y
+
C
1
μ
x
2
+
μ
y
2
+
C
1
l(x,y)=\frac{2\mu_x\mu_y+C1}{\mu_x^2+\mu_y^2+C1}
l(x,y)=μx2+μy2+C12μxμy+C1
C
1
C_1
C1 是防止分母为0 的系数
C
1
=
(
K
1
L
)
2
C_1=(K_1L)^2
C1=(K1L)2
K1 是一个常数,取值0.01,L 是灰度的动态范围,和图像数据的类型有关,如果是uint8 类型则L=255,如果是float则L=1。公式堆成且始终小于等于1,当x=y时为1。
对比度
对比度反应的时图像明暗变化的剧烈程度,也就是像素值的标准差。公式:
σ
x
=
(
1
N
−
1
∑
i
=
1
N
(
x
i
−
μ
x
)
2
)
1
/
2
\sigma_x=(\frac{1}{N-1}\sum_{i=1}^N{(x_i-\mu_x)^2})^{1/2}
σx=(N−11i=1∑N(xi−μx)2)1/2
对比度的相似度公式和亮度相似度公式极为相似,只不过把均值换成了方差。作者定义:
c
(
x
,
y
)
=
2
σ
x
σ
y
+
C
2
σ
x
2
+
σ
y
2
+
C
2
c(x,y)=\frac{2\sigma_x\sigma_y +C_2}{\sigma_x^2+\sigma_y^2+C_2}
c(x,y)=σx2+σy2+C22σxσy+C2
其中
C
2
=
(
K
2
L
)
2
C_2=(K_2L)^2
C2=(K2L)2
K2 一般在代码中取0.03。对比度相似公式堆成且小于等于1。
结构相似度
对于一幅图而言,亮度和对比度是标量,而结构无法用要给标量表示,而应该用全图所有像素组成的向量表示。同时,研究结构相似度时应该排除亮度和对比度的影响,即排除均值和标准差的影响。因此作者研究的是归一化的两个想想:
(
x
−
μ
x
)
/
σ
x
(x-\mu_x)/\sigma_x
(x−μx)/σx 和
(
y
−
μ
y
)
/
σ
y
(y-\mu_y)/\sigma_y
(y−μy)/σy 之间的关系。
结构比较函数:
s
(
x
,
y
)
=
σ
x
y
+
C
3
σ
x
σ
y
+
C
3
s(x,y) = \frac{\sigma_{xy} + C_3}{\sigma_x \sigma_y + C_3}
s(x,y)=σxσy+C3σxy+C3
协方差公式
σ
x
y
=
1
N
−
1
∑
i
=
1
N
(
x
i
−
μ
x
)
(
y
i
−
μ
y
)
\sigma_{xy}=\frac{1}{N-1}\sum_{i=1}^N(x_i-\mu_x)(y_i-\mu_y)
σxy=N−11i=1∑N(xi−μx)(yi−μy)
SSIM
结合前面三个公式
S
S
I
M
(
x
,
y
)
=
f
(
l
(
x
,
y
)
,
c
(
x
,
y
)
,
s
(
x
,
y
)
)
SSIM(x,y) = f(l(x,y),c(x,y),s(x,y))
SSIM(x,y)=f(l(x,y),c(x,y),s(x,y))
令C3=C2/2,c(x,y) 和 s(x,y) 的分母可以约分,最终得到SSIM 公式:
S
S
I
M
(
x
,
y
)
=
(
2
μ
x
μ
y
+
C
1
)
(
2
σ
x
y
+
C
2
)
(
μ
x
2
+
μ
y
2
+
C
1
)
(
σ
x
2
+
σ
y
2
+
C
2
)
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)}
SSIM(x,y)=(μx2+μy2+C1)(σx2+σy2+C2)(2μxμy+C1)(2σxy+C2)
然而上面的公式不能应用于整幅图,因为在整幅图的跨度上均值和方差往往变化剧烈。作者采用 sliding window 以步长为 1 计算两幅图各个对应 sliding window 下的 patch 的 SSIM,然后取平均值作为两幅图整体的 SSIM,称为 Mean SSIM。简写为 MSSIM。 假如整幅图有 M 个 patch,那么 MSSIM 公式为:
M
S
S
I
M
(
X
,
Y
)
=
1
M
∑
j
=
1
M
S
S
I
M
(
x
j
,
y
j
)
MSSIM(X, Y) =\frac{1}{M} \sum_{j=1}^M SSIM(x_j,y_j)
MSSIM(X,Y)=M1j=1∑MSSIM(xj,yj)
使用MSSIM 计算相似度:
图像处理中的SSIM
参考链接
SSIM 的原理和代码实现
补充概念
方差(variance)
定义:用于衡量一组数据的离散程度。在统计描述中,方差用来计算每一个变量(观察值)与总体均数之间的差异。
σ
2
=
1
N
∑
(
X
−
μ
)
2
\sigma^2=\frac{1}{N}\sum(X-\mu)^2
σ2=N1∑(X−μ)2
σ
\sigma
σ 为总体方差,
X
X
X为变量,
μ
\mu
μ为总体均值,
N
N
N为总体例数。
标准差(Standard Deviation)
定义:标准差(Standard Deviation) ,是离均差平方的算术平均数(方差)的算术平方根,用σ表示。标准差也被称为标准偏差,或者实验标准差,在概率统计中最常使用作为统计分布程度上的测量依据。
σ
=
∑
(
X
−
μ
)
2
N
\sigma=\sqrt{\frac{\sum(X-\mu)^2}{N}}
σ=N∑(X−μ)2
标准差越小说明数据越集中。
协方差(Covariance)
协方差用来刻画两个随机变量 X , Y 之间的相关性
如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。
如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。
协方差的公式如下:
σ
(
x
,
y
)
=
1
N
∑
(
x
i
−
μ
x
)
(
y
i
−
μ
y
)
\sigma(x,y)=\frac{1}{N}\sum(x_i-\mu_x)(y_i-\mu_y)
σ(x,y)=N1∑(xi−μx)(yi−μy)
方差就是协方差的一种特殊形式,当两个变量相同时,协方差就是方差了。
公式2:
C
o
v
=
E
[
(
X
−
μ
x
)
(
Y
−
μ
y
)
]
Cov = E[(X -\mu_x)(Y-\mu_y)]
Cov=E[(X−μx)(Y−μy)]
可以有如下理解:如果有X,Y两个变量,每个时刻的“X值与其均值之差”乘以“Y值与其均值之差”得到一个乘积,再对这每时刻的乘积求和并求出均值。
余弦相似度
c
o
s
(
θ
)
=
∑
i
=
1
n
(
X
i
∗
Y
i
)
(
∑
i
=
1
n
(
X
i
)
2
)
∗
(
∑
i
=
1
n
(
Y
i
)
2
)
cos(\theta)=\frac{\sum_{i=1}^n(X_i * Y_i)}{\sqrt(\sum_{i=1}^n(X_i)^2) * \sqrt(\sum_{i=1}^n(Y_i)^2)}
cos(θ)=(
∑i=1n(Xi)2)∗(
∑i=1n(Yi)2)∑i=1n(Xi∗Yi)
余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,夹角等于0,即两个向量相等,这就叫"余弦相似性"。