【图像评价】基于matlab图像去雾质量评价【含Matlab源码 066期】
一、简介
基于matlab图像去雾质量评价: 通过新增可见变比、平均梯度、饱和像素百分比三个指标评价去雾图像质量。
1 图像去雾
早期的雾天图像的去雾处理方法经过多年的发展,逐步演化成两类研究方向,从图像增强的角度来研究以及从大气成像的物理模型的角度来研究。
基于图像增强的去雾方法不考虑雾天成像的影响因素,从图像增强的角度增加图像对比度,模拟人类视觉感知,突出图像的细节以改善图像的视觉效果。Retinex就是一种常用的基于图像增强的去雾方法,其理论基础是图像的色感一致性。
基于物理模型的去雾方法研究大气散射模型,从理论上分析图像在雾的影响下的成像机理,通过构建相应的数学模型进行计算来去除雾气的影响,复原出清晰的图像效果。He等依据大气散射模型提出了暗原色先验理论来估计透射率,算法简单而且非常有效,极大地推动了该研究方向的发展。
随着深度学习理论的发展,通过构建深度网络,图像去雾处理有了更丰富的手段。Cai等提出一种端到端的去雾网络DehazeNet,对其中的卷积神经网络进行特殊设计来提取相关特征,使用局部极值操作抑制透射率的噪声,同时利用新的激活函数 (双边纠正线性单元) 提高透射率的精度,对基于深度学习的图像去雾起到了很好的推动作用。
2 图像质量评价
图像质量评价对图像处理算法的可行性分析以及某类算法达成效果的比较都起着非常重要的指导作用。随着图像处理技术的发展,对于图像质量评价的研究也日益深入,新的评价指标和评价算法不断涌现,共同推动了图像质量评价的进步。
图像质量评价的方法大致可分为两类:主观评价和客观评价[6]。主观评价是由参与者对图像质量进行直接评价,是图像质量评价最直观的方法。但由于个别人对于图像的理解差异性很大,主观评价方法如果要达到预期的评价效果,需要有多人的参与和判断,以群体的形式来消除个体差异性,这就导致主观评价方法受到很大的约束和限制,只能在某些特定的场合下采用。
客观评价通过建立数学模型来模拟人的视觉系统,根据数学公式的推导,采用相应的算法对图像质量进行评价。按照是否需要原始图像作为参考信息,客观评价方法又分为无参考 (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考虑了图像内部的结构相关信息,更加符合人类视觉对图像特征的理解,因此其应用更加广泛。
二、部分源代码
%%%% Cleaning
clc
clear all
close all
%%%% Images reading: the input 2 images must be grayscale
NameOri='Original.pgm';
%NameResto='Restored.pgm';
NameResto='Restored2.pgm';
%NameResto='Restored3.pgm';
%NameResto='Restored4.pgm';
%NameResto='Restored5.pgm';
I1=imread(NameOri);
I1=double(I1);
% if the input image is a color image, use following line
% I1=double(rgb2gray(uint8(I1)));
[nl,nc]=size(I1);
R1=imread(NameResto);
R1=double(R1);
% if the input image is a color image, use following line
% R1=double(rgb2gray(uint8(R1)));
%%%% Figure 1
figure(1)
colormap gray
subplot(1,2,1)
imagesc(I1)
axis image
title('Original')
subplot(1,2,2)
imagesc(R1)
axis image
title('Restored')
function [Mask Crr]=functionContrastAt5PerCent(I1,S,percentage)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Inputs %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% I1 : Original image
% S : SubWindow size (default = 7)
% perCentage : Visibility percentage (default = 5)
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Outputs %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Mask : Mask of the visibility contrast > percentage
% Crr : valeur du contraste visibile (>percentage)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if nargin<1
error('not enough argument')
end
if nargin<2
S=7;
end
if nargin<3
percentage=5;
end
[nl,nc,dd]=size(I1);
%%% 4-neighborhood pixels
seh=[0 1 0;0 1 0;0 0 0];
seg=[0 0 0;1 1 0;0 0 0];
%%% minimum and maximum calculation
I1pad= padarray(I1,[3 3],'symmetric');
Igmin11=imerode(I1pad,seg,'full');%腐蚀
Ihmin11=imerode(I1pad,seh,'full');
Igmax11=imdilate(I1pad,seg,'full');%膨胀
Ihmax11=imdilate(I1pad,seh,'full');
Igmin1=Igmin11(3+(1:nl),3+(1:nc));
Ihmin1=Ihmin11(3+(1:nl),3+(1:nc));
Igmax1=Igmax11(3+(1:nl),3+(1:nc));
Ihmax1=Ihmax11(3+(1:nl),3+(1:nc));
%%% pads image and minimum and maximum matrix
I1pad= padarray(I1,[S S],'symmetric');
Igmin1pad= padarray(Igmin1,[S S],'symmetric');
Ihmin1pad= padarray(Ihmin1,[S S],'symmetric');
Igmax1pad= padarray(Igmax1,[S S],'symmetric');
Ihmax1pad= padarray(Ihmax1,[S S],'symmetric');
%%% Initialization
Is=zeros(S,S);
Mask=false(nl+2*S,nc+2*S);
Crr=zeros(nl+2*S,nc+2*S);
s=1;
percentage=percentage/2;
h = waitbar(0,'Please wait...');
%%% subwindow of size S*S
for ii=1:round(S/2):nl
for jj=1:round(S/2):nc
Is=double(I1pad(S+ii:2*S+ii-1,S+jj:2*S+jj-1));
Isgmin=double(Igmin1pad(S+ii:2*S+ii-1,S+jj:2*S+jj-1));
Ishmin=double(Ihmin1pad(S+ii:2*S+ii-1,S+jj:2*S+jj-1));
Isgmax=double(Igmax1pad(S+ii:2*S+ii-1,S+jj:2*S+jj-1));
Ishmax=double(Ihmax1pad(S+ii:2*S+ii-1,S+jj:2*S+jj-1));
%%% horizontal and vertical contrasts
Cgxx1=zeros(1,S^2);
Chxx1=zeros(1,S^2);
Ismin=round(min(Is(:)));
Ismax=round(max(Is(:)));
if(Ismin<=0) Ismin=1;end
if(Ismin>256) Ismin=256;end
if(Ismax<=0) Ismax=1; end
if(Ismax>256) Ismax=256;end
Fcube=false(S,S,Ismax-Ismin+1);
C=zeros(1,Ismax);
G=zeros(1,Ismax);
for s=Ismin:Ismax %%% we vary the threshold
Fg=0; %%% Pixels cardinal separated by s
pg=1; %%% Contrast indice
Fh=0;
ph=1;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]韦忠亮,许光宇,张顺香.基于MATLAB的去雾图像质量评价系统[J].黑龙江工业学院学报(综合版). 2019,19(08)
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/112257254
- 点赞
- 收藏
- 关注作者
评论(0)