结构相似性

结构相似性指标（structural similarity index，SSIM index）是一种用以衡量两张数位影像相似程度的指标。当两张影像其中一张为无失真影像，另一张为失真后的影像，二者的结构相似性可以看成是失真影像的影像品质衡量指标。相较于传统所使用的影像品质衡量指标，像是峰值信噪比（PSNR），结构相似性在影像品质的衡量上更能符合人眼对影像品质的判断。

## 基本观念

结构相似性的基本观念为自然影像是高度结构化的，亦即在自然影像中相邻像素之间有很强的关联性，而这样的关联性承载了场景中物体的结构资讯。人类视觉系统在观看影像时已经很习惯抽取这样的结构性资讯。因此，在设计影像品质衡量指标用以衡量影像失真程度时，结构性失真的衡量是很重要的一环。

## 定义

给定两个信号$\mathbf{x}$和$\mathbf{y}$，两者的结构相似性定义为：

$\text{SSIM}(\mathbf{x},\mathbf{y})=[l(\mathbf{x},\mathbf{y})]^\alpha[c(\mathbf{x},\mathbf{y})]^\beta[s(\mathbf{x},\mathbf{y})]^\gamma$。

$l(\mathbf{x},\mathbf{y})=\frac{2\mu_x\mu_y+C_1}{\mu_x^2+\mu_y^2+C_1}$，$c(\mathbf{x},\mathbf{y})=\frac{2\sigma_x\sigma_y+C_2}{\sigma_x^2+\sigma_y^2+C_2}$，$s(\mathbf{x},\mathbf{y})=\frac{\sigma_{xy}+C_3}{\sigma_x\sigma_y+C_3}$。

其中，$l(\mathbf{x},\mathbf{y})$比较$\mathbf{x}$和$\mathbf{y}$的亮度，$c(\mathbf{x},\mathbf{y})$比较$\mathbf{x}$和$\mathbf{y}$的对比度，$s(\mathbf{x},\mathbf{y})$比较$\mathbf{x}$和$\mathbf{y}$的结构（structure），$\alpha>0$，$\beta>0$，$\gamma>0$，为调整$l(\mathbf{x},\mathbf{y})$、$c(\mathbf{x},\mathbf{y})$、$s(\mathbf{x},\mathbf{y})$相对重要性的参数，$\mu_x$及$\mu_y$、$\sigma_x$及$\sigma_y$分别为$\mathbf{x}$和$\mathbf{y}$的平均值和标准差，$\sigma_{xy}$为$\mathbf{x}$和$\mathbf{y}$的协方差，$C_1$、$C_2$、$C_3$皆为常数，用以维持$l(\mathbf{x},\mathbf{y})$、$c(\mathbf{x},\mathbf{y})$、$s(\mathbf{x},\mathbf{y})$的稳定。

结构相似性指标的值越大，代表两个信号的相似性越高。

若使用全等的两张图片去做SSIM运算，也就是说$\mu_x=\mu_y$且$\sigma_x=\sigma_y$，如此一来

$$\text{SSIM}(\mathbf{x},\mathbf{x})=\frac{2\mu_x^2+C_1}{\mu_x^2+\mu_x^2+C_1} \times \frac{2\sigma_x^2+C_2}{\sigma_x^2+\sigma_x^2+C_2} \times \frac{\sigma_{xx}+C_3}{\sigma_x\sigma_x+C_3}=1$$

实际使用时，简化起见，一般会将参数设为$\alpha=\beta=\gamma=1$及$C_3=C_2/2$，得到：

$\text{SSIM}(\mathbf{x},\mathbf{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)}$。

在计算两张影像的结构相似性指标时，会开一个局部性的视窗，一般为$N$×$N$的小区块，计算出视窗内信号的结构相似性指标，每次以像素为单位移动视窗，直到整张影像每个位置的局部结构相似性指标都计算完毕。将全部的局部结构相似性指标平均起来即为两张影像的结构相似性指标。

## 性质

结构相似性指标具有下列性质：

- 对称性

结构相似性指标是对称的，亦即

