一、图像增强及直方图均衡化简介

1 图像增强
图像增强是对图像的某些特征,如边缘、轮廓、对比度等进行强调或锐化,以便于显示、观察或进一步分析与处理。通过对图像的特定加工,将被处理的图像转化为对具体应用来说视觉质量和效果更“好”或更“有用”的图像。
图像增强是最基本最常用的图像处理技术,常用于其他图像处理的预处理阶段。

(1)高通平滑、低通锐化;平滑模糊、锐化突出图像细节
(2)滤波器还有带通、带阻等形式
(3)根据噪声(椒盐噪声、高斯噪声…)的不同,选用不同的滤波
(4)邻域有4-邻域、对角邻域、8-邻域,相对应的有邻接,即空间上相邻、像素灰度相似
(5)图像边缘处理:忽略不处理、补充、循环使用
(6)目前尚未图像处理大多基于灰度图像

2 直方图均衡化
直方图均衡化主要用于增强灰度值动态范围偏小的图像的对比度。该方法的基本思想是把原始图像的灰度统计直方图变换为均匀分布的形式,这样就增加了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。数字图像是离散化的数值矩阵,其直方图可以被视为一个离散函数,它表示数字图像中每一灰度级与其出现概率间的统计关系。假设一幅数字图像f(x,y)的像素总数为N,ra表示第k个灰度级对应的灰度,nk表示灰度为r的像素个数即频数,用横坐标表示灰度级,用纵坐标表示频数,则直方图可定义为®=,其中,P(n)表示灰度ry出现的相对频数即概率。直方图在一定程度上能够反映数字图像的概貌性描述,包括图像的灰度范围、灰度分布、整幅图像的亮度均值和阴暗对比度等,并可以此为基础进行分析来得出对图像进一步处理的重要依据。直方图均衡化也叫作直方图均匀化,就是把给定图像的直方图分布变换成均匀分布的直方图,是一种较为常用的灰度增强算法(2。直方图均衡化概括起来
包括以下三个主要步骤。
(1)预处理。输入图像,计算该图像直方图。
(2)灰度变换表。根据输入图像的直方图计算灰度值变换表。
(3)查表变换。执行变换x’=H(x),表示对步骤1中得到的直方图使用步骤2得到的灰度值变换表进行查表变换操作,通过遍历整幅图像的每一个像元,将原始图像灰度值x放入变换表H(x)中,可得到变换后的新灰度值x’。
根据信息论的相关理论,我们可以知道图像经直方图均衡化后,将会包含更多的信息
量,进而能突出某些图像特征。假设图像具有n级灰度,其第i级灰度出现的概率为pi,
则该级灰度所含的信息量为:

整张图片的信息量为

信息论已经证明,具有均匀分布直方图的图像,其信息量H最大。即当
Po=Pi=…=pn-i=1/n时,(1.2)式有最大值。

2.1 全局直方图处理
全局直方图处理通过对RGB图像的R、G、B三层通道分别进行直方图均衡化, 再整合到新的图像的方式来进行。一般来说,全局直方图去雾算法可以实现含雾图像的增强效果,处理前后的直方图在分布上具有明显变化,但在图像整体上容易出现某些色彩失真的现象。

2.2 局部直方图处理
全局直方图均衡化增强只是将原图像的直方图进行了均衡化,未能有效保持原始图像的局部特征,容易出现色彩失真问题。通过选择固定尺寸的滑动窗口作用于原始图像来进行局部直方图处理,可以在一定程度上保持原始图像的局部特征,提高图像增强的效果。因此, 局部直方图处理通过对RGB图像的R、G、B三层通道分别进行局部直方图均衡化,再整合到新的图像的方式来进行。

2.3 Retinex增强处理
基于全局直方图、局部直方图的图像去雾算法在理论及实现上比较简单,能起到一定的去雾处理效果。为了进行对比, 实验中采取了Retin ex图像增强算法来进行对比, 该算法可以平衡图像灰度动态范围压缩、图像增强和图像颜色恒常三个指标,能够实现对含雾图像的自适应性增强。因此, Retin ex增强处理通过对RGB图像的R、G、B三层通道分别应用Retin ex算法进行处理, 再整合到新的图像的方式来进行。

二、部分源代码

function varargout = one(varargin)gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @one_OpeningFcn, ...'gui_OutputFcn',  @one_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before one is made visible.
function one_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to one (see VARARGIN)% Choose default command line output for one
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes one wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = one_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
axes(handles.axes1);
[filename,pathname]=uigetfile({'*.jpg;*.png;*.jfif'},'Select RGB image','pick an image');
file=strcat(pathname,filename);
I=imread(file);
imshow(I);
handles.img=I;guidata(hObject,handles);% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)% [filename,pathname] = uigetfile({'*.*';'*.jpg';'*.bmp';'*.gif';'*.png';'*.tif'},'Read Pic');
% str = [pathname,filename];
% global src_img;
% if ~isequal([pathname,filename],[0,0])
% src_img = imread(str);guidata(hObject,handles);
axes(handles.axes2);
global In;
imshow(In);% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenu1var=get(handles.popupmenu1,'value');axes(handles.axes2);
I=handles.img;
global In;
switch varcase 1In = RemoveFogByGlobalHisteq(I, flag);case 2In = RemoveFogByLocalHisteq(I , flag);case 3In = RemoveFogByRetinex(I, flag);guidata(hObject,handles);
endfunction In = RemoveFogByRetinex(I, flag)
% 用Retinex的MSR实现图像去雾
% 输入参数:
%  f——图像矩阵
%  flag——显示标记
% 输出参数:
%  In——结果图像if nargin < 2flag = 1;
end
%提取图像的R、G、B分量
fr = I(:, :, 1);
fg = I(:, :, 2);
fb = I(:, :, 3);
%数据类型归一化
mr = mat2gray(im2double(fr));
mg = mat2gray(im2double(fg));
mb = mat2gray(im2double(fb));
%定义alpha参数
alpha = 1200;
%定义模板大小
n = 128;
%计算中心
n1 = floor((n+1)/2);
for i = 1:nfor j = 1:n%高斯函数b(i,j)  = exp(-((i-n1)^2+(j-n1)^2)/(4*alpha))/(pi*alpha);end
end
%卷积滤波
nr1 = imfilter(mr,b,'conv', 'replicate');
ng1 = imfilter(mg,b,'conv', 'replicate');
nb1 = imfilter(mb,b,'conv', 'replicate');
ur1 = log(nr1);
ug1 = log(ng1);
ub1 = log(nb1);
tr1 = log(mr);
tg1 = log(mg);
tb1 = log(mb);
yr1 = (tr1-ur1)/3;
yg1 = (tg1-ug1)/3;
yb1 = (tb1-ub1)/3;
%定义beta参数
beta = 55;
%定义模板大小
x = 32;
%计算中心
x1 = floor((n+1)/2);
for i = 1:nfor j = 1:n%高斯函数a(i,j)  = exp(-((i-n1)^2+(j-n1)^2)/(4*beta))/(6*pi*beta);end
end

