图像质量评价指标之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聚类有效性评价指 ...
随机推荐
- POJ 2965 The Pilots Brothers' refrigerator 暴力 难度:1
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16868 ...
- 快餐问题(dp好题)
Peter最近在R市开了一家快餐店,为了招揽顾客,该快餐店准备推出一种套餐,该套餐由A个 汉堡,B个薯条和C个饮料组成.价格便宜.为了提高产量,Peter从著名的麦当劳公司引进了N条 生产线.所有的生 ...
- https://docs.mongodb.org/manual/reference/operator/aggregation/unwind/#examples
https://docs.mongodb.org/manual/reference/operator/aggregation/unwind/#examples http://www.clusterdb ...
- URAL 1519 基础插头DP
题目大意: 给定一个图,一部分点'*'作为障碍物,求经过所有非障碍点的汉密尔顿回路有多少条 基础的插头DP题目,对于陈丹琦的论文来说我觉得http://blog.sina.com.cn/s/blog_ ...
- CSU 1160 A(Contest #3)
Description 把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示. Input 每行一个整数x,0<= x <= 2^31. Output 每行输出对应的 ...
- 恢复drop数据
select * from recyclebin r where r.original_name = 'MSM_EXAINVITEBIDSCHEMEHEAD' ; flashback table MS ...
- 框架之 spring
spring有两大特性,其一为ioc,其二为aop 1.ioc的理解 ioc为依赖注入,他的好处就是把创建对象的权利交给spring去管理,这样的好处是 将应用程序中的对象解耦,传统的方式程序中的对象 ...
- MJPhotoBrowser 两个bug:回到小图模式时会闪动&大图太靠近底部
最近项目需要写网络的相片视频浏览的库, 没时间重写,使用了MJPhotoBrowser,里面的一些bug 和解决写在下面 1.-[MJPhotoLoadingView setProgress:]: m ...
- mine layer(2008 World Final C)
类似于扫雷游戏,在一些格子中散布着一些地雷,具体的埋藏位置并不清楚,但知道每个格子及其周围八个格子的地雷总数.请问此时正中间那一行最多可能有多少地雷(题目假定所有的输入都是奇数行的)? 输入: 第一行 ...
- iOS线程
昨天在项目中使用到了以前所没有使用过的线程,今天有时间来简单的学习一下. 一.线程的创建分为三种方法 (id)init; // designated initializer (id)initWithT ...