VIF质量评估方法简介

视觉信息保真度(VIF)是基于自然场景统计(natural scene statistics人类视觉系统(human visual system提取图像信息的一种全参考的图像质量评估指标,并且与人类对视觉质量的判断具有良好的相关性。

2006年,Hamid R Sheikh和Alan Bovik在德克萨斯大学奥斯汀分校的图像和视频工程实验室(LIVE: Laboratory for Image and Video Engineering)提出了VIF算法

背景知识

自然场景统计(NSS: natural scene statistics

使用可以在光谱范围内进行操作的高质量的捕获设备(红外拍摄仪、相机等)而获取到的视觉环境的图像和视频,我们称之为自然场景。因此,当我们提到术语自然场景(NS:natural scene)的时候,我们一般指的就是我们所拍摄的,我们所处的,这个世界的照片或视频。这与其他类型的信息完全不同,例如:

  • 文本
  • 计算机生成的图形
  • 卡通或者动画
  • 绘画或者绘图
  • 随机噪声
  • 利用nonvisual stimuli生成的图像或者视频,例如雷达、声呐、X-rays、超声成像技术等

自然场景构成了所有类型的图像集合中的极小的子集。

场景统计是感知领域中的一门学科。场景统计涉及到与场景有关的统计规律,并基于如下的前提:设计一个感知系统来解释场景。

很多研究者试图通过研究自然场景的统计信息来了解其结构。研究人员认为,自然环境产生的视觉刺激促进了HVS的进化,并且,自然场景建模和HVS建模在本质上是一个对偶问题

结合信号检测理论(signal detection theory),信息论(information theory)或估计理论(estimation theory.),自然场景统计可用于定义观察者的行为。目前,自然场景统计模型最成功的应用之一就是图片和视频的可感知的质量预测。之所以可以如此应用,其基本的前提是:

  • 图像、视频通常会涉及自然场景
  • 图像、视频的失真会改变自然场景的统计信息
  • 人类视觉系统对自然场景统计信息的变化非常敏感

VMAF

以VIF为基础,Netflix开发了到目前为止,视频质量评估领域的最优秀的全参考评估算法:VMAF(Video Multimethod Assessment Fusion

VMAF认为每个基本测量指标都在视频特征、失真类型和失真度上有不同的表现,通过机器学习算法可以将基础的测量指标融合得到最终的结果。当前,VMAF算法使用VIF、DLM(细节损失指标)、运动(相邻帧差异)作为基本测量指标,并使用SVM算法对测量指标进行融合来预测最终结果。VMAF基本原理如下图所示:

虽然,VMAF的效果比PSNR和SSIM要好,但是其运行速度却较慢,在部分机器上甚至小于1帧/秒。

同时,虽然开源的VMAF也可以得到较好的得分,但是与Netflix公布的分值相比仍然稍有逊色。或许是因为VMAF未开源的部分中包含了更多的数据集训练模型和GPU的支持。

VIF算法

VIF算法的核心思想

VIF算法将图像/视频的质量评估问题看作一个信息保真的问题,并从信息通信和共享的角度来评估图像/视频的质量。

VIF认为:

  • 人眼所看到的图像是通过HVS过滤之后而提取到的信息,在这个过程中,人类视觉系统也是一个简单的失真通道
  • 在经过HVS之前,失真图像只是比原始图像多经过了一个失真通道
  • 利用信息论的理论,把人眼从失真图像中提取到的信息和人眼从原始图像中提取到的信息进行对比,从而得到符合人主观感知的图像质量

整体VIF算法中包含三个部分:Source ModelDistortion ModelHVS Model,具体如下图所示:

Source Model

Source Model也称为原始图像建模,为了模拟HVS的多通道特性,VIF算法利用高斯金字塔将图像分成四个不同的尺度,然后将每一个尺度分成大小不一的块,每一个块中的所有像素组成一个向量c\overrightarrow{c},并使用高斯混合模型对向量进行建模:

C=SU={SiUi:iI}\mathcal{C} = \mathcal{S} · \mathcal{U} = \{ S_i · \overrightarrow{U}_i : i \in I \}

对于Source Model而言,block(i)block(i)表示第ii个块,如下图所示:

在计算时,可以利用第ii块中的系数来估计第ii块的参数ss,具体如下:

s^i2=Cov^(C,C)\widehat{s}_i^2 = \widehat{Cov}(C,C)

Distortion Model

对于Distortion Model而言,为了能够让Distortion Model中的计算可以成立,论文采用局部估计的方式来获取distortion channel的参数。

D=GC+V={giCi+Vi:iI}\mathcal{D} = \mathcal{GC} + \mathcal{V} = \{g_i {\overrightarrow{C}}_i+{\overrightarrow{V}}_i:i \in I\}

具体做法为,在如下图所示的小波变换之后的频域图中,对于图中的第ii个系数而言,我们采用以ii为中心的B×BB \times B的系数块上估计第ii个系数对应的参数:gig_iσv,i2\sigma_{v,i}^{2}

其中,gig_i为在该对应块之上的随机场G{G}的值,σv,i2\sigma_{v,i}^{2}为在该对应块之上的随机场V{V}的方差。

此时,Distortion Model中的参考信号和折损信号都能获取,因此可以很容易的用如下所示方法来对gig_iσv,i2\sigma_{v,i}^{2}进行估计。

g^i=Cov^(C,D)Cov^(C,C)1\widehat{g}_{i} = \widehat{Cov}(C,D)\widehat{Cov}(C,C)^{-1}

σ^v,i2=Cov^(D,D)g^iCov^(C,D)\widehat{\sigma}_{v,i}^{2} = \widehat{Cov}(D,D) - \widehat{g}_{i}\widehat{Cov}(C,D)

在估计前,会对每一个系数进行不同尺度的高斯卷积计算。

Cov(C,D)=[C(n)D(n)]F(n)[C(n)F(n)][D(n)F(n)]Cov(C,D) = [C(n)D(n)] * F(n) - \\ [C(n)*F(n)][D(n)*F(n)]

HVS Model

对于HVS Model而言,VIF将其带来的误差整合为一个噪声。具体如下所示:

E=C+N=SU+NF=D+N=GC+V+N\mathcal{E} = \mathcal{C} + \mathcal{N} = \mathcal{S} · \mathcal{U} + \mathcal{N} \\ \mathcal{F} = \mathcal{D} + \mathcal{N}' = \mathcal{GC} + \mathcal{V} + \mathcal{N}'

因此,在VIF算法中,HVS Model其只有一个参数:视觉噪声的方差σn2\sigma_n^2,从论文中可以发现,该参数是一个可以调节的参数,需要根据不同的视频数据集来调整以获取最佳的σn2\sigma_n^2

在VIF提供的小波域下的算法实现中,σn2=0.4\sigma_n^2=0.4,在VIF提供的像素域下的算法实现中σn2=2\sigma_n^2=2,在VMAF的integer_vif中,σn2=65536<<1\sigma_n^2=65536<<1

VMAF实现VIF时,对相关参数的计算函数vif_statistic_s就是采用了如上的方法。

1
2
g     = sigma12 / (sigma1_sq + eps);
sv_sq = sigma2_sq - g * sigma12;

VIF的多尺度计算

最终,结合Source ModelDistortion ModelHVS Model,得到VIF算法:

VIF=I(C;Fs)I(C;Es)VIF = \frac{I(C;F|s)}{I(C;E|s)}

在得到一个尺度VIF得分之后,可以非常方便的将计算过程扩展到其他的尺度。例如,对于有4个尺度的VIF的计算过程如下图所示:

其中,f0f0-f3f3滤波分别对应着宽度(NN)为17×1717 \times 17, 9×99 \times 9, 5×55 \times 5, 3×33 \times 3σ=N/5\sigma=N/5的高斯卷积核,具体如下图所示:

VIF=iall_scalesnumiiall_scalesdeniVIF = \frac{\displaystyle\sum_{i \in all\_scales}{num_i}}{\displaystyle\sum_{i \in all\_scales}{den_i}}

利用libvmaf计算VIF

依赖于VMAF良好的设计和强大的可扩展性,我们可以利用VMAF来单独的计算其单个特征的评估结果。对于VIF而言,我们可以采用如下的步骤,来计算两个给定的YUV格式的视频的VIF得分:

  • 按照libvmaf的文档编译libvmaf,如果希望得到更多的debug的信息,可以将integer_vif的debug参数修改为true
  • 编写测试代码,调用libvmaf库中提供的相关api计算各尺度的VIF得分,具体参见test_vif.cpp
  • 利用如下命令编译test_vif.cpp:
    1
    $ g++ -o vif test_vif.cpp -Ilibvmaf/include -Llibvmaf/build/src -lvmaf
  • 计算两个视频的vif得分:
    1
    2
    $ export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:libvmaf/build/src # 如果执行vif报错
    $ vif t1.yuv t3.yuv 2160x2840

对于如下图所示的视频对,

我们分别计算vif,ssim,psnr的得分可以得出如下结果:

从结果看,对于这种折损VIF算法给出的结果更符合人的主观感受。

VIF的优势和局限性

VIF的优势

  • 一个好的Distortion Model可以使得折损图像和合成的图像能够有相同的感官质量。Distortion Model的目的并不是对图像的所有折损类型进行建模,而是对图像的折损带来的主观感受进行建模。因此,VIF不一定能够捕获所有的图像折损,但是却可以捕获这些图像的折损带来的感知折损。

  • 另外,从Distortion ModelD=GC+V\mathcal{D} = \mathcal{GC} + \mathcal{V})可以发现,VIF将图像的折损拆分为三部分:

    • 信号增益GG
    • 噪声VV
    • HVS噪声NN'

    这使得VIF更符合当前的实际应用。例如图像的亮度增强,对比度增强等场景。在这些场景下,图像信号虽然发生了变化,但是这并不是图像处理过程引入的噪声。这也是为什么PSNR,SSIM等算法无法应用于类似场景的原因,而VIF的折损图像模型却可以完美的应用于这些场景。对于亮度增强或对比度增强的场景,G>1G>1,从而使得VIF>1VIF>1,从而可以得出增强后的图像在感官质量上要优于参考图像的结论。我们用VIF计算对比度提升50%的视频视频时,发现参数GG实际上是>1的,

    并且得到如下的结果:

  • 从VIF的计算可以,VIF的最终得分是失真图像D在参考图像C下的得分。实际上而言,VIF是一种内容自适应的算法。给定的图像折损,对于不同的内容而言,其带来的主观感受是不一样的。利如,某些时候,我们需要利用运动模糊来展现物体的高速运动,但是对于观看羽毛球比赛时,如果出现羽毛球运动模糊的情况,就会令人讨厌了。对于,PSNR和SSIM等算法而言,在计算过程中是没有做类似的考虑的。

VIF的局限性

  • VIF的理论基础来自于自然场景,因此VIF并不适用于非自然场景下的图像/视频的质量评估,这一点要尤其注意。
  • 和PSNR,SSIM等算法相比,VIF算法的计算性能也是需要考虑的问题之一,在某些性能较差的机器上,其运算速度甚至低于1FPS。
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2020-2024 wangwei
  • 本站访问人数: | 本站浏览次数:

请我喝杯咖啡吧~

微信