三、运行结果



四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]黄丽韶.基于Retinex增强算法的图像去雾方法研究[J].无线互联科技. 2021,18(15)

【图像去雾】基于matlab GUI直方图均衡化+Retinex理论图像去雾【含Matlab源码 1509期】相关推荐

  1. 【时钟识别】基于matlab GUI Hough变换指针式时钟识别【含Matlab源码 2085期】

    ⛄一.简介 1 仪表示数识别流程 基于刻度准确定位的指针式仪表示数识别方法包括预处理.指针检测.刻度定位.油位计表盘中心拟合与仪表读数计算5个部分.该方法无需预先添加任何表盘信息,算法流程如图2所示. ...

  2. 【数字信号调制】基于matlab GUI PCM编码和QAM调制系统【含Matlab源码 2080期】

    ⛄一.PCM编码+QAM调制简介 1 PCM 数字信号是对连续变化的模拟信号进行抽样.量化和编码产生的,称为PCM(Pulse Code Modulation),即脉冲编码调制. 脉冲编码调制就是把一 ...

  3. 【图像融合】基于matlab GUI高斯金字塔+拉普拉斯金字塔彩色图像融合【含Matlab源码 1506期】

    一.区域分割图像融合简介 图像的分解 对源图像进行融合时,首先对图像进行分解,利用拉普拉斯金字塔分解,先对图像进行高斯金字塔分解,然后再进行拉普拉斯金字塔分解. 1 高斯金字塔分解 记源图像为G0,G ...

  4. 【车辆计数】基于matlab GUI背景差分法道路行驶多车辆检测【含Matlab源码 1911期】

    ⛄一.背景差分法和帧间差分法的车辆运动目标检测简介 1 引言 运动目标检测是从图像序列中检测运动目标.通过运动目标检测可以得到图像中的运动目标,获取图像中的运动信息.运动目标检测在医学辅助诊断.航天航 ...

  5. 基于java开发的健身器材电商管理系统.rar(含项目源码前后端项目)

    功能:健身器材信息管理.健身器材分类管理.公告管理.个人中心.订单管理.健身器材入库管理.健身器材出库管理.收获评价管理.系统管理等 前端页面展示 后端管理: 源码下载地址:>>>

  6. matlab svm 语音识别,【情感识别】基于matlab支持向量机(SVM)的语音情感识别【含Matlab源码 543期】...

    一.简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数 ...

  7. python直方图均衡化代码_基于matlab的直方图均衡化代码

    基于matlab的直方图均衡化代码 2007-04-15 20:15 clear all %一,图像的预处理,读入彩***像将其灰度化 PS=imread('1.jpg');             ...

  8. 直方图均衡化 matlab代码,基于matlab的直方图均衡化代码

    基于matlab的直方图均衡化代码 2007-04-15 20:15 clear all %一,图像的预处理,读入彩***像将其灰度化 PS=imread('1.jpg');             ...

  9. 基于matlab GUI Powell+蚁群算法图像配准

    基于matlab GUI Powell+蚁群算法图像配准 一.简介 1 蚁群算法(ant colony algorithm,ACA)起源和发展历程 Marco Dorigo等人在研究新型算法的过程中, ...

  10. 【裂缝识别】基于matlab GUI路面裂缝识别(带面板)【含Matlab源码 1648期】

    ⛄一.简介 1 案例背景 随着国家对公路建设的大力投入,我国的公路通车总里程己经位居世界前列,这样进一步促进了我国经济建设的发展.随着公路的大量投运,公路日常养护和管理已经成为制约公路运营水平提高的瓶 ...

