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=mn1​i=0∑m−1​j=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​=N1​i=1∑N​xi​

亮度相似度:

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​=(K1​L)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−11​i=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​+C2​2σx​σy​+C2​​

其中

C

2

=

(

K

2

L

)

2

C_2=(K_2L)^2

C2​=(K2​L)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−11​i=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)=M1​j=1∑M​SSIM(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,即两个向量相等,这就叫"余弦相似性"。