1. 概要

该文提出了一种多尺度结构相似度方法,该方法在考虑观看条件的变化方面比以往的单尺度方法具有更大的灵活性。该文展示了一种图像合成方法来校准参数,以定义不同尺度的相对重要性。

2. 结构

结构相似性为图像质量评估[3]-[6]问题提供了一种替代和补充的方法。它基于一个自上而下的假设,即HVS非常适合于从场景中提取结构信息,因此结构相似性的度量应该是一个很好的感知图像质量的近似值。研究表明,该方法的一个简单实现,即结构相似性(SSIM)索引[5],可以优于最先进的感知图像质量指标。然而,在[5]中引入的SSIM索引算法是一种单尺度的方法。我们认为这是该方法的一个缺点,因为正确的比例取决于观看条件(例如,显示分辨率和观看距离)。在本文中,我们提出了一种多尺度结构相似度的方法,并引入了一种新的基于图像合成的方法来校准加权不同尺度之间的相对重要性的参数

2.1 SINGLE-SCALE STRUCTURAL SIMILARITY

指的就是SSIM:
S ( x , y ) = f ( l ( x , y ) , c ( x , y ) , s ( x , y ) ) (1) S(x,y)=f(l(x,y),c(x,y),s(x,y)) \tag{1} S(x,y)=f(l(x,y),c(x,y),s(x,y))(1)
很重要的一点是,这三个组成部分是相对独立的。例如,亮度和/或对比度的变化不会影响图像的结构。例如,亮度和/或对比度的变化不会影响图像的结构。

为了完成(1)中相似度度量的定义,我们需要定义三个函数 l ( x , y ) , c ( x , y ) , s ( x , y ) l(x,y),c(x,y),s(x,y) l(x,y),c(x,y),s(x,y)以及组合函数 f ( ) f() f()。我们还希望相似度度量能够满足以下条件:

  • 对称性: 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)\le 1 S(x,y)1
  • 唯一最大值: S ( x , y ) = 1 S(x,y)=1 S(x,y)=1只有在 x = y x=y x=y时才成立

最终SSIM的计算方法:
S S I M ( x , y ) = [ l ( x , y ) ] α ⋅ [ c ( x , y ) ] β ⋅ [ s ( x , y ) ] γ   (2) SSIM(x,y)=[l(x,y)]^\alpha \cdot[c(x,y)]^\beta \cdot[s(x,y)]^\gamma  \tag{2} SSIM(x,y)=[l(x,y)]α[c(x,y)]β[s(x,y)]γ (2)
其中, α > 0 , β > 0 , γ > 0 \alpha>0,\beta>0,\gamma>0 α>0,β>0,γ>0是用于调整这三个组件的相对重要性的参数。我们很容易验证这个定义是否满足上述三个条件。为了简化表达式,我们对本文进行了设置, α = β = γ = 1 , C 3 = C 2 / 2 \alpha=\beta=\gamma=1, C_3=C_2/2 α=β=γ=1,C3=C2/2。这就导致了一种特定形式的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 ) (3) 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)} \tag {3} SSIM(x,y)=(μx2+μy2+C1)(σx2+σy2+C2)(2μxμy+C1)(2σxy+C2)(3)
SSIM指数和更传统的质量度量之间的关系可以在图像分量的向量空间中以几何方式加以说明。

SSIM

2.2 MULTI-SCALE STRUCTURAL SIMILARITY
2.2.1 Multi-scale SSIM index

图像细节的可感知性取决于图像信号的采样密度、图像平面到观察者的距离以及观察者视觉系统的感知能力。在实践中,当这些因素发生变化时,对给定图像的主观评价就会发生变化。如上一节中所述的单尺度方法可能只适用于特定的设置。

多尺度方法是一种方便的结合不同分辨率的图像细节的方法。该文提出了一种多尺度的图像质量评估SSIM方法,其系统图如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PhvdgEme-1647361231688)(C:\Users\Liujiawang\AppData\Roaming\Typora\typora-user-images\image-20220315231848951.png)]

系统以参考和失真图像信号为输入,迭代应用低通滤波器,将滤波后的图像降采样2倍。我们将原始图像设为 S c a l e 1 Scale 1 Scale1,最高Scale记为为 S c a l e M Scale M ScaleM,这是经过 M − 1 M−1 M1次迭代得到的。在第 j j j个尺度上,计算对比比较(4)和结构比较(5),并分别记为 c j ( x , y ) c_j(x, y) cj(x,y) s j ( x , y ) s_j(x, y) sj(x,y)。亮度比较(6)仅在 S c a l e M Scale M ScaleM下计算,记为 l M ( x , y ) l_M(x, y) lM(x,y)
c ( x , y ) = 2 σ x σ y + C 2 σ x 2 + σ u 2 + C 2 (4) c(x,y)=\frac{2\sigma_x\sigma_y+C_2}{\sigma_x^2+\sigma_u^2+C_2} \tag 4 c(x,y)=σx2+σu2+C22σxσy+C2(4)

s ( x , y ) = σ x y + C 3 σ x σ y + C 3 (5) s(x,y)=\frac{\sigma_{xy}+C_3}{\sigma_x\sigma_y+C_3} \tag {5} s(x,y)=σxσy+C3σxy+C3(5)

