您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 医学现状与发展 > matlab图像处理
在图像处理算法研究中,很多时候需要有客观评价指标来对算法的性能进行评价。比如,在图像复原、图像滤波算法研究中,需要采用客观评价指标来定量的来测试算法恢复出的图像相对于参考图像的好坏程度。本文介绍文献中提到到三个比较好的客观评价指标——峰值性噪比PSNR、模糊系数K、质量因素Q,其定义分别是:这三个指标的详细定义见参考文献[1]~[3],下面给出这三个评价指标的MatLab实现。viewplain%说明:本文件为计算两幅视频图象相对于高清晰图象的质量,其中:%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的应用具有局限性,但前者KBlur1,后者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截取部分,参考图象');holdon;subplot(1,3,2);imshow(b);title('eyechart1.bmp截取部分');holdon;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,计算form=1:2imsrcnamehead='area_eyechart3';%源图象文件名头imsrcnameext='bmp';%源图象文件名扩展ifm==1%以area_eyechart1.bmp为测试图象imdstname=strcat('area_eyechart1','.',imsrcnameext);%污染图象文件名,可修改elseifm==2%以area_eyechart2.bmp为测试图象imdstname=strcat('area_eyechart2','.',imsrcnameext);%污染图象文件名,可修改end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%iminfo=imfinfo(strcat(imsrcnamehead,'.',imsrcnameext));%源图象信息读取imsrc=imread(strcat(imsrcnamehead,'.',imsrcnameext));%源图象读取imdst=imread(imdstname,imsrcnameext);%污染图象读取doubledoubleimsrc=double(imsrc);%转换为浮点类型doubledoubleimdst=double(imdst);%转换为浮点类型%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%源图象和污染图象读取W=iminfo.Width;%图象度H=iminfo.Height;%图象高%///////////////////PSNR计算/////////////////////////////////ifPSNRenable==1PSNR=0.0;%PSNR赋初值forj=1:Hfori=1:WPSNRPSNR=PSNR+double((doubleimsrc(j,i)-doubleimdst(j,i))*(doubleimsrc(j,i)-doubleimdst(j,i)));endendPSNRPSNR=PSNR/W/H;PSNR=10*log10(255*255/PSNR)%////////////////////PSNR计算完毕//////////////////////////////////end%///////////////////模糊系数KBlur计算/////////////////////////////////ifKBlurenable==1Sin=0.0;%Sin赋初值Sout=0.0;forj=2:H-1fori=2:W-1t=doubleimsrc(j-1,i+1)+doubleimsrc(j+1,i-1)-doubleimsrc(j-1,i-1)-doubleimsrc(j+1,i+1);ift0t=-t;endSinSin=Sin+t;%源图象邻域边缘能量计算t=doubleimdst(j-1,i+1)+doubleimdst(j+1,i-1)-doubleimdst(j-1,i-1)-doubleimdst(j+1,i+1);ift0t=-t;endSoutSout=Sout+t;%污染图象邻域边缘能量计算endendKBlur=Sout/Sinend%////////////////////KBlur计算完毕////////////////////////////////////////%///////////////////质量指数Q计算//////////////////////////////////////////ifQenable==1Q=0.0;%Q赋初值Qnum=0;%图象以7X7块大小计算每块的Q,逐象素的移动块窗口,这里Qnum为块数量的计数forj=4:H-3fori=4:W-3midsrc=0.0;middst=0.0;varsrc=0.0;vardst=0.0;%源图象和污染图象块内的平均值和方差赋初值varsrcdst=0.0;%源图象和污染图象块内的协方差赋初值forn=-3:3form=-3:3midsrcmidsrc=midsrc+doubleimsrc(j+n,i+m);middstmiddst=middst+doubleimdst(j+n,i+m);endendmidsrcmidsrc=midsrc/49;middstmiddst=middst/49;%源图象和污染图象块内的平均值计算forn=-3:3form=-3:3varsrcvarsrc=varsrc+(doubleimsrc(j+n,i+m)-midsrc)*(doubleimsrc(j+n,i+m)-midsrc);vardstvardst=vardst+(doubleimdst(j+n,i+m)-middst)*(doubleimdst(j+n,i+m)-middst);varsrcdstvarsrcdst=varsrcdst+(doubleimsrc(j+n,i+m)-midsrc)*(doubleimdst(j+n,i+m)-middst);endendvarsrcvarsrc=varsrc/48;vardstvardst=vardst/48;varsrcdstvarsrcdst=varsrcdst/48
本文标题:matlab图像处理
链接地址:https://www.777doc.com/doc-7506470 .html