图像质量评价指标之Matlab实现

在图像处理算法研究中,很多时候需要有客观评价指标来对算法的性能进行评价。

比如,在图像复原、图像滤波算法研究中,需要采用客观评价指标来定量的来测试算法恢复出的图像相对于参考图像的好坏程度。

本文介绍文献中提到到三个比较好的客观评价指标——峰值性噪比PSNR、模糊系数K、质量因素Q,其定义分别是:

这三个指标的详细定义见参考文献[1]~[3],下面给出这三个评价指标的MatLab实现。

[html] view plaincopy

  1. %说明:本文件为计算两幅视频图象相对于高清晰图象的质量,其中:
  2. %eyechart1.bmp为未处理前质量较差图象,核心区域的截图保存为area_eyechart1.bmp
  3. %eyechart2.bmp为某种算法处理后质量较好图象,核心区域的截图保存为area_eyechart2.bmp
  4. %eyechart3.bmp为高清晰参考图象,核心区域的截图保存为area_eyechart3.bmp
  5. %程序流程为
  6. %第一步:先分别从eyechart1.bmp、eyechart2.bmp、eyechart3.bmp中截取出核心区域,并分别保存为area_eyechart1.bmp、area_eyechart1.bmp、area_eyechart3.bmp
  7. %第二步:以area_eyechart3.bmp为参考图象,计算area_eyechart1.bmp的PSNR、模糊系数KBlur、质量指数Q
  8. %第三步:以area_eyechart3.bmp为参考图象,计算area_eyechart2.bmp的PSNR、模糊系数KBlur、质量指数Q
  9. %程序可直接运行,运行结果为:
  10. %1.保存并显示生成的截图文件area_eyechart1.bmp、area_eyechart1.bmp、area_eyechart3.bmp
  11. %2、在控制台先显示第二步的计算结果,即area_eyechart1.bmp的三个质量指标,然后接着显示第三步的计算结果,即area_eyechart2.bmp的三个质量指标
  12. %运行结果分析:area_eyechart2.bmp的PSNR和质量指数Q高,表明其质量较好,而area_eyechart1.bmp的模糊系数KBlur较大
  13. %这是因为其有很多噪声被当着了边缘能量来计算,这也从一个方面说明模糊系数KBlur的应用具有局限性,但前者KBlur>1,后者<1,理论上只有模糊的情况下
  14. %KBlur是<=1的,这也可根据KBlur与1的关系来判定图象收噪声污染的程度.
  15. %******************从eyechart1.bmp,eyechart2.bmp两个文件中截取测试图象区域,可保证两图象截取的区域严格对准*****
  16. a=imread(‘eyechart1.bmp‘,‘bmp‘);
  17. b=a([203:396],[249:440]);
  18. a=imread(‘eyechart2.bmp‘,‘bmp‘);
  19. c=a([203:396],[249:440]);
  20. %*******************从eyechart3.bmp中截取测试参考图象,截取部分需要进行缩放,使之与eyechart1.bmp,eyechart2.bmp截取部分大小匹配*******************************************************************
  21. a=imread(‘eyechart3.bmp‘,‘bmp‘);
  22. d=a([62:406],[60:395]);
  23. e=imresize(d,[length(b(:,1)),length(b(1,:))], ‘bicubic‘);%由于eyechart3.bmp和eyechart1.bmp,eyechart2.bmp比例不一样,这里要进行比例调整
  24. imwrite(b,‘area_eyechart1.bmp‘,‘bmp‘);
  25. imwrite(c,‘area_eyechart2.bmp‘,‘bmp‘);
  26. imwrite(e,‘area_eyechart3.bmp‘,‘bmp‘);
  27. subplot(1,3,1);
  28. imshow(e);
  29. title(‘eyechart3.bmp截取部分,参考图象‘);
  30. hold on;
  31. subplot(1,3,2);
  32. imshow(b);
  33. title(‘eyechart1.bmp截取部分‘);
  34. hold on;
  35. subplot(1,3,3);
  36. imshow(c);
  37. title(‘eyechart2.bmp截取部分‘);
  38. %*******************以下部分为计算截取图象area_eyechart1.bmp和area_eyechart1.bmp的PSNR、模糊系数、质量指数Q*
  39. % 本文件功能为对计算污染图象相对于源图象的质量
  40. clc;
  41. clear;
  42. PSNRenable=1;%PSNR计算使能,为0不计算,为1,计算
  43. KBlurenable=1;%模糊系数KBlur计算使能,为0不计算,为1,计算
  44. Qenable=1;%质量指数Q计算使能,为0不计算,为1,计算
  45. for m=1:2
  46. imsrcnamehead=‘area_eyechart3‘;%源图象文件名头
  47. imsrcnameext=‘bmp‘;%源图象文件名扩展
  48. if m==1 %以area_eyechart1.bmp为测试图象
  49. imdstname=strcat(‘area_eyechart1‘,‘.‘,imsrcnameext);%污染图象文件名,可修改
  50. elseif m==2%以area_eyechart2.bmp为测试图象
  51. imdstname=strcat(‘area_eyechart2‘,‘.‘,imsrcnameext);%污染图象文件名,可修改
  52. end
  53. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  54. iminfo=imfinfo(strcat(imsrcnamehead,‘.‘,imsrcnameext));%源图象信息读取
  55. imsrc=imread(strcat(imsrcnamehead,‘.‘,imsrcnameext));%源图象读取
  56. imdst=imread(imdstname,imsrcnameext);%污染图象读取
  57. doubleimsrc=double(imsrc);%转换为浮点类型
  58. doubleimdst=double(imdst);%转换为浮点类型
  59. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%源图象和污染图象读取
  60. W=iminfo.Width;%图象度
  61. H=iminfo.Height;%图象高
  62. %///////////////////PSNR计算/////////////////////////////////
  63. if PSNRenable==1
  64. PSNR=0.0;%PSNR赋初值
  65. for j=1:H
  66. for i=1:W
  67. PSNR=PSNR+double((doubleimsrc(j,i)-doubleimdst(j,i))*(doubleimsrc(j,i)-doubleimdst(j,i)));
  68. end
  69. end
  70. PSNR=PSNR/W/H;
  71. PSNR=10*log10(255*255/PSNR)
  72. %////////////////////PSNR计算完毕//////////////////////////////////
  73. end
  74. %///////////////////模糊系数KBlur计算/////////////////////////////////
  75. if KBlurenable==1
  76. Sin=0.0;%Sin赋初值
  77. Sout=0.0;
  78. for j=2:H-1
  79. for i=2:W-1
  80. t=doubleimsrc(j-1,i+1)+doubleimsrc(j+1,i-1)-doubleimsrc(j-1,i-1)-doubleimsrc(j+1,i+1);
  81. if t<0 t=-t;
  82. end
  83. Sin=Sin+t;%源图象邻域边缘能量计算
  84. t=doubleimdst(j-1,i+1)+doubleimdst(j+1,i-1)-doubleimdst(j-1,i-1)-doubleimdst(j+1,i+1);
  85. if t<0 t=-t;
  86. end
  87. Sout=Sout+t;%污染图象邻域边缘能量计算
  88. end
  89. end
  90. KBlur=Sout/Sin
  91. end
  92. %////////////////////KBlur计算完毕////////////////////////////////////////
  93. %///////////////////质量指数Q计算//////////////////////////////////////////
  94. if Qenable==1
  95. Q=0.0;%Q赋初值
  96. Qnum=0;%图象以7X7块大小计算每块的Q,逐象素的移动块窗口,这里Qnum为块数量的计数
  97. for j=4:H-3
  98. for i=4:W-3
  99. midsrc=0.0;
  100. middst=0.0;
  101. varsrc=0.0;
  102. vardst=0.0;%源图象和污染图象块内的平均值和方差赋初值
  103. varsrcdst=0.0;%源图象和污染图象块内的协方差赋初值
  104. for n=-3:3
  105. for m=-3:3
  106. midsrc=midsrc+doubleimsrc(j+n,i+m);
  107. middst=middst+doubleimdst(j+n,i+m);
  108. end
  109. end
  110. midsrc=midsrc/49;
  111. middst=middst/49;
  112. %源图象和污染图象块内的平均值计算
  113. for n=-3:3
  114. for m=-3:3
  115. varsrc=varsrc+(doubleimsrc(j+n,i+m)-midsrc)*(doubleimsrc(j+n,i+m)-midsrc);
  116. vardst=vardst+(doubleimdst(j+n,i+m)-middst)*(doubleimdst(j+n,i+m)-middst);
  117. varsrcdst=varsrcdst+(doubleimsrc(j+n,i+m)-midsrc)*(doubleimdst(j+n,i+m)-middst);
  118. end
  119. end
  120. varsrc=varsrc/48;
  121. vardst=vardst/48;
  122. varsrcdst=varsrcdst/48;
  123. if ((varsrc+vardst)*(midsrc*midsrc+middst*middst))~=0 %分母不为零的块才计算质量指数Q
  124. Q=Q+4*varsrcdst*midsrc*middst/((varsrc+vardst)*(midsrc*midsrc+middst*middst));
  125. %源图象和污染图象块内Q计算完毕
  126. Qnum=Qnum+1;%块计数加1
  127. end
  128. end
  129. end
  130. Q=Q/Qnum
  131. end
  132. %////////////////////质量指数Q计算完毕/////////////////////////////////////
  133. end
  134. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%图象质量计算完毕

