前段时间略忙,因此一直计划要总结的非常多东西都没来得及写,这两天趁着空暇时间写上一篇。以后等时间充裕了再补充一些内容。本文总结一下学习视频质量评价技术的方法。
视频质量评价是我研究生阶段基本的工作。包括发表的论文,毕业设计。进行的实验等等。在这一方面在国内做的研究并非非常多,因此我打算总结一下学习的经验,方便看过本文的人了解视频质量评价技术。
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:视频处理。
主页地址:http://ffmpeg.org
YUV Player Deluxe:看YUV文件用。注意假设把YUV文件的宽和高信息写到文件名称中,形如“xxx_[width]x[height].yuv”,比如“src01_640x360.yuv”。则该播放器会自己主动以640x360分辨率打开该YUV文件。还是非常智能的。
主页地址:http://www.yuvplayer.com/
视频播放器:看压缩码流文件用。像终极解码,暴风影音。QQ影音这些都能够。
2.1.1编码
普通情况下能够使用FFmpeg。
绝大多数的视频编码器都被FFmpeg支持,因此使用起来比較方便。并且对于不同的编码器,FFmpeg都使用统一的命令行格式。命令行參数相对照较easy记忆。当然特殊情况下还是须要独立的编码器。比方说用于学术研究的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. 视频序列复杂度
视频编码和序列的复杂度是息息相关的。序列的复杂度分为时间复杂度和空间复杂度。视频画面细节越多,空间复杂度越大;视频内容运动越剧烈。时间复杂度越大。视频复杂度越大。在同等画质的前提下,编码须要越多的数据量。能够依据序列的时间复杂度和空间复杂度筛选合适的測试序列。
时间复杂度和空间复杂度能够參考:
视频特性TI(时间信息)和SI(空间信息)的计算工具:TIandSI
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无參考视频质量评价方法(使用了基于遗传编程方法的符号回归)