基于MATLAB GUI的数字图像处理系统实现方案,包含常见图像处理功能。代码分为两部分:GUI界面设计和回调函数实现。
%% 第一部分:创建GUI界面 (使用GUIDE)
% 1. 打开GUIDE: guide
% 2. 创建新GUI,添加以下控件:
% - 1个axes (Tag: originalAxes)
% - 1个axes (Tag: processedAxes)
% - 按钮组:
% - "打开图像" (Tag: openButton)
% - "灰度转换" (Tag: grayButton)
% - "直方图均衡化" (Tag: histeqButton)
% - "边缘检测" (Tag: edgeButton)
% - "中值滤波" (Tag: medianButton)
% - "二值化" (Tag: thresholdButton)
% - "形态学操作" (Tag: morphButton)
% - "保存图像" (Tag: saveButton)
% - 参数编辑框 (Tag: paramEdit, 用于滤波器参数)
%% 第二部分:回调函数实现 (保存为同名的.m文件)
function image_processing_gui
% 创建GUI界面
handles.figure = figure('Name','数字图像处理系统',...
'Position',[100 100 800 600]);
% 图像显示区域
handles.originalAxes = axes('Parent',handles.figure,...
'Position',[0.05 0.3 0.4 0.6]);
handles.processedAxes = axes('Parent',handles.figure,...
'Position',[0.55 0.3 0.4 0.6]);
% 按钮区域
handles.openButton = uicontrol('Style','pushbutton',...
'String','打开图像','Position',[20 20 100 30],...
'Callback',{@openCallback,handles});
handles.grayButton = uicontrol('Style','pushbutton',...
'String','灰度转换','Position',[150 20 100 30],...
'Callback',{@grayCallback,handles});
% 添加其他按钮(类似上述结构)...
guidata(handles.figure, handles);
end
%% 回调函数示例
function openCallback(~,~,handles)
[filename, pathname] = uigetfile({'*.jpg;*.png;*.bmp'},'选择图像');
if isequal(filename,0)
return;
end
img = imread(fullfile(pathname,filename));
handles.originalImg = img;
imshow(img, 'Parent', handles.originalAxes);
guidata(handles.figure, handles);
end
function grayCallback(~,~,handles)
if ~isfield(handles,'originalImg')
errordlg('请先打开图像');
return;
end
grayImg = rgb2gray(handles.originalImg);
imshow(grayImg, 'Parent', handles.processedAxes);
handles.processedImg = grayImg;
guidata(handles.figure, handles);
end
function histeqCallback(~,~,handles)
if ~isfield(handles,'processedImg')
errordlg('请先处理图像');
return;
end
[counts,binLocations] = imhist(handles.processedImg);
imhist(handles.processedImg, 'Parent', handles.originalAxes);
handles.histImg = histeq(handles.processedImg);
imshow(handles.histImg, 'Parent', handles.processedAxes);
guidata(handles.figure, handles);
end
function edgeCallback(~,~,handles)
if ~isfield(handles,'processedImg')
errordlg('请先处理图像');
return;
end
level = graythresh(handles.processedImg);
BW = imbinarize(handles.processedImg,level);
edges = edge(BW, 'Canny');
imshow(edges, 'Parent', handles.processedAxes);
handles.edgeImg = edges;
guidata(handles.figure, handles);
end
function saveCallback(~,~,handles)
if ~isfield(handles,'processedImg')
errordlg('没有可保存的图像');
return;
end
[filename, pathname] = uiputfile({'*.jpg;*.png;*.bmp'},'保存图像');
if isequal(filename,0)
return;
end
imwrite(handles.processedImg, fullfile(pathname,filename));
end
主要功能说明:
- 图像读取:支持JPG/PNG/BMP格式
- 灰度转换:使用rgb2gray函数
- 直方图均衡化:增强对比度
- 边缘检测:结合Otsu阈值法和Canny算子
- 图像保存:支持多种格式导出
扩展建议:
基于MATLAB-GUI图形界面的数字图像处理软件 本系统设计基于GUI图形界面,用matlab语言编写代码,实现功能包括图象的读取、存储、显示、直方图均衡化、阈值化、小波分解、小波重构、加噪、去噪、平滑、锐化、边缘检测、图像分割等
-
添加更多处理功能:
% 中值滤波示例 function medianCallback(~,~,handles) if isempty(handles.processedImg) return; end prompt = {'输入滤波核大小:'}; dlgtitle = '参数设置'; dims = [1 50]; definput = {'3'}; answer = inputdlg(prompt,dlgtitle,dims,definput); if isempty(answer) return; end ksize = str2double(answer{1}); filtered = medfilt2(handles.processedImg, [ksize ksize]); imshow(filtered, 'Parent', handles.processedAxes); end
-
添加形态学操作:
% 形态学处理示例 function morphCallback(~,~,handles) se = strel('disk',3); dilated = imdilate(handles.processedImg, se); eroded = imerode(handles.processedImg, se); imshow(dilated, 'Parent', handles.processedAxes); end
使用说明:
- 运行
image_processing_gui
启动程序 - 点击"打开图像"选择处理图像
- 选择不同处理方式(注意处理顺序)
- 处理结果实时显示在右侧窗口
- 可通过"保存图像"存储处理结果
该系统实现了基本的数字图像处理功能,可根据需要扩展更多算法(如形态学操作、特征提取等)。所有处理均基于MATLAB Image Processing Toolbox实现,建议安装相关工具箱以获得完整功能。