图像质量评价指标之Matlab实现
在图像处理算法研究中,很多时候需要有客观评价指标来对算法的性能进行评价。
比如,在图像复原、图像滤波算法研究中,需要采用客观评价指标来定量的来测试算法恢复出的图像相对于参考图像的好坏程度。
本文介绍文献中提到到三个比较好的客观评价指标——峰值性噪比PSNR、模糊系数K、质量因素Q,其定义分别是:



这三个指标的详细定义见参考文献[1]~[3],下面给出这三个评价指标的MatLab实现。
- %说明:本文件为计算两幅视频图象相对于高清晰图象的质量,其中:
- %eyechart1.bmp为未处理前质量较差图象,核心区域的截图保存为area_eyechart1.bmp
- %eyechart2.bmp为某种算法处理后质量较好图象,核心区域的截图保存为area_eyechart2.bmp
- %eyechart3.bmp为高清晰参考图象,核心区域的截图保存为area_eyechart3.bmp
- %程序流程为
- %第一步:先分别从eyechart1.bmp、eyechart2.bmp、eyechart3.bmp中截取出核心区域,并分别保存为area_eyechart1.bmp、area_eyechart1.bmp、area_eyechart3.bmp
- %第二步:以area_eyechart3.bmp为参考图象,计算area_eyechart1.bmp的PSNR、模糊系数KBlur、质量指数Q
- %第三步:以area_eyechart3.bmp为参考图象,计算area_eyechart2.bmp的PSNR、模糊系数KBlur、质量指数Q
- %程序可直接运行,运行结果为:
- %1.保存并显示生成的截图文件area_eyechart1.bmp、area_eyechart1.bmp、area_eyechart3.bmp
- %2、在控制台先显示第二步的计算结果,即area_eyechart1.bmp的三个质量指标,然后接着显示第三步的计算结果,即area_eyechart2.bmp的三个质量指标
- %运行结果分析:area_eyechart2.bmp的PSNR和质量指数Q高,表明其质量较好,而area_eyechart1.bmp的模糊系数KBlur较大
- %这是因为其有很多噪声被当着了边缘能量来计算,这也从一个方面说明模糊系数KBlur的应用具有局限性,但前者KBlur>1,后者<1,理论上只有模糊的情况下
- %KBlur是<=1的,这也可根据KBlur与1的关系来判定图象收噪声污染的程度.
- %******************从eyechart1.bmp,eyechart2.bmp两个文件中截取测试图象区域,可保证两图象截取的区域严格对准*****
- a=imread('eyechart1.bmp','bmp');
- b=a([203:396],[249:440]);
- a=imread('eyechart2.bmp','bmp');
- c=a([203:396],[249:440]);
- %*******************从eyechart3.bmp中截取测试参考图象,截取部分需要进行缩放,使之与eyechart1.bmp,eyechart2.bmp截取部分大小匹配*******************************************************************
- a=imread('eyechart3.bmp','bmp');
- d=a([62:406],[60:395]);
- e=imresize(d,[length(b(:,1)),length(b(1,:))], 'bicubic');%由于eyechart3.bmp和eyechart1.bmp,eyechart2.bmp比例不一样,这里要进行比例调整
- imwrite(b,'area_eyechart1.bmp','bmp');
- imwrite(c,'area_eyechart2.bmp','bmp');
- imwrite(e,'area_eyechart3.bmp','bmp');
- subplot(1,3,1);
- imshow(e);
- title('eyechart3.bmp截取部分,参考图象');
- hold on;
- subplot(1,3,2);
- imshow(b);
- title('eyechart1.bmp截取部分');
- hold on;
- subplot(1,3,3);
- imshow(c);
- title('eyechart2.bmp截取部分');
- %*******************以下部分为计算截取图象area_eyechart1.bmp和area_eyechart1.bmp的PSNR、模糊系数、质量指数Q*
- % 本文件功能为对计算污染图象相对于源图象的质量
- clc;
- clear;
- PSNRenable=1;%PSNR计算使能,为0不计算,为1,计算
- KBlurenable=1;%模糊系数KBlur计算使能,为0不计算,为1,计算
- Qenable=1;%质量指数Q计算使能,为0不计算,为1,计算
- for m=1:2
- imsrcnamehead='area_eyechart3';%源图象文件名头
- imsrcnameext='bmp';%源图象文件名扩展
- if m==1 %以area_eyechart1.bmp为测试图象
- imdstname=strcat('area_eyechart1','.',imsrcnameext);%污染图象文件名,可修改
- elseif m==2%以area_eyechart2.bmp为测试图象
- imdstname=strcat('area_eyechart2','.',imsrcnameext);%污染图象文件名,可修改
- end
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- iminfo=imfinfo(strcat(imsrcnamehead,'.',imsrcnameext));%源图象信息读取
- imsrc=imread(strcat(imsrcnamehead,'.',imsrcnameext));%源图象读取
- imdst=imread(imdstname,imsrcnameext);%污染图象读取
- doubleimsrc=double(imsrc);%转换为浮点类型
- doubleimdst=double(imdst);%转换为浮点类型
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%源图象和污染图象读取
- W=iminfo.Width;%图象度
- H=iminfo.Height;%图象高
- %///////////////////PSNR计算/////////////////////////////////
- if PSNRenable==1
- PSNR=0.0;%PSNR赋初值
- for j=1:H
- for i=1:W
- PSNR=PSNR+double((doubleimsrc(j,i)-doubleimdst(j,i))*(doubleimsrc(j,i)-doubleimdst(j,i)));
- end
- end
- PSNR=PSNR/W/H;
- PSNR=10*log10(255*255/PSNR)
- %////////////////////PSNR计算完毕//////////////////////////////////
- end
- %///////////////////模糊系数KBlur计算/////////////////////////////////
- if KBlurenable==1
- Sin=0.0;%Sin赋初值
- Sout=0.0;
- for j=2:H-1
- for i=2:W-1
- t=doubleimsrc(j-1,i+1)+doubleimsrc(j+1,i-1)-doubleimsrc(j-1,i-1)-doubleimsrc(j+1,i+1);
- if t<0 t=-t;
- end
- Sin=Sin+t;%源图象邻域边缘能量计算
- t=doubleimdst(j-1,i+1)+doubleimdst(j+1,i-1)-doubleimdst(j-1,i-1)-doubleimdst(j+1,i+1);
- if t<0 t=-t;
- end
- Sout=Sout+t;%污染图象邻域边缘能量计算
- end
- end
- KBlur=Sout/Sin
- end
- %////////////////////KBlur计算完毕////////////////////////////////////////
- %///////////////////质量指数Q计算//////////////////////////////////////////
- if Qenable==1
- Q=0.0;%Q赋初值
- Qnum=0;%图象以7X7块大小计算每块的Q,逐象素的移动块窗口,这里Qnum为块数量的计数
- for j=4:H-3
- for i=4:W-3
- midsrc=0.0;
- middst=0.0;
- varsrc=0.0;
- vardst=0.0;%源图象和污染图象块内的平均值和方差赋初值
- varsrcdst=0.0;%源图象和污染图象块内的协方差赋初值
- for n=-3:3
- for m=-3:3
- midsrc=midsrc+doubleimsrc(j+n,i+m);
- middst=middst+doubleimdst(j+n,i+m);
- end
- end
- midsrc=midsrc/49;
- middst=middst/49;
- %源图象和污染图象块内的平均值计算
- for n=-3:3
- for m=-3:3
- varsrc=varsrc+(doubleimsrc(j+n,i+m)-midsrc)*(doubleimsrc(j+n,i+m)-midsrc);
- vardst=vardst+(doubleimdst(j+n,i+m)-middst)*(doubleimdst(j+n,i+m)-middst);
- varsrcdst=varsrcdst+(doubleimsrc(j+n,i+m)-midsrc)*(doubleimdst(j+n,i+m)-middst);
- end
- end
- varsrc=varsrc/48;
- vardst=vardst/48;
- varsrcdst=varsrcdst/48;
- if ((varsrc+vardst)*(midsrc*midsrc+middst*middst))~=0 %分母不为零的块才计算质量指数Q
- Q=Q+4*varsrcdst*midsrc*middst/((varsrc+vardst)*(midsrc*midsrc+middst*middst));
- %源图象和污染图象块内Q计算完毕
- Qnum=Qnum+1;%块计数加1
- end
- end
- end
- Q=Q/Qnum
- end
- %////////////////////质量指数Q计算完毕/////////////////////////////////////
- end
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%图象质量计算完毕
参考文献
[1]袁飞,黄联芬,姚彦,视频质量客观评价技术研究,标准、检测与仪器,2007(3):91-94
[2]黄文辉 ,陈仁雷 ,张家谋,数字视频图像质量客观测量方法的改进与实现,北京邮电大学学报,2005(4):87-90
[3]Zhou Wang, Hamid R.Sheikh , Alan C. Bovik,Objective video quality assessment(Chapter 41 in The Handbook of Video Databases: Design and Applications)., CRC Press, 2003(1041-1078)
转自:http://blog.csdn.net/droidpioneer/article/details/6612441
图像质量评价指标之Matlab实现的更多相关文章
- 图像质量评价指标之 PSNR 和 SSIM
1. PSNR (Peak Signal-to-Noise Ratio) 峰值信噪比 给定一个大小为 \(m×n\) 的干净图像 \(I\) 和噪声图像 \(K\),均方误差 \((MSE)\) 定义 ...
- 图像质量评价方法PSNR+SSIM&&评估指标SROCC,PLCC
update:2018-04-07 今天发现ssim的计算里面有高斯模糊,为了快速计算,先对每个小块进行计算,然后计算所有块的平均值.可以参考源代码实现,而且代码实现有近似的在里面!matlab中中图 ...
- MATLAB 均方根误差MSE、两图像的信噪比SNR、峰值信噪比PSNR、结构相似性SSIM
今天的作业是求两幅图像的MSE.SNR.PSNR.SSIM.代码如下: clc; close all; X = imread('q1.tif');% 读取图像 Y=imread('q2.tif'); ...
- 图像质量评价-NQM和WPSNR
王保全. 基于混合专家模型的快速图像超分辨率方法研究与实现[D]. 2015. PSNR 和SSIM 在有时候并不能很确切的表示图像质量 标准,该论文中根据一定量的人为的感知评分作为参考,用斯皮尔曼等 ...
- opencv-9-图像噪声以及评估指标 PSNR 与SSIM
开始之前 我们在将 opencv 的图像显示在了 qt 的label 上, 我们能够将图显示在label 上, 用于显示我们的算法, 我们在 opencv 上一篇文章中介绍了 opencv 的核操作, ...
- OpenCV进行图像相似度对比的几种办法
转载请注明出处:http://blog.csdn.net/wangyaninglm/article/details/43853435, 来自:shiter编写程序的艺术 对计算图像相似度的方法,本文做 ...
- SSIM (Structural SIMilarity) 结构相似性
公式基于样本x和 y 之间的三个比较衡量:亮度 (luminance).对比度 (contrast) 和结构 (structure). 每次计算的时候都从图片上取一个 N*N的窗口,然后不断滑动窗口进 ...
- MATLAB聚类有效性评价指标(外部 成对度量)
MATLAB聚类有效性评价指标(外部 成对度量) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多内容,请看:MATLAB: Clustering ...
- MATLAB聚类有效性评价指标(外部)
MATLAB聚类有效性评价指标(外部) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多内容,请看:MATLAB.聚类.MATLAB聚类有效性评价指 ...
随机推荐
- hdu 4632 Palindrome subsequence
http://acm.hdu.edu.cn/showproblem.php?pid=4632 简单DP 代码: #include<iostream> #include<cstdio& ...
- C# SQLiteDataReader获得数据库指定字段的值
获得数据库指定字段的值,赋给本地变量 (1)如下,获得userinfo数据表里的字段"userid"."orgid", string userid=" ...
- C#常用实例
1 時間 1.1 顯示在走的時間 控件:TextBox為顯示日期時間,命名為txtDateTimer Timer為時鐘,命名為time private void dtDateTimer_Tick(ob ...
- C++封装、继承、多态
C++封装继承多态总结 面向对象的三个基本特征 面向对象的三个基本特征是:封装.继承.多态.其中,封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类):它们的目的都是为了--代码重 ...
- Ubuntu根目录下各文件的功能介绍
http://jingyan.baidu.com/article/afd8f4de55189c34e286e9e6.html
- vs2013的使用和单元测试
我的vs2013是之前就安装好的,安装过程就不介绍了,我平常编写代码就是用的vs2013,用起来还是很方便的,现在我们就开始使用vs2013进行单元测试 首先我们建立一个项目,项目中选择virtual ...
- protected 和default的区别
default:包内可见,包外不可见 protected:包内可见,包外不可见,但是包外继承之后可见.
- (转)ASP.NET(C#) 读取EXCEL ——另加解决日期问题
使用OLEDB可以对excel文件进行读取,我们只要把该excel文件作为数据源即可. 一 在D盘创建excel文件test.xls: 二 将工作表Sheet1的内容读取到DataSet string ...
- <转>用thinkPHP实现验证码的功能
许多系统的登录都有验证码,而如果使用thinkPHP框架搭建网站的话,验证码的生成和验证就比较容易了 1.生成验证码 thinkPHP有对应生成验证码的方法 要使用验证码,需要导入扩展类库中的ORG. ...
- bind,call,apply区别
js中bind.call.apply函数的用法 2015-02-27 21:16:39 标签:javascript js bind call apply 原创作品,允许转载,转载时请务必以超链接形式 ...