图像质量评价指标之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聚类有效性评价指 ...
随机推荐
- WPF 画刷应用
纯色: SolidColorBrush brush = new SolidColorBrush(Colors.White); window1.Background = brush; 渐变色: Line ...
- 反Secure Boot垄断:兼谈如何在Windows 8电脑上安装Linux
感谢HQSQ的投递一.自由软件基金会的呼吁上周,2012年将近结束的时候,自由软件基金会(FSF)发出呼吁,要求人们继续支持反Secure Boot垄断,希望签名者能达到5万人(目前是4万).我觉得, ...
- K2认证考试,为竞争力加分
思科Cisco认证.ADOBE认证.微软认证.印度AIIT认证.华为认证.IBM认证等……在各种“证”满天飞的时候,如何独具慧眼选择最有含金量的证书? 八成 的人力资源主管会检查求职者的认证情况.(C ...
- git 克隆项目 与 分支简单操作
git clone http://abcde.com/myproject/abc.git 克隆远程项目到本地githome文件夹git branch -a 查看所有分支 包括远程和本地 *号开头表示当 ...
- HTML--10Jquery
在<网页制作Dreamweaver(悬浮动态分层导航)>中,运用到了jQuery的技术,轻松实现了菜单的下拉.显示.隐藏的效果,不必再用样式表一点点地修改,省去了很多麻烦,那么jQuery ...
- 2013年国庆节前51Aspx源码发布详情
Sky软件公司网站修正版源码 2013-9-30 [VS2010]源码描述:针对Sky软件公司网站源码进行修正.修改ckeditor引用问题,发布样式错误问题.vs2010直接编译.发布成功. 网站 ...
- type safe printf
在书里看到的,摘录如下: #include <iostream> #include <stdexcept> template<class T> struct is_ ...
- javascript笔记4-函数表达式
一般形式的创建函数,在执行代码之前会先读取函数声明,所以可以把函数声明写在函数调用的下面: sayHi(); function sayHi(){ alert("Hi!"); } 使 ...
- Native VS H5 VS React Native
现在软件行业已经跨入大前端时代,所以势必学一点前端的知识.本来移动端开发都是使用各自平台的语言,如iOS端使用OC,swift:Android使用java,但是随着H5的出现,导致移动端Native出 ...
- 自从学了SQL编程,哪里不会点哪里!!!
在学习SQL编程前,先给大家分享几个段子吧,咱先乐呵乐呵! <桃花庵--程序员版> 写字楼里写字间,写字间中程序员:程序人员写程序,又将程序换酒钱: 酒醒只在屏前坐,酒醉还来屏下眠:酒醉酒 ...