基于MATLAB语言的数字图像处理实验(GUI)

  • 格式:docx
  • 大小:9.72 MB
  • 文档页数:46

数字图像处理实验报告——基于MATLAB语言的图像处理软件姓名:班级:学号:专业:目录1.设计目的 (2)2.设计要求 (2)3.总体设计 (2)4.模块设计 (3)4.1图像的读取、保存和程序退出 (3)4.2图像转化为灰度图像 (5)4.3底片处理(反色) (6)4.4截图 (6)4.5亮度和对比度度调节 (6)4.6图像的翻转与旋转 (7)4.7添加噪声 (9)4.8平滑和锐化 (10)4.9直方图均衡化处理 (11)4.10图像的腐蚀和膨胀 (12)4.11边缘检测 (13)4.12还原和撤销 (16)5.结果分析 (17)5.1转为灰度图像 (17)5.2底片处理 (17)5.3截图 (17)5.4亮度和对比度调节 (18)5.5图像翻转与旋转 (19)5.6添加噪声、平滑和锐化 (20)5.7直方图均衡化 (23)5.8腐蚀和膨胀 (24)5.9边缘检测 (25)6.心得体会 (26)7.附录代码 (27)1.设计目的利用MATLAB的GUI程序设计一个简单实用的图像处理程序。

该程序应具备图像处理的常用功能,以满足要求。

2.设计要求设计程序有以下基本功能:1)图像的读取和保存2)图像转化为灰度图像3)底片处理(反色)4)截图5)亮度和对比度度调节6)图像的翻转与旋转7)添加噪声8)平滑和锐化9)直方图均衡化处理10)图像的腐蚀和膨胀11)边缘检测3.总体设计软件的总体设计界面布局如上图所示,主要分为2个区域:显示区域与操作区域。

显示区域:显示原图像,以及效果图,即处理前与处理后的图像。

操作区域:通过功能键实现对图像的各种处理。

在图中可见,界面左边和下方为一系列功能按键如“转为灰度图像”、“撤销”、“还原”等等;界面正中部分为图片显示部分。

设计完成后运行的软件界面如下:4.模块设计以下介绍各个功能模块的功能与实现4.1图像的读取、保存和程序退出通过Menu Editor 创建如下菜单,通过以下菜单来实现“载入图像”、“保存图像”、“退出”的功能。

利用MATLAB中“uigetfile”、“imread”、“imshow”实现图像文件的读取与显示。

function Input_Callback(hObject, eventdata, handles)[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif'},'选择图片');str=[pathname filename];global S %设计一个全局变量S,保存初始图像路径,以便之后的还原操作S=str;A=imread(str);set(handles.axes1,'HandleVisibility','ON');axes(handles.axes1);imshow(A);set(handles.axes1,'HandleVisibility','OFF');axes(handles.axes2);imshow(A);cla(handles.axes2);handles.img=A;guidata(hObject,handles);end程序关键部分:通过[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif'},'选择图片')选择相应路径打开的图像;通过str=[pathname filename]; A=imread(str); 读取选中的图像;最后,通过imshow(A)在显示区域上显示图像。

利用“uiputfile”、“imwrite”函数实现图像文件的保存。

function Save_Callback(hObject, eventdata, handles)[sfilename,sfilepath]=uiputfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'保存图像文件','untitled.jpg');if ~isequal([sfilename,sfilepath],[0,0])sfilefullname=[sfilepath,sfilename];imwrite(handles.img,sfilefullname);elsemsgbox('取消保存','保存失败');end程序关键部分:通过[sfilename ,sfilepath]=uiputfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'保存图像文件','untitled.jpg')选择图像文件保存的路径与格式;然后,通过sfilefullname=[sfilepath ,sfilename];imwrite(handles.img,sfilefullname); 实现对图像的保存。

4.1.3退出程序function Exit_Callback(hObject, eventdata, handles)clc;close all;close(gcf);clear;4.2图像转化为灰度图像由于在MATLAB中较多的图像处理函数支持对灰度图像进行处理,故对图像进行灰度转化十分必要。

可利用rgb2gray(X)函数对其他图像进行灰度图像的转化。

实现程序段如下:function to_gray_Callback(hObject, eventdata, handles)global T %设计一个全局变量T,保存初始图像路径,以便之后的撤销操作axes(handles.axes2);T=handles.img;img=handles.img;if numel(size(img))>2C=rgb2gray(img);elseC=img;endimshow(C);handles.img=C;guidata(hObject,handles);4.3底片处理(反色)将图像变为底片并显示。

实现程序段如下:function negative_Callback(hObject, eventdata, handles)global Taxes(handles.axes2);T=handles.img;I=imcomplement(handles.img);imshow(I);handles.img=I;guidata(hObject,handles);4.4截图通过imcrop(x)函数来实现对图片某一区域的截取,截取的图片在右框中显示。

结合“保存为…”,可把截图处理后的图片保存在指定路径。

实现程序段如下:function Cut_Callback(hObject, eventdata, handles)global Taxes(handles.axes2);T=handles.img;x=imcrop(handles.img); %截图imshow(x);handles.img=x;guidata(hObject,handles);4.5亮度和对比度度调节4.5.1亮度调节实现程序段如下:function light_Callback(hObject, eventdata, handles)global Taxes(handles.axes2);T=handles.img;prompt={'调整倍数 ([0,1]:明 [1,~):暗)'};defans={'1'};p=inputdlg(prompt,'input',1,defans);p1=str2num(p{1});y=imadjust(handles.img,[ ], [ ],p1); %亮度调节imshow(y);handles.img=y;guidata(hObject,handles);4.5.2对比度调节实现程序段如下:function contrast_Callback(hObject, eventdata, handles) global Tstr=get(handles.contrast1,'value');axes(handles.axes2);T=handles.img;prompt={'请输入参数:'};defans={'1'};p=inputdlg(prompt,'input',1,defans);p1=str2num(p{1});switch strcase 1f=immultiply(handles.img,p1);imshow(f);handles.img=f;guidata(hObject,handles);case 2f=imdivide(handles.img,p1);imshow(f);handles.img=f;guidata(hObject,handles);end4.6图像的翻转与旋转4.6.1翻转实现程序段如下:function turn_Callback(hObject, eventdata, handles)global Tstr=get(handles.fanzhuan,'value');axes(handles.axes2);I=handles.img;if numel(size(I))>2switch strcase 1T=handles.img;b=I(:,:,1);c=I(:,:,2);d=I(:,:,3);I1(:,:,1)=fliplr(b);I1(:,:,2)=fliplr(c);I1(:,:,3)=fliplr(d);case 2T=handles.img;b=I(:,:,1);c=I(:,:,2);d=I(:,:,3);I1(:,:,1)=flipud(b);I1(:,:,2)=flipud(c);I1(:,:,3)=flipud(d);endimshow(I1);handles.img=I1;guidata(hObject,handles);elseswitch strcase 1T=handles.img;f=fliplr(I);case 2T=handles.img;f=flipud(I);endimshow(f);handles.img=f;guidata(hObject,handles);end程序关键部分:通过f=fliplr(handles.img); f=flipud(handles.img);分别实现左右镜像翻转与上下镜像翻转。