l ( x , y ) = 2 μ x μ y + C 1 μ x 2 + μ y 2 + C 1 (6) l(x,y)=\frac{2\mu_x\mu_y+C_1}{\mu_x^2+\mu_y^2+C_1} \tag 6 l(x,y)=μx2+μy2+C12μxμy+C1(6)

SSIM的总体评价是通过结合不同尺度上的测量来获得的:
S S I M ( x , y ) = [ l ( x , y ) ] α M ⋅ ∏ j = 1 M [ c ( x , y ) ] j β ⋅ [ s ( x , y ) ] γ j (7) SSIM(x,y)=[l(x,y)]^{\alpha_M} \cdot \prod \limits_{j=1}^M[c(x,y)]^{\beta}_j \cdot[s(x,y)]^{\gamma_j} \tag 7 SSIM(x,y)=[l(x,y)]αMj=1M[c(x,y)]jβ[s(x,y)]γj(7)
采用指数 α M α_M αM​、 β j β_j βj​和 γ j \gamma_j γj​来调整不同分量的相对重要性。这个多尺度 S S I M SSIM SSIM​索引定义满足最后一节给出的三个条件。它还包括单尺度方法作为一个特例。特别地,尺度M的单尺度实现应用迭代滤波和降采样过程,直到尺度M,只有指数 α M α_M αM​、 β M β_M βM​和 γ M \gamma_M γM​被给出非零值。为了简化参数的选择,我们让所有j的 α j = β j = γ j α_j=βj=\gamma_j αj=βj=γj​。此外,我们对交叉尺度设置进行了标准化,使 ∑ j = 1 M γ j = 1 \sum \limits_{j=1}^M \gamma_j=1 j=1Mγj=1。这使得不同的参数设置(包括所有的单尺度和多尺度设置)具有可比性。

3. 各个 α j , β j , γ j α_j,βj,\gamma_j αj,βj,γj的确定

对于MSSIM一般对每个尺度令alpha=beta,那么如何选择不同尺度的alpha和beta参数(即确定不同scale的相对权重)?

该文使用一种图像合成方法来校准不同尺度的相对重要性。

在这里插入图片描述

每个失真的图像是使用一个迭代过程,初始图像生成随机添加白色高斯噪声原始图像和迭代过程采用约束梯度下降算法在指定的约束条件中(MSE)搜索基于SSIM最差的图像。

上图中,每一行的MSE都相同,每一列的scale都相同。对于给定的8bit灰度图像,我们可以合成上面的失真图像表。这里有5个scale,12个失真水平,共60幅图像。可以看到每行的MSE都相同,但是它们的感知质量却差别很大,这说明不同尺度的失真对感知质量的影响不同。

我们使用10幅不同内容的(人脸、自然风景、植物、人造物体等)64x64的图像,构建了10个上面的失真表(共600幅失真图像)。有8个受试者,观测距离固定为每度观测视角32个像素距离。每个人依次看10组图像,对不同尺度的图像进行比较,每个尺度选择出一幅他们认为质量相同的图像。例如上图中标红的5幅图像,观测者认为它们质量相同。每个人选择的结果会被记录,平均计算得到最终测试结果,对测试结果计算得到:
β 1 = γ 1 = 0.0448 β 2 = γ 2 = 0.2856 β 3 = γ 3 = 0.3001 β 4 = γ 4 = 0.2363 β 5 = γ 5 = 0.1333 \beta_1=\gamma_1=0.0448 \\ \beta_2=\gamma_2=0.2856 \\ \beta_3=\gamma_3=0.3001 \\ \beta_4=\gamma_4=0.2363 \\ \beta_5=\gamma_5=0.1333 β1=γ1=0.0448β2=γ2=0.2856β3=γ3=0.3001β4=γ4=0.2363β5=γ5=0.1333

4. 结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YmmjDbzZ-1647361231691)(C:\Users\Liujiawang\AppData\Roaming\Typora\typora-user-images\image-20220315233751452.png)]

5.代码

python:

# import the necessary packages
import torch.nn.functional as F
from skimage.measure import compare_ssim
import argparse
import cv2
#cv2torc和torch2cv两个函数在下面
from Utils import cv2torch, torch2cv

def mssssim(a,b,):
    X = a
    Y = b
    for i in range (5):
        (score, diff) = compare_ssim(X, Y, data_range=1,multichannel=True, full=True)
        print(format(score))
		#每次低通滤波都使用张量进行转化,滤完波再转回来,虽然需要用到torch,但是胜在代码方便
        Ta = cv2torch(X)
        Tb = cv2torch(Y)
        padding = (X.shape[1] % 2, X.shape[2] % 2)
        Xa = F.avg_pool2d(Ta, kernel_size=2, padding=padding)
        Yb = F.avg_pool2d(Tb, kernel_size=2, padding=padding)
        X = torch2cv(Xa)
        Y = torch2cv(Yb)

for i  in range(2,13):
    num1 = str(5890 + i)
    num2 = str(i)
    img2 = cv2.imread('D:/c/hdrcnn/'+num2+'.exr',flags=cv2.IMREAD_ANYDEPTH + cv2.IMREAD_COLOR)
    img2_662 = cv2.imread('D:/c/hdr/'+num1+'_256x256.exr',flags=cv2.IMREAD_ANYDEPTH + cv2.IMREAD_COLOR)
    mssssim(img2,img2_662)

代码参考

Reference: MULTI-SCALE STRUCTURAL SIMILARITY FOR IMAGE QUALITY ASSESSMENT

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