一、简介
图像去雾是图像处理中的一项重要任务,尤其在处理由雾、霾等大气条件影响的图像时。去雾可以提高图像质量,使其更接近人眼观察到的真实场景。在本文中,我们将介绍如何使用MATLAB实现基于直方图的图像去雾方法。
直方图均衡化是一种常用的图像处理技术,用于提高图像的对比度。通过拉伸像素值的范围,直方图均衡化可以增强图像的对比度,并有助于在图像去雾中突出物体。
二、部分源码
function varargout = MainForm(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @MainForm_OpeningFcn, ...
'gui_OutputFcn', @MainForm_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
function FileOpen_Callback(hObject, eventdata, handles)
warning off all;
% 载入图像
[FileName,PathName,FilterIndex] = uigetfile({'*.jpg;*.tif;*.png;*.gif', ...
'所有图像文件';...
'*.*','所有文件' },'载入图像',...
'.\images\\sweden_input.jpg');
if isequal(FileName, 0) || isequal(PathName, 0)
return;
end
%读取图像,显示图像
Img1 = imread(fullfile(PathName, FileName));
axes(handles.axes1);
imshow(Img1, []);
handles.Img1 = Img1;
handles.Img2 = 0;
guidata(hObject, handles);
title('原始图像')
function HistImg_Callback(hObject, eventdata, handles)
% hObject handle to HistImg (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% 直方图对比
if isequal(handles.Img1, 0)
msgbox('请载入图像!', '提示信息');
return;
end
if isequal(handles.Img2, 0)
msgbox('请进行去雾处理!', '提示信息');
return;
end
figure('Name', '直方图对比', 'NumberTitle', 'Off', ...
'Units', 'Normalized', 'Position', [0.1 0.1 0.5 0.5]);
subplot(2, 2, 1); imshow(handles.Img1); title('原图像', 'FontWeight', 'Bold');
subplot(2, 2, 2); imshow(handles.Img2); title('处理后的图像', 'FontWeight', 'Bold');
Q = rgb2gray(handles.Img1);
W = rgb2gray(handles.Img2);
subplot(2, 2, 3); imhist(Q, 64); title('原灰度直方图', 'FontWeight', 'Bold');
subplot(2, 2, 4); imhist(W, 64); title('处理后的灰度直方图', 'FontWeight', 'Bold');
function GlobalHisteq_Callback(hObject, eventdata, handles)
% hObject handle to GlobalHisteq (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
if isequal(handles.Img1, 0)
msgbox('请载入图像!', '提示信息');
return;
end
Img2 = RemoveFogByGlobalHisteq(handles.Img1, 0);
axes(handles.axes2); imshow(Img2, []);
handles.Img2 = Img2;
guidata(hObject, handles);
title('全局直方图算法图像')
三、运行结果
四、matlab版本
R2019a
五、学习与交流
文中不足之处请大家多多指教,学习与交流可以联系企鹅:3752243968
文中部分源码仅供参考,若需要全部代码可以私信(有偿)