最新文章

  1. 武汉大学提出软模板SoftProto框架,大幅增强方面词抽取任务
  2. vs2008 使用Visual Leak Detector检测内存泄漏
  3. Spring框架—SpringBean配置
  4. SAP Fiori Elements的change and save实现原理
  5. Android之学习安卓每天成长笔记
  6. 节目表演的点子_矿泉水桶当架子鼓,幼儿园小朋友出色表演,圈粉无数
  7. Redis中的批量删除数据库中的Key
  8. android 6.0获取蓝牙权限
  9. 钱 | 钱,钱,钱,钱,钱,钱,钱!钱啊钱!(配音乐)
  10. JavaScript重难点解析6(Promise)
  11. Android8.0(34)----Android 8.0 Settings流程分析与变动
  12. input隐藏域赋值数组
  13. HTML页面中返回顶部的几种实现方式
  14. PM经验谈 项目管理工具必备的5个功能
  15. arcpy.ProjectRaster_management
  16. win7科学计算机的用法,win7系统自带的计算器使用的修复步骤
  17. Ubuntu的下载安装教程--本人亲测
  18. [大数据技术] 淘宝双11数据分析与预测实验
  19. NoSQL从小白到码神 火推08
  20. mac重新登陆前部分账户服务将不可用

热门文章

  1. JGit、SvnKit - 版本提交日志(1)提取
  2. 函数名的使用-闭包-迭代器
  3. Python中如何获取类属性的列表
  4. Centos7.0下MySQL的安装
  5. Shiro学习(23)多项目集中权限管理
  6. 第一次作业+105032014140
  7. jQuery基础集锦——插件开发
  8. Androidの矢量图形之VectorDrawable研究
  9. java提高数据库访问效率代码优化
  10. NHibernate Issues之1898:命名查询