前段时间略忙,因此一直计划要总结的很多东西都没来得及写,这两天趁着空闲时间写上一篇。以后等时间充裕了再补充一些内容。本文总结一下学习视频质量评价技术的方法。视频质量评价是我研究生阶段主要的工作,包括发表的论文,毕业设计,进行的实验等等。在这一方面在国内做的研究并不是很多,因此我打算总结一下学习的经验,方便看过本文的人了解视频质量评价技术。
0.背景
首先应该了解一下质量评价都是干什么用的。这个其实本身也困扰了我一段时间。进入实验室之后,我也没有向师哥师姐咨询过这个问题。后来自己摸索了一段时间,大致知道视频质量评价应用的方面。
0.1.视频编码器(编码标准)性能评测
编码器(或者是编码标准)性能评测是视频质量评价使用最为广泛的一项应用。
视频编码器的作用是将输入的像素数据编码为输出的码流数据,最终的意义在于压缩视频的数据量。视频编码过程是一个有损压缩的过程,输出的视频码率(比特率)越低,视频的质量越低。虽然大体的趋势是一样的,即编码的视频的质量和视频的码率成正比的关系,但是不同的编码器之间的性能还是有区别的(即使采用相同的视频编码标准,比如同样是基于H.264标准的编码器,不同编码器之间性能也有区别)。一个优秀的视频编码器和其他视频编码器相比,就是能在相同的码率下,编码获得质量更高的视频。或者在编码获得相同质量的视频的前提下,使用更小的码率。可以通过视频质量评价的客观算法,对比得出视频编码器孰优孰劣。例如这方面的研究可以参考文章:
MSU出品的 H.264编码器比较(2011.5)(包含VP8以及XviD)
除了对比视频编码器之外,也可以对比视频编码标准的性能。视频编码标准之间的差距一般来说相对比较大,越晚提出的编码标准,性能一般越强。例如可以参考文章:
视频编码方案之间的比较(HEVC,H.264,MPEG2等)
详细的介绍可以查看第5章的内容。
0.2.视频质量监测
视频质量监测是视频质量评价另一种使用比较广泛的应用。
该方面主要用于实时监测分析视频流。例如监测CMMB,数字电视,IPTV,互联网视频等这些信号的质量。当这些信号出现异常的时候,可以反馈给服务提供商,使之及时采取相应的措施,修复视频传输过程中出现的问题。例如这方面的研究可以参考文章:
详细的介绍可以查看第5章的内容。
1.视频质量评价分类
通常,人们将数字视频质量评估的方法分为两大类:视频主观质量评价(SubjectiveQuality Assessment,SQA)和视频客观质量评价(ObjectiveQuality Assessment,OQA)。直接让观测者对视频质量做出直观判断的主观质量评估方法是最为准确的评估方法,但该方法相对复杂且其结果易受多种因素影响,因此,在实际应用中通常使用客观的、易于实现的视频客观质量评估方法。根据对原始视频的依赖程度,客观质量评估法又可以分为三种类型:全参考(FullReference,FR),部分参考(ReducedReference,RR)和无参考(No Reference,NR)。视频质量评价的分类如下图所示。
1.1.视频主观质量评价
视频主观质量评估就是选择一批非专家类型的受测者,让他们在一个特定的受控环境中,连续观看一系列的测试序列大约10至30分钟,然后采用不同方法让他们对视频序列的质量进行评分,最后求得平均判分(MeanOpinion Score,MOS),并对所得数据进行分析。测试环境中的受控因素包括:观看距离、观测环境、测试序列的选择、序列的显示时间间隔等。根据不同的测试环境、测试目的,有不同的主观评价方法,可参考下文:
主观评价一般需要专业的实验环境,以及大量的受测人员,因此成本比较大。
主观评价相关标准:
ITU-R BT.1788建议书对多媒体应用中视频质量的主观评估方法
主观质量评价实验软件:
MSU Perceptual VideoQuality tool
1.2.视频客观质量评价
由于视频主观质量评估过于复杂且其结果易受多种因素影响,因此,在实际应用中需要一种客观的、易于实现的视频客观质量评估方法。因为受测者对视频质量的主观感受最为真实和准确,所以在相同的视频系统和相同的测试序列条件下,要求客观评估的结果应与主观评估的结果具有好的一致性或相关性。
对于一个视频客观质量评估方法来说,关键的是找出一个或几个最合适的视频质量量度来衡量视频质量的好坏。根据失真视频与其相应的原始参考视频的比较程度,视频客观质量评估方法分为三大类:全参考方法(Full Reference)、部分参考方法(Reduced Reference)、无参考方法(No Reference)。三种方法如下图所示。
由图可以看出,全参考方法只适用于已知原始视频的编码器端,可以用它来定量测量编码器的输出视频质量,它主要用于编码器的设计和对不同编码器的性能进行评估和优化。部分参考方法需要部分原始视频或者需要通过传输额外的一些信息。特别是无参考方法,在判断视频质量时不需要来自原始参考视频的任何信息,仅仅通过对失真视频空域和频域的处理分析来提取失真视频的特征,从而得到视频质量。适用于带宽有限,传输成本较高,不可能提供原始参考视频序列的无线和IP视频业务,可以用来实时或非实时的监控传输信道的服务质量(QoS)和视频系统的性能,并通过质量反馈来调节编解码器或信道的参数,保证有良好的恢复视频质量。
在这里主要介绍全参考质量评价模型,这种模型已经十分成熟。几种全参考视频质量评价模型可参考下文:
全参考视频质量评价的计算工具有下列两个:
开源视频质量评价工具: Evalvid。该工具是开源的,基于命令行的,适用于批处理。
视频质量评价工具:MSU Video Quality Measurement Tool。该工具是商业的,图形界面的,界面相对比较友好,但不适用于大批量的处理。
下面列举几张图片,说明全参考视频质量评价模型的客观值和主观感受之间的关系。测试序列选自VQEG数据库,内容为一个松鼠拿着松子走路,时长为10秒,时间复杂度和空间复杂度相对比较低。使用x264编码为不同的码率后分别计算了PSNR和SSIM。截图所示为视频序列的第50帧。
注:PSNR取值20-40,值越大,视频质量越好。SSIM取值0-1,值越大,视频质量越好。
原视频(像素格式:YUV420P;分辨率:640x360)
码率=144 Kbps(每像素比特数=0.025);PSNR=29.622;SSIM=0.81
码率=288 Kbps(每像素比特数=0.050);PSNR=32.89;SSIM=0.906
码率=432 Kbps(每像素比特数=0.075);PSNR=34.98;SSIM=0.941
码率=576 Kbps(每像素比特数=0.100);PSNR=36.59;SSIM=0.958
码率=864 Kbps(每像素比特数=0.150);PSNR=38.823;SSIM=0.974
码率=1 152 Kbps(每像素比特数=0.200);PSNR=40.586;SSIM=0.982
整个序列一共250帧,所有帧的PSNR如下图所示:
所有帧的SSIM如下图所示:
2.质量评价涉及到的其它知识
视频质量评价技术中,涉及到以下几方面的知识。
2.1.视频数据的处理
视频质量评价研究的过程中,需要对视频数据进行编码,解码,像素格式转换等操作,以适应各种计算工具的需要。在此简单总结一下常用的工具和命令。除了视频编码所需的特定的编码器(例如JM,x264,xvid等等)之外,需要以下几个工具:
FFmpeg:视频处理。
YUV Player Deluxe:看YUV文件用。注意如果把YUV文件的宽和高信息写到文件名中,形如“xxx_[width]x[height].yuv”,例如“src01_640x360.yuv”,则该播放器会自动以640x360分辨率打开该YUV文件,还是很智能的。
视频播放器:看压缩码流文件用。像终极解码,暴风影音,QQ影音这些都可以。
2.1.1编码
一般情况下可以使用FFmpeg。绝大多数的视频编码器都被FFmpeg支持,因此使用起来比较方便。而且对于不同的编码器,FFmpeg都使用统一的命令行格式,命令行参数相对比较容易记忆。当然特殊情况下还是需要独立的编码器,比如说用于学术研究的JM,HM这样的软件,或者是比较新的编码器。下面举几个例子。
下面两条命令是使用FFmpeg调用相应的库进行编码的命令。
FFmpeg调用x264编码YUV420P视频序列(码率800kbps):
ffmpeg -s 640x360 -i src01_640x360.yuv -b:v 800k -vcodec libx264 src01_640x360_800k.h264
FFmpeg调用xvid编码YUV420P视频序列(码率800kbps,封装为AVI):
ffmpeg -s 640x360 -i src01_640x360.yuv -b:v 800k -vcodec libxvid src01_640x360_800k.avi
可以看出上面两个命令参数格式基本上是一致的。
下面两条命令是使用独立的编码器进行编码的命令。功能上和上两条命令是一样的。
使用x264编码YUV420P视频序列(码率为800kbps):
x264 --bitrate 800 --input-res 640x360 -o src01_640x360_800k.h264 src01_640x360.yuv
使用xvid编码YUV420P视频序列(码率800kbps,封装为AVI):
xvid_encraw -i src01_640x360.yuv -w 640 -h 360 -csp i420 -bitrate 800 -o src01_640x360.avi
可以看出上面两个命令行的参数格式差别还是比较大的,相对难记忆一些。
专用于学术研究的软件模型如JM,HM这些一般是不被FFmpeg支持的,只能独立运行。如下面的例子。
使用HM(HEVC)编码YUV420P视频序列:
tappencoder -c encoder_lowdelay_P_main.cfg -i src01_640x360.yuv -wdt 640 -hgt 360 -b src01_640x360_800k.hm10
注:这里需要注意的是tappencoder后面附加的参数如-i,-wdt这些参数可以覆盖掉原先写在配置文件xx.cfg中的参数。
2.1.2解码
一般情况下都可以使用FFmpeg。和编码器一样,绝大多数的视频解码器都被FFmpeg支持,因此使用起来比较方便。少数情况下也可以使用独立的解码器。下面举几个例子。
下面两条命令是使用FFmpeg进行解码的命令。
FFmpeg解码H.264码流为YUV420P:
ffmpeg -i src01_640x360_800k.h264 src01_640x360_800k.yuv
FFmpeg解码MPEG-4码流(AVI封装)为YUV420P:
ffmpeg -i src01_640x360_800k.avi src01_640x360_800k.yuv
可以看出上面两个命令参数格式基本上是一致的。
专用于学术研究的软件模型一般是不被FFmpeg支持的,只能独立运行。如下面的例子。
使用HM(HEVC)解码HEVC码流为YUV420P:
tappdecoder -b src01_640x360.hm10 -o src01_640x360.yuv
2.1.3像素格式转换
推荐使用FFmpeg。FFmpeg中的libswscale对像素格式转换的支持很好,使用起来很方便。下面举几个例子。
封装过的像素数据(AVI)转换为YUV420P:
ffmpeg -i src01.avi src01.yuv
封装过的像素数据(BMP)转换为YUV420P:
ffmpeg -i src01.bmp src01.yuv
封装过的像素数据(AVI)转换为YUV422P。在这里需要注意,如果不指定-pix_fmt的话,FFmpeg默认将YUV数据转换为YUV420P格式的。如果需要其它YUV格式的数据的花,一定要指定-pix_fmt。
ffmpeg -i src01.avi -pix_fmt yuv422p src01_422.yuv
注:查看FFmpeg支持的所有的格式,可以使用命令:
ffmpeg -pix_fmts
YUV格式之间互相转换,例如YUV422P转换为YUV420P,同时将图像分辨率从1920x1080下变换为1280x720。在这里需要注意,YUV是纯像素数据,并不包含画面的宽高,取样格式等信息,因此转换的时候需要自己指定。
ffmpeg -s 1920x1080 -pix_fmt yuv422p -i src01_1920x1080_422.yuv -s 1280x720 -pix_fmt yuv420p src01_1280x720.yuv
YUV422P转换为封装过的像素数据(BMP)。同理,YUV需要指定宽高,取样格式。
ffmpeg -s 1920x1080 -pix_fmt yuv422p -i src01_1920x1080.yuv src01_1920x1080.bmp
YUV420P转换为YUV422P并且进行封装(AVI):
ffmpeg -s 1920x1080 -i src01_1920x1080.yuv -vcodec rawvideo -pix_fmt yuv422p src01_1920x1080.avi
注:像素数据之间转换的时候,有一个问题需要注意。就是YUV和RGB相互转换的过程中,像素取值范围的问题。有两种取值范围:0-255或16-235。对于精确度要求非常高的实验,需要研究一下这方面的设置。
2.1.4批处理
当需要批量进行视频的编码,解码,像素转换,计算PSNR等等工作的时候,通常可以将所有的命令一行一行地写入到一个记事本中,保存后将记事本的后缀“.txt”改为“.bat”,双击运行之后即可批量执行所有的命令。
2.2.实验结果的处理
视频质量评价研究过程中经常需要进行数据处理,除了使用Excel之外,使用最多的就是Matlab中的拟合工具了,包含曲线拟合工具cftool以及曲面拟合工具sftool。在Matlab主界面命令行中输入“cftool”或者“sftool”就可以打开相应的工具。
这两个工具都是图形界面的,使用起来比较方便。曲线拟合工具cftool使用可参考:
2.3.视频序列复杂度
视频编码和序列的复杂度是息息相关的。序列的复杂度分为时间复杂度和空间复杂度。视频画面细节越多,空间复杂度越大;视频内容运动越剧烈,时间复杂度越大。视频复杂度越大,在同等画质的前提下,编码需要越多的数据量。可以根据序列的时间复杂度和空间复杂度筛选合适的测试序列。时间复杂度和空间复杂度可以参考:
3.质量评价做的比较好的机构
3.1 .VQEG(视频质量专家组)
ITU.T和ITU-R的研究小组联合在一起,在1997年成立了视频质量专家组(VideoQuality Experts Group,VQEG),专门从事视频质量评估的研究和相关标准的制定。属于视频质量评价方面的国际组织。
中文简介:http://blog.csdn.net/leixiaohua1020/article/details/11729745
首页:http://www.its.bldrdoc.gov/vqeg/vqeg-home.aspx
3.2 .MSU Video Group(MSU视频组)
莫斯科大学视频组。出了很多视频质量评价方面的报告,以及这方面的软件。
出品的工具 MSU VQMT(视频质量评价工具):http://blog.csdn.net/leixiaohua1020/article/details/11729257
首页:http://www.compression.ru/video/index.htm
4.视频质量评价资源
4.1.视频测试序列库
CDVL(TheConsumer Digital Video Library):http://www.cdvl.org/
包含了大量的未压缩的原始视频序列,以及一些受损序列。一般情况下这个网站上的视频序列就够用了。
4.2 .图像测试序列库
这些库不但包含了图像,而且包含了主观质量评价的结果。
注:该网站可以作为参考http://sse.tongji.edu.cn/linzhang/IQA/IQA.htm
5.质量评价的已有的研究
在此列出一些自己看过并且感觉比较有价值的论文,已经记录为中文。
5.1.编码器(编码标准)性能评测
限制码率的视频编码标准比较(包括MPEG-2,H.263, MPEG-4,以及 H.264)
视频编码方案之间的比较(HEVC,H.264,MPEG2等)
MSU 出品的 H.264 编码器比较 (2011.5)(包含VP8以及XviD)
5.2. 学术研究
5.2.1.压缩编码与视频质量
一种H.264高清视频的无参考视频质量评价算法(基于QP和跳过宏块数)
HDTV(1920x1080)码率和视频质量关系的研究 1 (前期准备)
HDTV(1920x1080)码率和视频质量关系的研究 2 (实验结果)
H.264无参考视频质量评价方法(使用了基于遗传编程方法的符号回归)
5.2.2其他因素(除了压缩编码之外的因素)与视频质量