matlab图像质量评价程序,图像质量评价指标之Matlab实现

matlab图像质量评价程序,图像质量评价指标之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);
dst指数
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)

本文发布于:2024-09-21 17:23:09,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/379294.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:图象   质量   计算
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议