参考文献

[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

时间: 2024-08-23 23:12:07

图像质量评价指标之Matlab实现的相关文章

图像质量评价指标之 PSNR 和 SSIM

1. PSNR (Peak Signal-to-Noise Ratio) 峰值信噪比 给定一个大小为 \(m×n\) 的干净图像 \(I\) 和噪声图像 \(K\),均方误差 \((MSE)\) 定义为: \[MSE = \frac{1}{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}[I(i, j)-K(i,j)]^2\] 然后 \(PSNR (dB)\) 就定义为: \[PSNR = 10 \cdot log_{10}(\frac{MAX_I^2}{MSE})\] 其

OpenCV进行图像相似度对比的几种办法

对计算图像相似度的方法,本文做了如下总结,主要有三种办法: 1.PSNR(Peak Signal to Noise Ratio)峰值信噪比,一种全参考的图像质量评价指标. 简介: http://www.cnblogs.com/vincent2012/archive/2012/10/13/2723152.html PSNR是最普遍和使用最为广泛的一种图像客观评价指标,然而它是基于对应像素点间的误差,即基于误差敏感的图像质量评价.由于并未考虑到人眼的视觉特性(人眼对空间频率较低的对比差异敏感度较高,

图像清晰度的评价及分析

图像清晰度的评价及分析 2016年07月28日 17:54:22 clxiaoclxiao 阅读数:17963更多 个人分类: opencv 在无参考图像的质量评价中,图像的清晰度是衡量图像质量优劣的重要指标,它能够较好的与人的主观感受相对应,图像的清晰度不高表现出图像的模糊.本文针对无参考图像质量评价应用,对目前几种较为常用的.具有代表性清晰度算法进行讨论分析,为实际应用中选择清晰度算法提供依据. (1)Brenner 梯度函数 Brenner梯度函数是最简单的梯度评价函数,它只是简单的计算相

显著性检测(saliency detection)评价指标之KL散度距离Matlab代码实现

步骤1:先定义KLdiv函数: function score = KLdiv(saliencyMap, fixationMap) % saliencyMap is the saliency map % fixationMap is the human fixation map map1 = im2double(imresize(saliencyMap, size(fixationMap))); map2 = im2double(fixationMap); % make sure map1 and

图像质量评价

1.PSNR,峰值信噪比 通常用来评价一幅图像压缩后和原图像相比质量的好坏,当然,压缩后图像一定会比原图像质量差的,所以就用这样一个评价指标来规定标准了.PSNR越高,压缩后失真越小.这里主要定义了两个值,一个是均方差MSE,另一个是峰值信噪比PSNR,公式如下: 这里的MAX通常是图像的灰度级,一般就是255了. close all; clear all; clc; img=imread('lena.jpg'); [h w]=size(img); imgn=imresize(img,[floo

matlab实现PSNR

目录 1.PSNR原理 2.PSNR的matlab实现代码 3.针对彩色图像的PSNR的matlab代码 @ 1.PSNR原理 PSNR,峰值信噪比,通常用来评价一幅图像压缩后和原图像相比质量的好坏,当然,压缩后图像一定会比原图像质量差的,所以就用这样一个评价指标来规定标准了.PSNR越高,压缩后失真越小.这里主要定义了两个值,一个是均方差MSE,另一个是峰值信噪比PSNR,公式如下: 这里的MAX通常是图像的灰度级,一般就是255了. 2.PSNR的matlab实现代码 将图像缩小再放大比较一

PCA and kmeans MATLAB实现

MATLAB基础知识 l  Imread:  读取图片信息: l  axis:轴缩放:axis([xmin xmax ymin ymax zmin zmax cmin cmax]) 设置 x.y 和 z 轴范围以及颜色缩放范围(请参阅 caxis).v = axis 返回包含 x.y 和 z 轴缩放因子的行矢量.v 具有 4 或 6 个分量,具体分别取决于当前坐标轴是二维还是三维.返回值是当前坐标轴的 XLim.Ylim 和 ZLim 属性.   基于 x.y 和 z 数据的最小值和最大值,ax

Matlab图像处理常用基本函数

之前用Matlab做图像处理工作时,用到什么函数就查什么函数,从没做过系统的总结,再做的时候又要去查,所以总结还是有必要的~ 为了方便,在此只列出函数名和基本用法,如不特别指出,不详细说明参数,辅助help和doc 争取持续更新~ ********************************正文分割线************************************* 图像读入 需求 函数 说明 从某一路径读入图片 f = imread(FILENAME) 默认为当前搜索路径包括当前路

一种基于FSIM对视频编码图像质量客观评价的方法

一 为什么对视频编码图像质量客观评价     视频图像质量主观评价一般采用连续双激励质量度量法对任一观测者连续给出原始视频图像和处理过的失真图像,由观测者根据主观感知给出分值,其需针对多个视频对象进行多次重复实验,耗时多.费用高,难以操作:而视频编码图像的客观评价早期主要采用峰值信噪比(PSNR)或均方差(MSE)衡量视频序列的失真度,虽然其具有操作简单.成本低.易于实现的特点,但是由于其忽略了图像内容对人眼的影响,不能完整地反映出图像的质量.所以现实中还是多以主观评价方式为主的,码率影响视频请