$\text{SSIM}(\mathbf{x},\mathbf{y})=\text{SSIM}(\mathbf{y},\mathbf{x})$。

- 局限性

结构相似性指标的最大值为1，亦即

$\forall \mathbf{x},\mathbf{y}, \text{SSIM}(\mathbf{x},\mathbf{y}) \leq 1,$。

- 单一最大值

当衡量的两个信号完全相同时，当且仅当结构相似性指标的值为1。

$\text{SSIM}(\mathbf{x},\mathbf{y})=1 \Leftrightarrow \mathbf{x}=\mathbf{y}$。

## 使用

实际使用时，一般会将参数设为$\alpha=\beta=\gamma=1$及$C_3=C_2/2$，得到：

$\text{SSIM}(\mathbf{x},\mathbf{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)}$。

在计算两张影像的结构相似性指标时，会开一个局部性的视窗，一般为$N$×$N$的小区块，计算出视窗内信号的结构相似性指标，每次以像素为单位移动视窗，直到整张影像每个位置的局部结构相似性指标都计算完毕。将全部的局部结构相似性指标平均起来即为两张影像的结构相似性指标。

## 比较

一般认为，结构相似度指标比均方误差（MS）更适合用来判断两张图像的相似度，原因是结构相似性指标同时考虑图片亮度、对比与结构资讯，这跟人类的视觉系统的判断基准较为接近。MSE只考虑两张图片的平均亮度误差而不考虑结构化的资讯，所以当图片有些微的亮度改变时，MSE改变会很剧烈，但小亮度改变并不会造成人类把两张图片判断成完全不同。

另外一种计算相似度的方法是使用正规化均方根误差（NRMSE），NRMSE是基于MSE的公式，再除上其中一张图像的亮度，这样的处理使得NRMSE对于整体亮度变化比较不敏感，并且让数值落在比较受限的范围内以便于比较，然而NRMSE没有考虑结构化资讯的问题依旧存在。

下面使用了五张照片做实验，辅助说明：

- Image A：原图
- Image B：(Image A * 0.5) + 128
- Image C：255 - Image A
- Image D：Image A 叠加影子后的结果
- Image E：对照组

<image>

对人类的视觉系统来说，Image A、B、C、D 是一群较为相似的图片，Image E 则是与其他图片毫无相关。

这里是使用Image A跟其他图片进行相似度的比较，一共使用三种方法：均方误差（MSE）、正规化方均根差（NRMSE）、结构相似度指标（SSIM）。

<image>

然而在上述的比较实验可以发现，只有结构相似度指标能够正确反映这个关联，结构相似性指标在Image B、C、D之中都得到了较高的相似度（其中Image C为负相关），而唯有Image E得到了接近零的相似度。这代表使用结构相似性指标能够知道Image A、B、C、D之间很相似，而Image E跟其他图片不相似。反之，MSE与NRMSE皆无法在结果上反映出Image E与其他图片的差别。

## 应用

结构相似性指标因其简单而有效，近年来广泛被使用在影像与视讯处理的相关应用上，例如影像压缩、影像浮水印、无线视讯串流、核磁共振成像等等。

在影像压缩、影像去噪与影像还原等领域，经常使用结构相似性指标来判断方法的好坏。以影像压缩的应用为例，结构相似度用于比较原图与压缩后的图片的差异。原则上希望压缩后的图片不会跟原图差太多，同时压缩后的图片又可以节省空间。如果原图与压缩后图片之间的结构相似度是接近1的代表这是个优秀的压缩方法，反之则是不佳的压缩方法。

另外，在影像去噪的应用中，有时会采用人工合成的噪声叠加在图片上，并且设计去噪算法去除人工合成上去的噪声。在这种情况能够使用结构相似度直接判断原图跟去噪后的图片之间有多接近。结构相似度越接近1，代表去噪算法能够成功地把噪声去除并将原图还原出来。

因为结构相似性设计上尽量贴近人类的视觉系统，所以计算结构相似性的概念还能用于辨识图片中特定的图样。在这类型的应用，通常需要分类算法对特征的平移、旋转与缩放不敏感，所以会使用CW-SSIM取代原本的结构相似度来进行计算。而根据CW-SSIM的作者的描述使用CW-SSIM搭配支持向量机作为分类器，此方法可以在MNIST数据集上达到95%的结果。

