一种基于FSIM对视频编码图像质量客观评价的方法
一 为什么对视频编码图像质量客观评价
视频图像质量主观评价一般采用连续双激励质量度量法对任一观测者连续给出原始视频图像和处理过的失真图像,由观测者根据主观感知给出分值,其需针对多个视频对象进行多次重复实验,耗时多、费用高,难以操作;而视频编码图像的客观评价早期主要采用峰值信噪比(PSNR)或均方差(MSE)衡量视频序列的失真度,虽然其具有操作简单、成本低、易于实现的特点,但是由于其忽略了图像内容对人眼的影响,不能完整地反映出图像的质量。所以现实中还是多以主观评价方式为主的,码率影响视频请晰度,但是这也是在两个码率比较悬殊的两个视频序列的画质才可以被人眼比较明显感知到,否则很难定定量衡量码率提升带来的视频画质的提升效益。如何让视频图像质量客观评价方法产生的结果逼近主观评价结果进而定量衡量视频图像质量,为此近些年出现了多种基于结构化、人眼生理特征建立的视觉感知模型与统计算法的客观评价方法。
二 都有哪些视频编码图像质量客观评价(限于有全参考图像即FR)的方法
- PSNR
- NQM
- UQI
- SSIM
- MS-SSIM
- IFC
- VIF
- VSNR
- IW-SSIM
- RFSIM
- FSIM
三 都有哪些评估视频编码图像质量客观评价方法的优劣的方法
- SROCC
- KROCC
- PLCC
- RMSE
四 为测试视频编码图像质量客观评价方法相应算法都有哪些图像模型库
- TID2013
- TID2008
- CSIQ
- LIVE
- IVC
- MICT
- WIQ
- A57
五 以TID2013来看看哪个方法评价视频图像质量最牛
备注:* Spearman correlation即SROCC
* Kendall correlation即KROCC
* FSIMc是同时计算色度的FSIM
* 由此可以看出在这些评价算法中最接近主观评价分值的是FSIM,所以下面我们以该方法定量衡量不同编码参数对编码出的图像质量的影响。
六 如何使用FSIM
官网地扯:http://www4.comp.polyu.edu.hk/~cslzhang/IQA/FSIM/FSIM.htm,算法以matlab语言实现,所以使用前要先装matlab,然后在matlab命令窗口先用imread加载一个参考图像与一个相应的扭曲图像,然后调用FeatureSIM进行特值相似度值的计算,值越高说明后者图像质量越高。使用方法示例如下:
七 封装FSIM便于批量处理
- 枚举某一目录下所有图像文件函数
function [Status, FileList] = EnumPRefDir( RefDir )
%EnumPRefDir 枚举某一保存参考图片的目录获取其中的所有参考图像文件
% 枚举目录(排除子目录包括.或..)
% 输入参数
% refdir 被枚举的目录
% 输出参数
% Status 为0表示文件列表为空,1非空
% FileList 文件列表
% 调用示例
% [Status, FileList] = EnumPRefDir( 'RefDir' ); %FileList{1} = 'a111.txt';
%FileList{2} = 'a112.txt'; if ~exist(RefDir, 'dir')
strerr = ['目录', RefDir, '不存在'];
disp(strerr);
end DirList=dir(RefDir);
FileListIndex = 1;
Status=0;
FileList{FileListIndex}=char('empty');
for DirListIndex=1:length(DirList)
if ~DirList(DirListIndex).isdir
FileList{FileListIndex} = char(DirList(DirListIndex).name);
FileListIndex = FileListIndex + 1;
Status=1;
end
end end - 调用FSIM计算两个文件夹中的图片从而生成相似度列表文件
function Status = FSIMBetweenTwoFileFolder( RefDir, DecodeDir )
%FSIMBetweenTwoFileFolder 调用FSIM计算两个文件夹中的图片从而生成相似度列表文件
% 基于参考与解码文件夹计算这些文件夹中相应图片的相似度
% Tip:两个文件夹中的文件命名方式相同,比如RefDir/P000001与RefDir/P000001
% 输入参数
% RefDir 参数图片文件夹
% DecodeDir 解码图片文件夹
% 输出参数
% Status 为0出现错误(比如文件夹为空或两个文件夹图片命方式不同或数量不同)
% 为1全部文件都经过了正确的相似度计算
% 输出相似度列表文件
% RefDir+DecodeDir+'FSIM.txt',其行格式为:图片文件名 + ' ' + 相似度值 + ' ' + 相似度值c
% 调用示例
% Status = FSIMBetweenTwoFileFolder('RefDir', 'DecodeDir1'); Status = 1;
if ~exist(RefDir, 'dir') || ~exist(DecodeDir, 'dir')
strerr = ['目录', RefDir,'或',DecodeDir, '不存在'];
disp(strerr);
Status = 0;
return;
end SListFileName = strcat(RefDir, '_');
SListFileName = strcat(SListFileName, DecodeDir);
SListFileName = strcat(SListFileName, '_FSIM.txt'); try
[FStatus, FileList] = EnumPRefDir( RefDir ); if(FStatus == 0)
Status = 0;
return;
end SListFileID = fopen(SListFileName, 'w');
if(SListFileID < 0)
Status = 0;
return;
end for FIndex = 1 : length(FileList)
OneRefFileName =['', RefDir, '/', char(FileList(FIndex))];
OneDecodeFileName = ['', DecodeDir, '/', char(FileList(FIndex))]; if ~exist(OneRefFileName, 'file') || ~exist(OneDecodeFileName, 'file')
Status = 0;
break;
else
try
OneRefFileHandle = imread(OneRefFileName);
OneDecodeFileHandle = imread(OneDecodeFileName);
[FSIM, FSIMc] = FeatureSIM(OneRefFileHandle, OneDecodeFileHandle);
fprintf(SListFileID, '%s %f %f\r\n', char(FileList(FIndex)), FSIM, FSIMc);
catch rme
disp(rme.message);
Status = 0;
break;
end
end
end fclose(SListFileID);
catch eme
disp(eme.message);
Status = 0;
end
if ~Status
delete(SListFileName);
end
end - 驱动函数
function FSIMDriver( RefDir,DecodeDir1, DecodeDir2 )
%FSIMDriver FSIM相似度计算主驱动程序
% FSIM相似度计算主驱动程序
% 说明
% 跟据目前的需求,主要基于编码前图像目录(RefDir)与两种不同编码参数相应的
% 两类解码图像目录(DecodeDir1与DecodeDir2)计算图像特征相似度,从而比较不同的编码参数的效果
% 输入参数
% RefDir 保存编码前图像文件的文件夹名称,默认值是当前目录下的‘RefDir’
% DecodeDir1 保存解码后图像文件的文件夹名称,默认值是当前目录下的‘DecodeDir1’
% DecodeDir2 保存解码后图像文件的文件夹名称(DecodeDir1与DecodeDir2中的图像文件编码参数不同),默认值是当前目录下的‘DecodeDir2’ % 输出参数
% 无
% 调用示例
% FSIMDriver(); narginchk(0, 3);
nargoutchk(0, 0); if nargin < 3
DecodeDir2='DecodeDir2';
end if nargin < 2
DecodeDir1='DecodeDir1';
end if nargin < 1
RefDir='RefDir';
end try
ErrorCode = FSIMBetweenTwoFileFolder(RefDir, DecodeDir1);
disp(['基于目录',RefDir,'与', DecodeDir1, '计算图像特征相似度', GetErrorDisp( ErrorCode )]); ErrorCode = FSIMBetweenTwoFileFolder(RefDir, DecodeDir2);
disp(['基于目录',RefDir,'与', DecodeDir2, '计算图像特征相似度', GetErrorDisp( ErrorCode )]);
catch tme
disp(tme.message);
end
end function ErrorDisp = GetErrorDisp( ErrorCode )
if ErrorCode
ErrorDisp = '成功';
else
ErrorDisp = '失败';
end
end - 生成可执行文件
在matlab命令窗口输入以下命令,这样就可以在当前目录下的子目录target生成了FSIMDriver.exe:
mkdir target
mcc -m -d target FSIMDriver - 在没有安装matlab的用户机如何运行FSIMDriver,首先在matlab命令窗口调用mcrinstaller显示如下找到mcrinstaller.exe的位置,在用户机通过该程序安装matlab运行时,然后在window命令行窗口即可运行FSIMDriver.exe。
- FSIMDriver.exe需要三个命令行参数,分别为保存编码前图像文件的目录名称、两个保存解码后的图像文件的目录(这两个目录中的图像文件是由不同编码参数所编码视频序列解码后的图像文件且这两个目录中的文件名称与编码前保存的图像文件的名称一样)。
八 总结
由于视频图像序列场景不停在变化,所有图像质量评价方法包括FSIM在定量衡量编码之后的图像失真度还是存在一定局限性,不过作为一个方向还是值得关注的。
一种基于FSIM对视频编码图像质量客观评价的方法的更多相关文章
- MPEG-4视频编码核心思想
1 引言 当今时代,信息技术和计算机互联网飞速发展,在此背景下,多媒体信息已成为人类获取信息的最主要载体,同时也成为电子信息领域技术开发和研究的热点.多媒体信息经数字化处理后具有易于加密.抗干扰能 ...
- 基于Linux应用层的6LOWPAN物联网网关及实现方法
本发明涉及一种基于Linux应用层的6LOWPAN物联网网关及实现方法,所述物联网网关包括开发平台以及无线射频模块,其实现方法是:所述6LOWPAN物联网网关的以太网网口收到访问6LOWPAN无线传感 ...
- 【转载】视频编码(H264概述)
一视频编码介绍 1.1 视频压缩编码的目标 1)保证压缩比例 2)保证恢复的质量 3)易实现,低成本,可靠性 1.2 压缩的出发点(可行性) 1)时间相关性 在一组视频序列中,相邻相邻两帧只有极少的不 ...
- 【图像处理】DVR H.264视频编码基本知识
视频编码技术基本是由ISO/IEC制定的MPEG-x和ITU-T制定的H.26x两大系列视频编码国际标准的推出.从H.261视频编码建议,到 H.262/3.MPEG-1/2/4等都有一个共同的不断追 ...
- 直播平台搭建之音视频开发:认识主流视频编码技术H.264
H.264简介 什么是H.264?H.264是一种高性能的视频编解码技术.目前国际上制定视频编解码技术的组织有两个,一个是"国际电联",它制定的标准有H.261.H.263.H.2 ...
- 【转】基于DM8168的视频智能分析系统的设计方案
[导读] 为了实现高清视频的智能分析功能,本文介绍了一种以TI公司的DM8168为核心的高清视频智能分析系统的设计方案,该方案从硬件设计和软件设计两个方面介绍了硬件组成.工作流程.软件架构,并 ...
- 基于Linux的视频传输系统(上大学时參加的一个大赛的论文)
文件夹 1原创性声明----------------------------------------------------3 2 摘要-------------------------------- ...
- Android实现录屏直播(三)MediaProjection + VirtualDisplay + librtmp + MediaCodec实现视频编码并推流到rtmp服务器
请尊重分享成果,转载请注明出处,本文来自Coder包子哥,原文链接:http://blog.csdn.net/zxccxzzxz/article/details/55230272 Android实现录 ...
- 嵌入式 视频编码(H264)
这几天在编写视频录制模块,所以,闲暇之余,又粗粗的整理了一下,主要是API,以备不时之用 摄像头获取的模拟信号通过经芯片处理(我们使用的是CX25825),将模拟信号转成数字信号,产生标准的IT ...
随机推荐
- hdu-4471-Homework-矩阵快速幂+优化加速
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4471 题目意思: 求f(n). 当n为特殊点nk时 解题思路: 当x不为特殊点时,直接用基本的矩阵快 ...
- 使用Android网络编程实现简易聊天室
在Java中我们可以利用socket编程实现聊天室,在Android中也一样,因为Android完全支持JDK本身的TCP.UDP网络通信API.我们可以使用ServerSocket.Socket来建 ...
- log4j2日志配置
背景 log4j2相对于log4j 1.x有了脱胎换骨的变化,其官网宣称的优势有多线程下10几倍于log4j 1.x和logback的高吞吐量.可配置的审计型日志.基于插件架构的各种灵活配置等. 1. ...
- java单词表01
OO:object-oriented,面向对象OOP:object-orientedprogramming面向对象编程 JDK:Javadevelopmentkit,java开发工具包JVM:java ...
- iOS开发-内存管理
内存管理 对于这篇呢,其实现在都是ARC模式,正常状态下基本不用我们去手动释放内存,所以如果不是要面试呀.装逼或者扎实功底的,就先别看了或者了解下即可,因为像面试时,有些面试官想看你的基础时,就有些人 ...
- 关于JAVA中split方法使用竖线异常的问题
split表达式,其实就是一个正则表达式. * ^ | 等符号在正则表达式中属于一种有特殊含义的字符,如果使用此种字符作为分隔符,必须使用转义符即\\加以转义.不然分割的结果就不是你想要的.
- Symfony3 更改生成CRUD目录步骤
---恢复内容开始--- 今天是2017-01-16号,项目零零散散的进行着: 由于Symfony3生成的crud在app目录需要转移到相应的Budle下面,记录以下过程: 我使用的是Symfony3 ...
- Method Invocation Expressions
15.12.1. Compile-Time Step 1: Determine Class or Interface to Search The first step in processin ...
- 深入分析:微信小程序与H5的区别
作为前端工程师,从前端的视角,为大家分析下微信小程序和HTML5与之间的主要区别 第一条是运行环境的不同. 传统的HTML5的运行环境是浏览器,包括webview,而微信小程序的运行环境并非完整的浏览 ...
- Django回忆录
Django使用回忆: 1.安装django: pip install django==1.9 2.创建项目及应用: django-admin startproject web django-admi ...