一种基于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 ...
随机推荐
- CSS学习小记
搜狗主页页面CSS学习小记 1.边框的处理 要形成上图所示的布局效果,即,点选后,导航下面的边框不显示而其他的边框形成平滑的形状.相对于把导航的下面边框取消然后用空白覆盖掉下面搜索栏的边框比较而言 ...
- myeclipse maven编译出错
从.net 到java 快一年了.这一年学了很多东西.从开发角度来说俩个语言查不到.部署上差异较大.不过java处理问题上确实不太统一.好多问题在网上没有正确的回答.刚换台式机发现 mvn inst ...
- Winform DataGridView CheckBoxColumn c# 单选 解决方案
这个问题由来已久,我最近在工作中也遇到了这个问题,不过属于这个问题比较简单初级的涉及. 发现网上对这个问题的解决方案很多不对,答非所问. 所以这里将我测试成功的解决方案记录下来. 首先,DataGri ...
- PHP之语言基础01 By ACReaper
1.PHP中的变量是不需要声明类型的,由$标识变量,变量的命名规则也是字母或者下划线开头,接着任意字符或者下划线. $PI = 3.14; $radius = 5; $cir = $PI * 2 * ...
- android sqlite使用之模糊查询数据库数据的三种方式
android应用开发中常常需要记录一下数据,而在查询的时候如何实现模糊查询呢?很少有文章来做这样的介绍,所以这里简单的介绍下三种sqlite的模糊查询方式,直接上代码把: package com.e ...
- 高频交易算法研发心得--RSI指标及应用
高频交易算法研发心得--RSI指标及应用 前面文章中我们提到了MA均线(包括EMA,SMA).MACD以及SAR指标,这三类指标存在一个共同特点,即:从固定周期的价格作为判读的指导思想,并将价格进行平 ...
- ORACLE查询语句
--建表FAMILYINF CREATE TABLE FAMILYINFO( FNO NUMBER CONSTRAINT FC001 PRIMARY KEY,--把字段fno约束为主键 ...
- node.JS中配置http-server
http-server 是一个简单的HTTP服务器, 基于 nodeJs,在nodejs命令行中配置http服务器. 项目结构:
- [UWP小白日记-4]记账项目-2
手机端: 待续…… 哈哈这个代码真是好长时间啊,没办法萌新你们都懂的,UI是改了又改,知识也在慢慢积累, 所以这效率就低下了点 UI是改了又改,代码是不断了改,所以搞到现在都没开发完成
- Linux学习笔记-epoll
#include <sys/epoll.h> epoll是Linux内核的一个系统调用,一种可扩展的I/O事件通知机制,最早在Linux内核2.5.44版本引入. 它的功能是监视多文件描述 ...