图像质量评价

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

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

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

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

[html]  view plain copy
  1. %说明:本文件为计算两幅视频图象相对于高清晰图象的质量,其中:  
  2.   
  3. %eyechart1.bmp为未处理前质量较差图象,核心区域的截图保存为area_eyechart1.bmp  
  4.   
  5. %eyechart2.bmp为某种算法处理后质量较好图象,核心区域的截图保存为area_eyechart2.bmp  
  6.   
  7. %eyechart3.bmp为高清晰参考图象,核心区域的截图保存为area_eyechart3.bmp  
  8.   
  9.    
  10.   
  11. %程序流程为  
  12.   
  13. %第一步:先分别从eyechart1.bmp、eyechart2.bmp、eyechart3.bmp中截取出核心区域,并分别保存为area_eyechart1.bmp、area_eyechart1.bmp、area_eyechart3.bmp  
  14.   
  15. %第二步:以area_eyechart3.bmp为参考图象,计算area_eyechart1.bmp的PSNR、模糊系数KBlur、质量指数Q  
  16.   
  17. %第三步:以area_eyechart3.bmp为参考图象,计算area_eyechart2.bmp的PSNR、模糊系数KBlur、质量指数Q  
  18.   
  19.    
  20.   
  21. %程序可直接运行,运行结果为:  
  22.   
  23. %1.保存并显示生成的截图文件area_eyechart1.bmp、area_eyechart1.bmp、area_eyechart3.bmp  
  24.   
  25. %2、在控制台先显示第二步的计算结果,即area_eyechart1.bmp的三个质量指标,然后接着显示第三步的计算结果,即area_eyechart2.bmp的三个质量指标  
  26.   
  27.    
  28.   
  29. %运行结果分析:area_eyechart2.bmp的PSNR和质量指数Q高,表明其质量较好,而area_eyechart1.bmp的模糊系数KBlur较大  
  30.   
  31. %这是因为其有很多噪声被当着了边缘能量来计算,这也从一个方面说明模糊系数KBlur的应用具有局限性,但前者KBlur>1,后者<1,理论上只有模糊的情况下  
  32.   
  33. %KBlur是<=1的,这也可根据KBlur与1的关系来判定图象收噪声污染的程度.  
  34.   
  35.    
  36.   
  37. %******************从eyechart1.bmp,eyechart2.bmp两个文件中截取测试图象区域,可保证两图象截取的区域严格对准*****  
  38.   
  39. a=imread('eyechart1.bmp','bmp');  
  40.   
  41. b=a([203:396],[249:440]);  
  42.   
  43. a=imread('eyechart2.bmp','bmp');  
  44.   
  45. c=a([203:396],[249:440]);  
  46.   
  47.    
  48.   
  49. %*******************从eyechart3.bmp中截取测试参考图象,截取部分需要进行缩放,使之与eyechart1.bmp,eyechart2.bmp截取部分大小匹配*******************************************************************  
  50.   
  51. a=imread('eyechart3.bmp','bmp');  
  52.   
  53. d=a([62:406],[60:395]);  
  54.   
  55. e=imresize(d,[length(b(:,1)),length(b(1,:))], 'bicubic');%由于eyechart3.bmp和eyechart1.bmp,eyechart2.bmp比例不一样,这里要进行比例调整  
  56.   
  57. imwrite(b,'area_eyechart1.bmp','bmp');  
  58.   
  59. imwrite(c,'area_eyechart2.bmp','bmp');  
  60.   
  61. imwrite(e,'area_eyechart3.bmp','bmp');  
  62.   
  63.    
  64.   
  65. subplot(1,3,1);  
  66.   
  67. imshow(e);  
  68.   
  69. title('eyechart3.bmp截取部分,参考图象');  
  70.   
  71. hold on;  
  72.   
  73. subplot(1,3,2);  
  74.   
  75. imshow(b);  
  76.   
  77. title('eyechart1.bmp截取部分');  
  78.   
  79. hold on;  
  80.   
  81. subplot(1,3,3);  
  82.   
  83. imshow(c);  
  84.   
  85. title('eyechart2.bmp截取部分');  
  86.   
  87. %*******************以下部分为计算截取图象area_eyechart1.bmp和area_eyechart1.bmp的PSNR、模糊系数、质量指数Q*  
  88.   
  89. % 本文件功能为对计算污染图象相对于源图象的质量  
  90.   
  91. clc;  
  92.   
  93. clear;  
  94.   
  95. PSNRenable=1;%PSNR计算使能,为0不计算,为1,计算  
  96.   
  97. KBlurenable=1;%模糊系数KBlur计算使能,为0不计算,为1,计算  
  98.   
  99. Qenable=1;%质量指数Q计算使能,为0不计算,为1,计算  
  100.   
  101.    
  102.   
  103. for m=1:2  
  104.   
  105. imsrcnamehead='area_eyechart3';%源图象文件名头  
  106.   
  107. imsrcnameext='bmp';%源图象文件名扩展  
  108.   
  109. if m==1 %以area_eyechart1.bmp为测试图象  
  110.   
  111. imdstname=strcat('area_eyechart1','.',imsrcnameext);%污染图象文件名,可修改  
  112.   
  113. elseif m==2%以area_eyechart2.bmp为测试图象  
  114.   
  115.   imdstname=strcat('area_eyechart2','.',imsrcnameext);%污染图象文件名,可修改  
  116.   
  117. end  
  118.   
  119. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
  120.   
  121. iminfo=imfinfo(strcat(imsrcnamehead,'.',imsrcnameext));%源图象信息读取  
  122.   
  123. imsrc=imread(strcat(imsrcnamehead,'.',imsrcnameext));%源图象读取  
  124.   
  125. imdst=imread(imdstname,imsrcnameext);%污染图象读取  
  126.   
  127. doubleimsrc=double(imsrc);%转换为浮点类型  
  128.   
  129. doubleimdst=double(imdst);%转换为浮点类型  
  130.   
  131. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%源图象和污染图象读取  
  132.   
  133. W=iminfo.Width;%图象度  
  134.   
  135. H=iminfo.Height;%图象高  
  136.   
  137. %///PSNR计算/  
  138.   
  139. if PSNRenable==1  
  140.   
  141. PSNR=0.0;%PSNR赋初值  
  142.   
  143. for j=1:H  
  144.   
  145.   for i=1:W  
  146.   
  147.       PSNR=PSNR+double((doubleimsrc(j,i)-doubleimdst(j,i))*(doubleimsrc(j,i)-doubleimdst(j,i)));  
  148.   
  149.   end  
  150.   
  151. end  
  152.   
  153. PSNR=PSNR/W/H;  
  154.   
  155. PSNR=10*log10(255*255/PSNR)  
  156.   
  157. %PSNR计算完毕//  
  158.   
  159. end  
  160.   
  161. %///模糊系数KBlur计算/  
  162.   
  163. if KBlurenable==1  
  164.   
  165. Sin=0.0;%Sin赋初值  
  166.   
  167. Sout=0.0;  
  168.   
  169. for j=2:H-1  
  170.   
  171.   for i=2:W-1  
  172.   
  173.       t=doubleimsrc(j-1,i+1)+doubleimsrc(j+1,i-1)-doubleimsrc(j-1,i-1)-doubleimsrc(j+1,i+1);  
  174.   
  175.       if t<0 t=-t;  
  176.   
  177.       end  
  178.   
  179.       Sin=Sin+t;%源图象邻域边缘能量计算  
  180.   
  181.       t=doubleimdst(j-1,i+1)+doubleimdst(j+1,i-1)-doubleimdst(j-1,i-1)-doubleimdst(j+1,i+1);  
  182.   
  183.       if t<0 t=-t;  
  184.   
  185.       end  
  186.   
  187.       Sout=Sout+t;%污染图象邻域边缘能量计算  
  188.   
  189.   end  
  190.   
  191. end  
  192.   
  193. KBlur=Sout/Sin  
  194.   
  195. end  
  196.   
  197. %KBlur计算完毕  
  198.   
  199.    
  200.   
  201. %///质量指数Q计算//  
  202.   
  203. if Qenable==1  
  204.   
  205. Q=0.0;%Q赋初值  
  206.   
  207. Qnum=0;%图象以7X7块大小计算每块的Q,逐象素的移动块窗口,这里Qnum为块数量的计数  
  208.   
  209. for j=4:H-3  
  210.   
  211.   for i=4:W-3  
  212.   
  213.       midsrc=0.0;  
  214.   
  215.       middst=0.0;  
  216.   
  217.       varsrc=0.0;  
  218.   
  219.       vardst=0.0;%源图象和污染图象块内的平均值和方差赋初值  
  220.   
  221.       varsrcdst=0.0;%源图象和污染图象块内的协方差赋初值  
  222.   
  223.       for n=-3:3  
  224.   
  225.           for m=-3:3  
  226.   
  227.               midsrc=midsrc+doubleimsrc(j+n,i+m);  
  228.   
  229.               middst=middst+doubleimdst(j+n,i+m);  
  230.   
  231.           end  
  232.   
  233.       end  
  234.   
  235.       midsrc=midsrc/49;  
  236.   
  237.       middst=middst/49;  
  238.   
  239.       %源图象和污染图象块内的平均值计算  
  240.   
  241.       for n=-3:3  
  242.   
  243.           for m=-3:3  
  244.   
  245.              varsrc=varsrc+(doubleimsrc(j+n,i+m)-midsrc)*(doubleimsrc(j+n,i+m)-midsrc);  
  246.   
  247.              vardst=vardst+(doubleimdst(j+n,i+m)-middst)*(doubleimdst(j+n,i+m)-middst);  
  248.   
  249.              varsrcdst=varsrcdst+(doubleimsrc(j+n,i+m)-midsrc)*(doubleimdst(j+n,i+m)-middst);  
  250.   
  251.           end  
  252.   
  253.       end  
  254.   
  255.       varsrc=varsrc/48;  
  256.   
  257.       vardst=vardst/48;  
  258.   
  259.       varsrcdst=varsrcdst/48;  
  260.   
  261.       if ((varsrc+vardst)*(midsrc*midsrc+middst*middst))~=0 %分母不为零的块才计算质量指数Q  
  262.   
  263.       Q=Q+4*varsrcdst*midsrc*middst/((varsrc+vardst)*(midsrc*midsrc+middst*middst));  
  264.   
  265.       %源图象和污染图象块内Q计算完毕  
  266.   
  267.       Qnum=Qnum+1;%块计数加1  
  268.   
  269.       end  
  270.   
  271.   end  
  272.   
  273. end  
  274.   
  275. Q=Q/Qnum  
  276.   
  277. end  
  278.   
  279. %质量指数Q计算完毕/  
  280.   
  281. end  
  282.   
  283. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%图象质量计算完毕  

