基于运动估计共享的雾霾视频压缩方法∗
2021-04-04
(南京理工大学计算机科学与工程学院 南京 210094)
1 引言
随着计算机技术的不断发展,越来越多的领域都需要使用视频技术,视频信息数据也在迅速地增长。与单个的图像相比,视频的数据量就显得非常大了,这给它自身的存储以及传输都带来了一定的困难,因此,视频压缩技术在当代社会是非常有必要的。目前也有很多相关的视频压缩标准[1]和视频压缩方法[2~3]被提出,但是基本上都是针对提升压缩性能或时间速率的。
众所周知,图像、视频通常都是由成像设备所获取的,而且一般情况下,人们都认为我们所处的大气层是透明清晰的,成像设备也确实能够获取到相对比较清晰的图像和视频。然而,由于雾霾在人们日常生活中越发常见,大气中的悬浮颗粒物把光线散射,使得成像设备难以准确地获取图像视频的细节特征,雾霾视频也给很多户外视频应用的实现带来了困难。因此,将雾霾视频进行去雾、改善其清晰度和能见度是具有重要意义的,同时也拥有广阔的应用场景。国内外很多学者都对去雾算法进行了研究,针对图像或者针对视频的去雾算法[4~6]都有,而且都获得了一定的成果。
然而,考虑到在现有的视频压缩方法中,基本上没有同时对雾霾视频进行去雾处理的,本文将视频去雾和视频压缩相结合,避免在压缩过程中把雾霾信息压缩,提出了一种基于运动估计共享的雾霾视频压缩方法,在减少视频的存储空间和传输带宽的同时,降低雾霾对视频获取、传输造成的不良影响。
2 相关知识
2.1 大气散射模型
在计算机视觉领域,通常使用以下模型来描述雾霾图像:
其中,I(x)表示有雾的图像,J(x)表示清晰无雾的图像,A表示环境光,t(x)表示透射率,也可以说是没有被传输介质散射并最终到达成像设备的光,这也就是著名的大气散射模型[7],根据该模型就可以推算出清晰的无雾图像的计算公式:
在已经获得有雾图像的情况下,只要再得到环境光和透射率就可以利用式(2)得到去雾后的图像。
2.2 视频透射率优化方法
出于对视频帧间相关性的考虑,文献[8]提出了一种对透射率进行优化的方法。如图1所示,每次读取视频序列中的当前帧及其前后相邻的各两帧,以这五帧为单位,首先分别计算各自的透射率,然后将当前帧平均划分为若干个16*16的宏块,再利用三步搜索法计算出当前帧中宏块与其他帧之间的运动矢量,接着利用这些运动矢量找到当前透射率中宏块在其他透射率图中的对应匹配块,最后使用一个加权平均滤波器对透射率进行帧间相关性优化。
图1 透射率优化方法图
2.3 H.264/AVC标准
H.264/AVC[1]是一种国际视频压缩标准,它采用混合编码的方式,输入帧以宏块为单位进行编码,其框架图如图2所示。对于一个视频序列,主要有帧内预测编码和帧间预测编码的方式,后者通过运动估计和运动补偿得到当前块的预测块,之后,将当前块与预测块相减可以产生残差等一系列数据,然后对残差等数据进行变换量化[9]产生一组系数,在利用熵编码[10]得到最终的码流,此外,该框架中还存在一个环路滤波器[11],用于消除编码产生的块效应。
图2 H.264/AVC框架图[1]
3 雾霾视频压缩方法
3.1 YUV视频去雾方法
对于RGB图像,He[12]提出了一种暗通道先验知识:通常对于一幅无雾户外图像J(x),它的三个通道c∈{r,g,b} 中会存在一个通道的值是超级低的:
上式中的Jdark指的就是暗通道,Ω(x)是求解暗通道图时进行最小值滤波的窗口。通过将暗通道先验知识与大气散射模型结合,可以计算出大气散射模型中的透射率:
得到透射率后,再计算环境光值就能对无雾图像求解了。文献[12]中的做法是先在暗通道图中按照亮度值的排序找出最亮的前百分之一个像素位置,再从原始图像中找到相应的点,最后从中找出最亮的像素值作为环境光值。
由于视频压缩通常都是针对YUV视频序列压缩,为了更好地实现视频去雾与视频压缩的计算资源共享,本文基于YUV颜色空间进行去雾,因此不得不提到另外一种计算透射率的方法[13]:当存在一幅无雾的YUV图像,则该图像的亮度分量中会有一部分像素的强度接近零。那么对该图像,同样也能采用局部最小值滤波得到亮度分量的暗通道图。
与文献[12]中的暗通道类似,可以得到亮度分量的透射率表达公式:
在式(6)和式(7)中,JY是J的亮度分量,IY是YUV图像的亮度分量,Ω(x)同样表示滤波窗口,ω是一个常量,用来保留图像中少量的雾。
对于YUV图像的环境光值,本文依旧从亮度分量着手进行计算,首先从亮度分量暗通道图中找出最亮的前百分之二个像素位置,接着在亮度分量图中找到对应的点,最后计算这些像素点的平均值作为环境光值,如算法1所示。
在得到YUV视频序列每帧单独的透射率之后,还需要对相邻透射率进行一致性优化,本文对已有的基于帧间相关性的透射率优化方法[8]进行了改进,其框架图如图3所示。得到透射率之后首先利用引导滤波对其细化,让它拥有与原始视频序列相近的纹理细节,与此同时,还利用运动估计得到原始视频相邻帧之间的运动矢量,再利用这些运动矢量在透射率序列中寻找到相应的匹配块,最后进行加权平均滤波得到优化的透射率图。
图3 透射率一致性优化的框架图
与已有方法相同的是:两种方法都利用连续的五帧来进行加权平均滤波,给透射率t(x)都分别加上权重值λ:
考虑到相邻帧之间的相关性,也为了保证权重值的分布符合高斯分布,本文将权重值分别设为
与已有方法不同的是:为了更好地实现视频去雾与视频编码的结合,本文还在运动矢量的计算方法、宏块的划分模式上进行了相应的改进,并在以下章节进行介绍。
3.2 运动估计共享
在对透射率进行优化的时候,本文主要是对相邻帧进行运动估计得到相应的信息,而视频压缩的关键技术也是运动估计,基于这一共同点,本文将两者结合起来,提出了一种基于运动估计共享的雾霾视频压缩方法,在整个视频去雾和视频压缩的过程中,仅进行一次运动估计,而非在去雾时和编码时都各自分开进行运动估计,文本框架大致如图4所示。
图4 基于运动估计共享的雾霾视频压缩方法框架图
运动估计(Motion Estimation,ME)[14]指的是得到运动矢量的一个过程,如图5所示,首先需要将每一个当前帧分成很多宏块,然后利用块匹配算法找到当前宏块的最佳匹配块,两者之间的相对位移就是运动矢量。常用的块匹配算法主要有全搜索法(Full Search,FS)[15]以及三步搜索法(Three Step Search,TSS)[16]等。
图5 运动估计示意图
为了实现运动估计共享,本文主要是针对运动估计过程中的运动矢量、宏块划分模式进行共享,将这些计算资源同时用于视频去雾进行透射率帧间一致性优化以及视频压缩进行帧间预测,做到保持两方面不仅运动矢量一致而且宏块划分模式也一致。
3.2.1 运动矢量共享
所谓运动矢量共享,在本章节中主要是指将同一运动矢量分别用于在透射率图中寻找相应的最佳匹配块以及用于视频压缩的帧间预测,而非两者采用不同的运动矢量。而谈到运动矢量,就不得不提到运动估计的块匹配算法[17],通常,如果是考虑计算复杂度或者时间开销,被选择的会是快速匹配算法,文献[8]中采用的就是三步搜索法,该算法虽然应用较为广泛,但是也存在一定的缺点,尤其是在全局性方面的考虑。
三步搜索法的每一个步骤都仅仅考虑了当前原点及其周围的八个搜索点,且步长会逐渐减半直至减为1,这就意味着:如果是在一个[-7,+7]的搜索范围内进行块匹配,那么能够匹配到的位置只有25个,这仅仅只占了全部225个匹配位置的九分之一,另外两百个位置根本没有进行匹配,尽管其中可能包含了真实的最佳匹配块。
图6 全搜索法示意图
出于对全局最佳匹配块的考虑,本文选择一种全局的块匹配算法,遍历搜索范围包含的全部搜索位置,比较每个位置的匹配度,选择全局最优的运动矢量,这种算法被称为全搜索法,在搜索过程中按照螺旋式从原点开始搜索,如图6所示。如果是在[-7,+7]的搜索范围内,能够匹配到全部225个位置,找到全局内最好的结果。
3.2.2 宏块划分模式共享
所谓宏块划分模式共享,在本章节中主要是指在运动估计的过程中,对透射率进行优化以及对视频压缩进行帧间预测的时候,采用相同的宏块划分模式。在已有的帧间相关性透射率优化方法[8]中,每一个当前帧都采用了一致的划分方式,得到的划分结果都是若干个16*16的宏块,然而,这种划分方式比较适合纹理很少以及相对平滑的图像;考虑到实际上很多真实的图像在纹理上是比较复杂的,仅仅在一小块区域中也会包含多个目标物体或场景,因此,很有必要对图像中的宏块进行多种不同方式的划分,此外,采取多种多样的宏块划分模式对实现视频去雾和视频压缩之间的宏块划分模式共享也是有好处的。
H.264/AVC标准将每一个16*16的宏块都被划分为了16*16、16*8、8*16及8*8等类型的小块,对于8*8的亚宏块,又进一步划分成了8*8、8*4、4*8及4*4等类型的更小的块,如图7所示。
图7 宏块划分模式示意图
本文在进行透射率优化的时候,也采用同样类型的划分模式,如此一来,既可以实现视频去雾与视频编码的宏块划分模式共享,又能将原本16*16的宏块划分为多个小块,得到包含图8在内的多种划分结果。
图8 宏块划分的一种结果
4 实验分析
首先为了比较本文改进的去雾算法与其他已有算法的去雾效果,针对YUV视频序列进行了以下实验,并对去雾后的亮度分量结果进行展示。
实验一:比较去雾后视频的连续性。比较的方法有:1)每帧单独进行去雾的方法;2)本文改进的去雾方法。实验结果如图9所示,其中从左到右第一列是原始的视频序列之中连续的四帧,第二列是进行单帧去雾的结果,第三列是文本去雾方法的结果。
在图9的实验结果中,原始的视频序列在亮度变化方面并不明显,而对每帧单独去雾后,各帧之间在亮度方面发生了一些变化,比起第二帧和第四帧,第一帧和第三帧在白色框部分的亮度要暗一些,而本文方法的结果并没有出现这种情况,这也就表明:利用连续的五帧对当前帧的透射率进行优化可以使去雾后的视频序列保持良好的连续性。
图9 实验一去雾结果对比
除了比较上述方法在亮度方面的连续性,本文还进行了实验二:比较去雾后视频的清晰度。比较的方法有:1)每帧单独进行去雾的方法;2)文献[8]将宏块平均划分并采用三步搜索法的方法;3)本文去雾方法。实验结果如图10所示,其中从左到右第一列是视频序列之中的一帧,第二列是单帧去雾的结果,第三列是文献[8]的去雾结果,第四列是本文方法的去雾结果。每列的第一行是完整图像,第二行是图像的局部放大图。
图10 实验二去雾结果对比
在不考虑连续性的条件下,我们认为对于某一帧而言,单独进行去雾的结果是最清晰的。在图10的实验结果中,通过各结果的局部放大图可以看到,每帧单独去雾方法和本文方法的去雾结果比较清晰,而文献[8]的去雾结果有点粗糙。这也就表明:本文用全搜索算法得到全局最优的运动矢量,并将宏块划分为多种类型的小块,能找到全局最佳的匹配块,对透射率优化后也能得到比较清晰的去雾结果。
鉴于本文主要是将视频去雾与视频压缩相结合提出了一种基于运动估计共享的雾霾视频压缩方法,在运动矢量共享和宏块划分模式共享方面,可以通过考虑不同的去雾效果或者压缩性能得到不一样的结果,为了体现表示压缩性能的率失真曲线对比效果,本文选择了三种方案,采取相同的去雾算法和H.264/AVC编码框架进行了实验:方案一只考虑去雾效果,方案二只考虑压缩性能,方案三同时考虑去雾效果和压缩性能,率失真曲线对比如图11所示。从图11可以看出,同时考虑去雾效果和压缩性能得到的率失真曲线比较居中且接近方案二仅考虑压缩性能的率失真曲线,这表示本文基于运动估计共享的雾霾视频压缩方法也能获得较好的压缩性能。
图11 率失真曲线对比图
5 结语
本文提出了一种基于运动估计共享的雾霾视频压缩方法,不仅可以对雾霾视频进行去雾,还能够同时实现视频的压缩;本文还对已有的去雾算法进行了一定的改进,不仅可以维持去雾视频的帧间连续性,还能够获得清晰的去雾效果,最重要的是对视频去雾和视频压缩的有效结合十分有利。