## 限制

结构相似性指标有其限制，对于影像出现位移、缩放、旋转（皆属于非结构性的失真）的情况无法有效的运作。为解决此问题，另已发展出在小波域进行运算的结构相似性指标，称作复小波结构相似性指标（complex wavelet SSIM，CW-SSIM）。

当图片出现平移、旋转或是缩放时，结构相似度指标会改变得十分剧烈，并很容易将两张类似的图片视为不相似的。原因与在计算SSIM时所使用的局部性视窗有关，平移、旋转或是缩放都会导致视窗内的像素结构完全改变，使SSIM无法正确估计相似度。

下面的实验是使用Image A 跟Image F、G、H计算相似度

- Image F: Image A 往右平移30像素
- Image G: Image A 逆时针旋转30度
- Image H: Image A 长宽各缩短6.25%

<image>

可以看到Image A仅向右移30像素就导致了两张图片前后的SSIM为0.11，上述实验足以说明结构相似性指标的确对这些操作很敏感，要解决这类的问题可以使用复小波结构相似性。

## 变形

### 多尺度结构相似性

多尺度结构相似性（multi-scale SSIM，MS-SSIM）尝试去解决结构相似度里面，依赖特定大小的视窗进行计算的问题，因为如果输入的图片的分辨率不同，使用者往往需要更改结构相似性的参数，才能得到较合理的结果。多尺度结构相似性，则是把输入图片经过若干次的低通滤波器与两倍下采样，每次下采样之后都计算一次结构相似度。最后的结果会同时考量所有不同尺寸的图片计算出的结构相似性，由此达到指标能自适应不同分辨率的图片的目的。Multi-Scale SSIM Complex Wavelet SSIM 或是 CW-SSIM的作者认为MS-SSIM能得到比SSIM相等或是更好的评量结果。

### 结构相异性

结构相异性（structural dissimilarity，DSSIM）正好是结构相似性的相反。当两张图片相等时，结构相异性为0。反之当两张图片很不相似时，结构相异性可以趋近无限大。

$$\hbox{DSSIM}(x,y) = \frac{1 - \hbox{SSIM}(x, y)}{2}$$

另一种结构相异性定义为 $DSSIM(x,y)=\frac{1}{1-SSIM(x,y)}$其中$SSIM(x,y)$为x与y的结构相似性。当DSSIM越大时，代表两张图片越接近，SSIM越接近1，DSSIM的值也越大，当SSIM=1，也就是DSSIM趋近无限时，和原始视讯档案完全一致。

### 复小波结构相似性

结构相似性虽然能大致符合人类的视觉系统的感受，但若图片遇到几何上的转换，例如平移、旋转与缩放时，结构相似性会无法正确描述两张图片的相似程度。因此复小波结构相似性（complex wavelet SSIM，CW-SSIM）针对了这个问题进行了改良，CW-SSIM的作者认为与其使用亮度（magnitude）进行比较，不如用相位来进行比较较具有代表性，因此CW-SSIM会在复小波域中计算区域性的相位，并用相位的差异来计算相似性，公式如下：

$$\text{CW-SSIM}(c_x,c_y)=\bigg(\frac{2 \sum_{i=1}^N |c_{x,i}||c_{y,i}|+K}{\sum_{i=1}^N |c_{x,i}|^2+\sum_{i=1}^N |c_{y,i}|^2+K}\bigg)\bigg(\frac{2|\sum_{i=1}^N c_{x,i}c_{y,i}^*|+K}{2\sum_{i=1}^N |c_{x,i}c_{y,i}^*|+K}\bigg)$$

其中$c_x$ 是复小波转换后的$x$信号，而$c_y$是复小波转换后的$y$信号，另外$K$是用于稳定数值的一个常数如同结构相似性，CW-SSIM的最大值为1，但是不同于结构相似性，CW-SSIM的最小值为0。

## 外部链接

- The SSIM Index for Image Quality Assessment