图像质量评价
该文本介绍了四种用于评估数字图像质量的技术:非均匀性(Nonuniformity)、峰值信噪比(PSNR-Peak Signal-to-Noise Ratio)、结构相似性(SSIM-Structural Similarity)以及图像粗糙度(Image Coarseness)。非均匀性(NU)通过计算标准差与均值的比值来衡量噪声分布;峰值信噪比(PSNR)基于均方误差评估压缩后图像的质量;结构相似性(SSIM)从亮度、对比度和结构三个方面综合评价图像相似性;而图像粗糙度则通过分析纹理特征来描述图像细节情况。这些方法分别适用于不同场景下的图像质量评估。
1.非均匀性(Nonuniformity)
该方法通常用于评估未经过校正的图像中的不均一特性,并且也可以用于分析经修正后但仍存在的不均一现象。
function [nu,avg]=NU(img)
%输入img为一幅含有固定图形噪声的图像数据
%输出nu为非均匀性,avg为图像均值
[m,n]=size(img);
img=double(img);
avg =mean2(img); %求均值
s=std(img(:),1); %求图像有效估计的标准差
nu = s/avg; %求非均匀性
end
2.峰值信噪声比(PSNR-PeakSignaltoNoiseRatio)
峰值信噪比(PSNR)是应用最广泛的图像客观评价指标之一。一般情况下,在经过影像压缩后输出的影像会在一定程度上与原始影像存在差异。为了评估处理后影像的质量水平,我们通常会依赖于PSNR值来进行定量分析。该值是基于对应像素点间的误差计算得出的指标,并被称为基于误差敏感的图像质量评价标准。然而忽略了人类视觉系统的特点(如对低频对比变化敏感度较高、对亮度对比敏感度高于色度等),因此在某些情况下可能会出现评价结果与主观感受不一致的现象。

function [ out ] = psnr( X,Y )
%X为原始图像
%Y为图像处理后的图像
[ m,n ] = size( X );
mse = sum(( double(X(:)) - double(Y(:)) ).^2);
mse = mse/(m*n);
out = 10*log10((255*255)/mse);
end
3.结构相似性SSIM(Structural Similarity)
结构相似性作为衡量两张图片之间相似程度的一种标准,在数字视觉领域具有重要应用价值。作为基于全面参考的一种用于评估图像质量的方法,该方法通过多维度分析来量化两张图片之间的相似程度。在比较原始图片与经过压缩后的版本时,SSIM算法能够有效评估压缩带来的信息损失程度。值得注意的是,在这种情况下,我们可以利用SSIM算法来判断压缩效果的好坏。而对于严重模糊的照片,由于其缺乏清晰细节特征,因此在处理这类照片时,SSIM算法无法提供可靠的评估结果
function [mssim, ssim_map] = ssim_index(img1, img2, K, window, L)
C1 = (K(1)*L)^2;
C2 = (K(2)*L)^2;
window = window/sum(sum(window));
img1 = double(img1);
img2 = double(img2);
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);
return
4.图像粗糙度
图像的粗糙度是与视觉感知相关的图像纹理特征之一,在描述纹理方面的能力较强,并且在多个领域中都有较为显著的应用价值。
%%求粗糙度coarseness
function ent=coarseness(pic,ks)
% pic表示图像,ks求粗糙度的最大的窗口尺寸
[h w]=size(pic)
h1=h-ks;
w1=w-ks;
%%求平均强度
picmean=zeros(h1,w1,ks);
picmean(:,:,1)=pic(1:h1,1:w1);
for k=1:ks-1
for i=1:h1
for j=1:w1
picwindow=pic(i:i+k,j:j+k);
picmean(i,j,k+1)=mean2(picwindow);
end
end
end
%%求两个方向窗口不重叠的最大差值
h2=h1-ks;
w2=w1-ks;
picmax3=zeros(h2,w2,ks);
for k=1:ks
pic_h_deference=picmean(1+k:h2+k,1:w2,k); %水平方向
pic_v_deference=picmean(1:h2,1+k:w2+k,k); %垂直方向
pic_d_deference=picmean(1+k:h2+k,1+k:w2+k,k); %对角方向
pic_h_deference=abs(pic_h_deference-picmean(1:h2,1:w2,k));
pic_v_deference=abs(pic_v_deference-picmean(1:h2,1:w2,k));
pic_d_deference=abs(pic_d_deference-picmean(1:h2,1:w2,k));
picmax3(:,:,k)=max(max(pic_h_deference,pic_v_deference),pic_d_deference);
end
[picmax2,maxk]=max(picmax3,[],3); % 确定极大值的位置
ent=mean2(2.^maxk);