参考文献

[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


SSIM参数
一种衡量两幅图像相似度的新指标,其值越大越好,最大为1,
经常用到图像处理中,特别在 图像去噪处理中在图像相似度评价上全面超越SNR(signal to noise ratio)和PSNR(peak signal to noise ratio)。
结构相似性理论认为,自然图像信号是高度结构化的,即像素间有很强的相关性,特别是空域中最接近的像素,这种相关性蕴含着视觉场景中物体结构的重要信息;HVS的主要功能是从视野中提取结构信息,可以用对结构信息的度量作为图像感知质量的近似。结构相似性理论是一种不同于以往模拟HVS低阶的组成结构的全新思想,与基于HVS特性的方法相比,最大的区别是自顶向下与自底向上的区别。这一新思想的关键是从对感知 误差度量到对感知结构失真度量的转变。它没有试图通过累加与心理物理学简单认知模式有关的误差来估计图像质量,而是直接估计两个复杂结构信号的结构改变,从而在某种程度上绕开了自然图像内容复杂性及多通道去相关的问题。
作为结构相似性理论的实现,结构相似度指数从图像组成的角度将结构信息定义为独立于 亮度对比度的,反映场景中物体结构的属性,并将失真建模为亮度、对比度和结构三个不同因素的组合。用 均值作为亮度的估计,标准差作为 对比度的估计, 协方差作为结构相似程度的度量。
--------------------------------------------------------------------------------------------
结构相似性 指标 (英文: structural similarity  index, SSIM  index)是一种用以衡量两张 数位影像 相似程度的指标。当两张影像其中一张为无 失真 影像,另一张为 失真 后的影像,二者的 结构相似性 可以看成是失真影像的影像品质衡量指标。相较于传统所使用的影像品质衡量指标,像是 峰值信噪比 (英文: PSNR ), 结构相似性 在影像品质的衡量上更能符合人眼对影像品质的判断

实际使用时,简化起见,一般会将参数设为\alpha=\beta=\gamma=1C_3=C_2/2,得到:

\text{SSIM}(\mathbf{x},\mathbf{y})=\frac{(2\mu_x\mu_y+C_1)(2\sigma_{xy}+C_2)}{(\mu_x^2+\mu_y^2+C_1)(\sigma_x^2+\sigma_y^2+C_2)}

在计算两张影像的结构相似性指标时,会开一个局部性的视窗,一般为N×N的小区块,计算出视窗内信号的结构相似性指标,每次以像素为单位移动视窗,直到整张影像每个位置的局部结构相似性指标都计算完毕。将全部的局部结构相似性指标平均起来即为两张影像的结构相似性指标。

摘自:http://blog.sina.com.cn/s/blog_70a336750101m508.html




ssim算法的matlab代码

---转载 http://bbs.blackbap.org/thread-2742-1-1.html
function [mssim, ssim_map] = ssim(img1, img2, K, window, L)

%
%Input : (1) img1: the first image being compared
            (2) img2: the second image being compared
            (3) K: constants in the SSIM index formula (see the above
                  reference). defualt value: K = [0.01 0.03]
            (4) window: local window for statistics (see the above
                  reference). default widnow is Gaussian given by
                  window = fspecial('gaussian', 11, 1.5);
            (5) L: dynamic range of the images. default: L = 255
%
%Output: (1) mssim: the mean SSIM index value between 2 images.
                  If one of the images being compared is regarded as
                  perfect quality, then mssim can be considered as the
                  quality measure of the other image.
                  If img1 = img2, then mssim = 1.
            (2) ssim_map: the SSIM index map of the test image. The map
                  has a smaller size than the input images. The actual size
                  depends on the window size and the downsampling factor.
%
�sic Usage:
   Given 2 test images img1 and img2, whose dynamic range is 0-255
%
   [mssim, ssim_map] = ssim(img1, img2);
%
�vanced Usage:
   User defined parameters. For example
%
   K = [0.05 0.05];
   window = ones(8);
   L = 100;
   [mssim, ssim_map] = ssim(img1, img2, K, window, L);
%
%Visualize the results:
%
   mssim                                        %Gives the mssim value
   imshow(max(0, ssim_map).^4)    %Shows the SSIM index map
%========================================================================

if (nargin < 2 | nargin > 5)
     ssim_index = -Inf;
     ssim_map = -Inf;
     return;
end
if (size(img1) ~= size(img2))
     ssim_index = -Inf;
     ssim_map = -Inf;
     return;
end
[M N] = size(img1);
if (nargin == 2)
     if ((M < 11) | (N < 11))
      ssim_index = -Inf;
      ssim_map = -Inf;
          return
     end
     window = fspecial('gaussian', 11, 1.5); %
     K(1) = 0.01;         % default settings
     K(2) = 0.03;         %
     L = 255;                                                             %
end
if (nargin == 3)
     if ((M < 11) | (N < 11))
      ssim_index = -Inf;
      ssim_map = -Inf;
          return
     end
     window = fspecial('gaussian', 11, 1.5);
     L = 255;
     if (length(K) == 2)
          if (K(1) < 0 | K(2) < 0)
         ssim_index = -Inf;
         ssim_map = -Inf;
         return;
          end
     else
      ssim_index = -Inf;
      ssim_map = -Inf;
      return;
     end
end
if (nargin == 4)
     [H W] = size(window);
     if ((H*W) < 4 | (H > M) | (W > N))
      ssim_index = -Inf;
      ssim_map = -Inf;
          return
     end
     L = 255;
     if (length(K) == 2)
          if (K(1) < 0 | K(2) < 0)
         ssim_index = -Inf;
         ssim_map = -Inf;
         return;
          end
     else
      ssim_index = -Inf;
      ssim_map = -Inf;
      return;
     end
end
if (nargin == 5)
     [H W] = size(window);
     if ((H*W) < 4 | (H > M) | (W > N))
      ssim_index = -Inf;
      ssim_map = -Inf;
          return
     end
     if (length(K) == 2)
          if (K(1) < 0 | K(2) < 0)
         ssim_index = -Inf;
         ssim_map = -Inf;
         return;
          end
     else
      ssim_index = -Inf;
      ssim_map = -Inf;
      return;
     end
end

img1 = double(img1);
img2 = double(img2);
% automatic downsampling
f = max(1,round(min(M,N)/256));
%downsampling by f
%use a simple low-pass filter
if(f>1)
      lpf = ones(f,f);
      lpf = lpf/sum(lpf(:));
      img1 = imfilter(img1,lpf,'symmetric','same');
      img2 = imfilter(img2,lpf,'symmetric','same');
      img1 = img1(1:f:end,1:f:end);
      img2 = img2(1:f:end,1:f:end);
end
C1 = (K(1)*L)^2;
C2 = (K(2)*L)^2;
window = window/sum(sum(window));
mu1     = filter2(window, img1, 'valid');
mu2     = filter2(window, img2, 'valid');
mu1_sq = mu1.*mu1;
mu2_sq = mu2.*mu2;
mu1_mu2 = mu1.*mu2;
sigma1_sq = filter2(window, img1.*img1, 'valid') - mu1_sq;
sigma2_sq = filter2(window, img2.*img2, 'valid') - mu2_sq;
sigma12 = filter2(window, img1.*img2, 'valid') - mu1_mu2;
if (C1 > 0 & C2 > 0)
     ssim_map = ((2*mu1_mu2 + C1).*(2*sigma12 + C2))./((mu1_sq + mu2_sq + C1).*(sigma1_sq + sigma2_sq + C2));
else
     numerator1 = 2*mu1_mu2 + C1;
     numerator2 = 2*sigma12 + C2;
denominator1 = mu1_sq + mu2_sq + C1;
     denominator2 = sigma1_sq + sigma2_sq + C2;
     ssim_map = ones(size(mu1));
     index = (denominator1.*denominator2 > 0);
     ssim_map(index) = (numerator1(index).*numerator2(index))./(denominator1(index).*denominator2(index));
     index = (denominator1 ~= 0) & (denominator2 == 0);
     ssim_map(index) = numerator1(index)./denominator1(index);
end

mssim = mean2(ssim_map);



摘自:http://blog.sina.com.cn/s/blog_6c41e2f301013ovs.html

目 录 第一章 引言 1 1.1 图像质量评价的定义 1 1.2 研究对象 1 1.3 方法分类 2 1.4 研究意义 3 第二章 历史发展和研究现状 4 2.1 基于手工特征提取的图像质量评价 4 2.1.1 基于可视误差的“自底向上”模型 4 2.1.1.1 Daly模型 4 2.1.1.2 Watson’s DCT模型 5 2.1.1.3 存在的问题 5 2.1.2 基于HVS的“自顶向下”模型 5 2.1.2.1 结构相似性方法 6 2.1.2.2 信息论方法 8 2.1.2.3 存在的问题 9 2.2 基于深度学习的图像质量评价 10 2.2.1 CNN模型 10 2.2.2 多任务CNN模型 12 2.2.3 研究重点 15 第三章 图像质量评价数据集和性能指标 16 3.1 图像质量评价数据集简介 16 3.2 图像质量评价模型性能指标 17 第四章 总结与展望 19 4.1 归纳总结 19 4.2 未来展望 19 参考文献 21 第一章 引言 随着现代科技的发展,诸如智能手机,平板电脑和数码相机之类的消费电子产品快速普及,已经产生了大量的数字图像。作为一种更自然的交流方式,图像中的信息相较于文本更加丰富。信息化时代的到来使图像实现了无障碍传输,图像在现代社会工商业的应用越来越广泛和深入,是人们生活中最基本的信息传播手段,也是机器学习的重要信息源。 图像质量图像系统的核心价值,此外,它也是图像系统技术水平的最高层次。但是,对图像的有损压缩、采集和传输等过程会很容易导致图像质量下降的问题。例如:在拍摄图像过程中,机械系统的抖动、光学系统的聚焦模糊以及电子系统的热噪声等都会造成图像不够清晰;在图像存储和传输过程中,由于庞大的数据量和有限通讯带宽的矛盾,图像需要进行有损压缩编码,这也会导致振铃效应、模糊效应和块效应等图像退化现象的出现。所以,可以说图像降质在图像系统的各个层面都会很频繁地出现,对图像质量作出相应的客观评价是十分重要且有意义的。为了满足用户在各种应用中对图像质量的要求,也便于开发者们维持、控制和强化图像质量图像质量评价(Image Quality Assessment,IQA)是一种对图像所受到的质量退化进行辨识和量化的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值