一、图像质量评价
图像质量评价对图像处理算法的可行性分析以及某类算法达成效果的比较都起着非常重要的指导作用。随着图像处理技术的发展,对于图像质量评价的研究也日益深入,新的评价指标和评价算法不断涌现,共同推动了图像质量评价的进步。
图像质量评价的方法大致可分为两类:主观评价和客观评价。主观评价是由参与者对图像质量进行直接评价,是图像质量评价最直观的方法。但由于个别人对于图像的理解差异性很大,主观评价方法如果要达到预期的评价效果,需要有多人的参与和判断,以群体的形式来消除个体差异性,这就导致主观评价方法受到很大的约束和限制,只能在某些特定的场合下采用。
客观评价通过建立数学模型来模拟人的视觉系统,根据数学公式的推导,采用相应的算法对图像质量进行评价。按照是否需要原始图像作为参考信息,客观评价方法又分为无参考 (No-reference, NR) 评价、部分参考 (Reduced-Reference, RR) 评价和全参考 (Full-Reference, FR) 评价三类。
常见的主观评价和客观评价的分类如图1所示。
图1 图像质量评价分类
在客观评价中的全参考评价模式下,关于原始图像和处理后的图像之间的比对,通常会采用峰值信噪比 (PSNR) 进行衡量。PSNR从统计学的角度来衡量原始图像和处理后图像的关系,计算原始图像和处理后图像的对应像素点灰度值之间的差异。对于尺寸为M×N的图像,PSNR定义如下:
其中,处理前图像在坐标空间 (i, j) 的灰度值使用R (i, j) 表示,处理后图像在坐标空间 (i, j) 的灰度值使用F (i, j) 表示。通过计算得出的PSNR值越大,表示处理后图像与原始图像之间的失真越小,图像处理后的质量越好。从公式 (1) 可以看出,PSNR计算非常简单,但是其仅仅是基于统计学的角度来考虑处理后图像和原始图像对应像素点灰度值之间的差异,忽略了图片内部像素点之间的关系,这就导致其会和主观评价产生一定的误差。
2004年,Wang等人提出了结构相似度 (SSIM) 方法,将图像内部的结构特征和图像的亮度、图像的对比度一起作为重要的参数。因为其考虑了图像的内部结构在人眼视觉上的差异,该方法能和主观评价取得较为一致的结果。假设原始图像和处理后图像分别定义为X和Y,则图像亮度信息L (X, Y) 、图像对比度信息C (X, Y) 和图像结构信息S (X, Y) 分别计算如下:
其中图像X的均值使用μX表示,图像Y的均值使用μY表示,图像X的标准差使用σX表示,图像Y的标准差使用σY表示,图像X与图像Y的协方差使用σXY表示,而公式中出现的C1、C2和C3是为计算的可靠性而定义的常数。综合公式 (2) 、公式 (3) 和公式 (4) ,定义两幅图像的SSIM如下:
其中α、β、γ是为了调整亮度信息、对比度信息和结构信息三者所占比重而设定的参数。通过以上公式计算出的SSIM (X, Y) 的取值在0和1之间,越接近1,表示处理后的图像和原始图像失真程度越小。
和PSNR进行对比,SSIM考虑了图像内部的结构相关信息,更加符合人类视觉对图像特征的理解,因此其应用更加广泛。
二、部分源代码
function varargout = IQA(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @IQA_OpeningFcn, …
‘gui_OutputFcn’, @IQA_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% — Executes just before IQA is made visible.
function IQA_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
ResetButton_Callback(hObject, eventdata, handles)
% — Outputs from this function are returned to the command line.
function varargout = IQA_OutputFcn(hObject, eventdata, handles)
% Get default command line output from handles structure
varargout{1} = handles.output;
% — Executes on button press in BrowseImage.
function BrowseImage_Callback(hObject, eventdata, handles)
ResetButton_Callback(hObject, eventdata, handles);
global image;
[filename pathname] = uigetfile({‘.jpg’;'.bmp’;‘.tif’;'.png’},‘File Selector’);
x = strcat(pathname, filename);
image=imread(x);
axes(handles.axes1);
imshow(image);
% — Executes on button press in AddNoise.
function AddNoise_Callback(hObject, eventdata, handles)
global image;
global addnoisyimage;
global mean;
global variance;
global AdditiveNoiseMenu;
if (strcmp(AdditiveNoiseMenu, ‘Gaussian’))
addnoisyimage = imnoise(image, ‘Gaussian’, mean, variance);
elseif (strcmp(AdditiveNoiseMenu, ‘Poisson’))
addnoisyimage = imnoise(image, ‘Poisson’);
elseif (strcmp(AdditiveNoiseMenu, ‘Select Additive Noise Type’))
addnoisyimage = image;
end
axes(handles.axes2);
imshow(addnoisyimage);
% — Executes on button press in MultiNoise.
function MultiNoise_Callback(hObject, eventdata, handles)
global noisedensity;
global variance_multi;
global image;
global multinoisyimage;
global MultiplicativeNoiseMenu;
if (strcmp(MultiplicativeNoiseMenu, ‘Salt & Pepper’))
multinoisyimage = imnoise(image, ‘salt & pepper’, noisedensity);
elseif (strcmp(MultiplicativeNoiseMenu, ‘Speckle’))
multinoisyimage = imnoise(image, ‘speckle’, variance_multi);
elseif (strcmp(MultiplicativeNoiseMenu, ‘Select Multiplicative Noise’))
multinoisyimage = image;
end
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]韦忠亮,许光宇,张顺香.基于MATLAB的去雾图像质量评价系统[J].黑龙江工业学院学报(综合版). 2019,19(08)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
转载:https://blog.csdn.net/TIQCmatlab/article/details/127481903