基于MATLAB的数字图像处理系统

上传人:时间****91 文档编号:153034491 上传时间:2022-09-17 格式:DOC 页数:9 大小:1.08MB
收藏 版权申诉 举报 下载
基于MATLAB的数字图像处理系统_第1页
第1页 / 共9页
基于MATLAB的数字图像处理系统_第2页
第2页 / 共9页
基于MATLAB的数字图像处理系统_第3页
第3页 / 共9页
资源描述:

《基于MATLAB的数字图像处理系统》由会员分享,可在线阅读,更多相关《基于MATLAB的数字图像处理系统(9页珍藏版)》请在装配图网上搜索。

1、基于MATLAB的数字图像处理系统摘要:数字图像处理技术是20世纪60年代发展起来的一门新兴学科,随着图像处理理论和方法的进一步完善,使得数字图像处理技术在各个领域得到了广泛应用,并显示出广阔的应用前景。MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或编程以完成各自的计算。MATLAB中集成了功能强大的图像处理工具箱。由于MATLAB语言的语法特征与C语言极为相似,而且更加简单,更加符合科技人员对数学表达式的

2、书写格式,而且这种语言可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以MATLAB在图像处理的应用中具有很大的优势。关键词:MATLAB,数字图像处理,GUI,一、 课程设计目的综合运用MATLAB工具箱实现图像处理的GUI程序设计。二、 课程设计要求1)熟悉和掌握MATLAB 程序设计方法2)掌握MATLAB GUI 程序设计3)学习和熟悉MATLAB图像处理工具箱4)学会运用MATLAB工具箱对图像进行处理和分析三、 课程设计的内容学习MATLAB GUI程序设计,利用MATLAB图像处理工具箱,设计和实现自己的Photoshop 。要求:按照软件工程方法,根据需求进行程序的功

3、能分析和界面设计,给出设计详细说明。然后按照自己拟定的功能要求进行程序设计和调试。 以下几点是程序必须实现的功能。1)图像的读取和保存。2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域进行截图,并显示该选择区域。5)图像直方图统计,要求显示直方图统计。四、 题目分析信息化社会中,计算机在各种信息处理中发挥着重要的作用。我们可以借助计算机,对数字图像进行处理,以达到不同的效果。根据题目的要求,除了实现要求的功能外,还有很多的功能需要用到。(1)、将一个RGB图像转换为灰度图像。(2)、可以对图

4、像做各种变换,如旋转等。五、 总体设计 由于要实现的功能并不是很多,所以在排版的过程中,把各个功能都安排在目录栏上,整体安排如下图5-1所示: 图5-1 整体安排总体的设计界面如下图5-2所示:图 5-2 总体设计界面六、 具体设计6.1、 文件6.1.1、打开为了让使用者更方便的使用,所以在设计的时候,通过对话框的形式来选择文件,选择uigetfile函数来实现,uigetfile函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件,由于这个GUI程序的操作对象是图像文件,所以设置这里的缺省后缀名为“.bmp”。Uigetfile函数的调用格式为name,path=yigetf

5、ile(), 在按下对话框中的执行按钮“打开”后,返回选择的文件名和路径,分别保存到“name”和“path”中。如果按下取消按钮或是发生错误,则返回值是0。 根据返回值的情况,如果是0,则弹出提示错误的对话框,否则,通过imread函数读出图像数据,把图像数据赋值给全局变量handles.img。6.1.2、保存同样也通过对话框的形式来保存图像数据,通过uigetfile函数选择文件名和路径,用getimage(gca)取出坐标2变换后的图像数据保存到变量i,最后用imwrite函数,把数据i存到指定的文件。6.1.3、退出退出比较简单,程序如下所示:clc;close all;close(

6、gcf); 6.2、 旋转 6.2.1、上下翻转函数flipud是实现一个二维矩阵的上下翻转,如a=1 2;3 4,经过该函数处理后,原矩阵变为3 4;1 2;所以利用该函数也可以对图像进行上下翻转处理,但由于该函数针对二维数据的处理,所以在写程序时,要对RGB图像和灰度图像分开处理,这就要用到isrgb函数来判断,如果是灰度图像,则可以直接用这个函数进行处理,否则就要对RGB图像进行降维处理, for k=1:3 y(:,:,k)=flipud(x(:,:,k);end 处理结果如图 6.2-1:图 6.2-1 图像上下翻转前后 6.2.2、左右翻转对图像的左右翻转也可以用fliplr函数来

7、处理,同样的,也要对灰度和彩色图像分开处理,处理结果如图6.2-2: 图 6.2-2 图像左右翻转前后6.2.3任意角度翻转 用函数imrotate来实现对图像的插值旋转。该函数的调用格式如下: Bimrotate(A,angle,method,crop) 其中,参数method用于指定插值的方法,可选的值可以有三种,分别为邻近插值,双线性插值,双三次插值,缺省时为邻近插值,参数angle代表旋转的角度。一般来说,旋转后的图像会比原图大,用户可以指定“crop”参数对旋转后的图像进行剪切(取图像的中间部分),使返回的图像与原图大小相同。执行结果为如图 6.2-.3: 图 6.2-3 图像45度

8、翻转前后6.3、 直方图统计 用imhist函数对图像数据进行直方图统计,x=imhist(handles.img(:,:,1); bar(horz,x); 其中,x矩阵的数据是0255灰度值的统计个数,如果直接对x矩阵数据进行图形图显示,由于有256个数据,在坐标系中就会很密集,为了更清楚的显示条形图,所以在程序设计时,把x数据进行部分提取,x1=x(1:10:256);horz=1:10:256;bar(horz,x1); 直方图显示图像分别如图6.3-1,6.3-2,6.3-3所示图 6.3-1R直方图 6.4、 编辑6.4.1、灰度由于RGB图像是三维图像,所以图像数据是一个三维数组,

9、为了显示灰度图像,把三维图像降为二维,可以只取其中的二维数据,实现方法程序为:y=(handles.img(:,:,1); %当然也可以选择(:,:,2) 或(:,:,3) imshow(y);但是这样的话,根据程序所选的不同,图像数据也不同,显示也就不一样。另一种方法就是,运用rgb2gray函数实现彩色图像到灰度图像的转换。程序为:y=rgb2gray(handles.img); imshow(y);这个程序只能用于RGB图像转换灰度图像,当原始图像本来就是灰度图像时,运行该程序时就会出错,但是使用者在使用时有时并不知道这些,为了使该程序更加完善,应该在使用者原先图像时灰度图像时使用该功能

10、时,应该要显示提示类信息。所以在开始时应该要有一个RGB图像或是灰度图像的判断过程。完整的程序如下: if isrgb(handles.img) y=rgb2gray(handles.img); imshow(y);else msgbox(这已经是灰度图像,转换失败);end如果原图是RGB,执行该操作的结果如图 6.4-1:图 6.4-1 图像灰度转换前后6.4.2、亮度用imadjust函数,其调用格式如下: g=imadust(f,low_in high_in,low_out high_out),gamma)gamma 表示映射性质,默认值是1 表示线性映射。由于该函数有五个参数需要输入

11、,为了方便用户改变,所以这里设计一个输入对话框,用户通过对话框把五个参数赋值给low_in high_in,low_out high_out,gamma这五个参数,如下一组命令建立了如图6.4-2所示的输入对话框:prompt=输入参数1,输入参数2,输入gamma;defans=0 0.7,0 1,1; p=inputdlg(prompt,输入参数,1,defans); 但是,这种方法并不能很好的让用户能够对图像进行任意的亮度和对比度变化调整,有时并不事先知道参数的值要多少,也不关心,而是任意调节的,直到满意为止。执行该操作,如调节框所示数值,结果如下图6.4-3:图 6.4-3 图像亮度调

12、节前后6.4.3、截图在MATLAB中,用函数imcrop实现对图像的剪切操作。该操作剪切的是图像中的一个矩形子图,用户可以通过参数指定这个矩形四个顶点的坐标,也可以交互地用鼠标选取这个矩形。Imcrop函数的调用格式如下: y=imcrop(handles.img);不管handles.img是三维的还是二维数据,该函数都能进行操作。图 6.4-4就是对三维图像的截图:图 6.4-4 图像截图前后七、 程序调试及结果分析在程序设计过程中,碰到很多的问题。1、 一个函数只能对灰度图像处理,不能对RGB图像处理,那么如何才能对RGB图像处理呢?这主要是对MATLAB函数的不够清楚,用到的很多函数

13、是针对二维数据的,而RGB图像的数据是一个三维矩阵,所以处理要与灰度图像不同,在开始的时候,我认为应该找一个能够应用于三维矩阵的函数,结果却没找到,后来想到可以把三维数据进行降维处理,同样使用二维的函数,只要是同样处理三次。比如,彩色图像的滤波处理,直方图均衡等。2、 本次设计存在一个比较大的问题,就是每次操作都是独立的,比如:要对图像旋转,然后在此基础上进行亮度调整,截图,等等就不行。我认为应该是整个程序设计过程中对变量的设置没有做好,应该每次操作后,把处理后的数据保存在一个全局变量,这样还要对处理后的数据进行在处理时,只要把这个全局变量作为原始数据带入就可。八、 心得体会在这次课程设计过程

14、中,感触很深,由于对MATLAB图像处理的函数不熟悉,导致自己走了很多的弯路,后来请教同学才找到MATLAB自带的现成函数,通过这次经历后,后来在设计其它程序时,尽量找MATLAB自带的现成函数,而不是一碰到问题就自己想算法,这样可以节省较多的时间。通过本次课程设计,使自己对MATLAB GUI设计流程有了比较深刻的体会,同时也了解了一般软件设计的过程。在设计过程中碰到了很多的问题,通过这些问题,使自己分析问题,解决问题的能力得到了较大的提高。九、 参考文献【1】 郑阿奇,曹戈,赵阳.MATLAB实用教程M.北京:电子工业出版社【2】 程卫国,冯峰,姚东,徐听.MATLAB5.3应用指南M.北

15、京:人民邮电出版社【3】 陈杨.MATLAB 6.X图像编程与图像处理M.西安:西安电子科技大学出版社十、 附录function varargout = two(varargin)% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, two_OpeningFcn, . gui_OutputFcn, two_OutputFcn, . gui_LayoutF

16、cn, , . gui_Callback, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before erzhi is made visible.func

17、tion wenjian_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.-%文件的程序-function file_Callback(hObject, eventdata, handles)-%文件打开程序function open_Callback(hObject, eventdata, handles) name,path=uigetfile(*.bmp,载入图像);if isequal(name,0)|isequal(path,0) er

18、rordlg(没有选中文件,出错); return;else x=imread(path,name); axes(handles.axes1); imshow(x); handles.img=x; handles.noise_img=x; guidata(hObject,handles)end-function baocun_Callback(hObject, eventdata, handles)%文件保存 filename,pathname = uiputfile(*.bmp,图片保存为);if isequal(filename,pathname,0,0) errordlg(没有保存,出错

19、); return;elsefile=strcat(pathname,filename);(handles.axes2);i=getimage(gca);imwrite(i,file);end-function xuanzhuan_Callback(hObject, eventdata, handles)-function shangxia_Callback(hObject, eventdata, handles)%上下翻转axes(handles.axes2);x=(handles.img);if isrgb(handles.img) for k=1:3 y(:,:,k)=flipud(x(

20、:,:,k);%上下翻转函数endimshow(y);else x=(handles.img); y=flipud(x); imshow(y);end-function zuoyou_Callback(hObject, eventdata, handles)%左右翻转axes(handles.axes2);if isrgb(handles.img) x=(handles.img);for k=1:3 y(:,:,k)=fliplr(x(:,:,k);%左右翻转函数endimshow(y);else x=(handles.img); y=fliplr(x); imshow(y);end-func

21、tion wenyi_Callback(hObject, eventdata, handles)%任意角度旋转axes(handles.axes2);prompt=输入参数1:;defans=30;p=inputdlg(prompt,输入参数,1,defans);p1=str2num(p1);y=imrotate(handles.img,p1); imshow(y);-function Rzhifang_Callback(hObject, eventdata, handles)%R直方图set(handles.axes2,HandleVisibility,ON);axes(handles.ax

22、es2);x=imhist(handles.img(:,:,1); %直方图统计x1=x(1:10:256);horz=1:10:256;bar(horz,x1);set(handles.axes2,xtick,0:50:255);-function Gzhifang _Callback(hObject, eventdata, handles)%G直方图set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);if isrgb(handles.img) x=imhist(handles.img(:,:,2); %直方图统计x1=x(1

23、:10:256);horz=1:10:256;bar(horz,x1);set(handles.axes2,xtick,0:50:255);else msgbox(这是灰度图像,旋转失败);end-function Bzhifang _Callback(hObject, eventdata, handles)%B直方图set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);if isrgb(handles.img) x=imhist(handles.img(:,:,3); %直方图统计x1=x(1:10:256);horz=1:10

24、:256;bar(horz,x1);%axis(0 255 0 150000);set(handles.axes2,xtick,0:50:255);%set(handles.axes2,ytick,0:15000);else msgbox(这是灰度图像,旋转失败);end-function bianju_Callback(hObject, eventdata, handles)clc;close all;close(gcf);-%编辑菜单的程序-function edit_Callback(hObject, eventdata, handles)-function huidu_Callback

25、(hObject, eventdata, handles)%灰度处理axes(handles.axes2);if isrgb(handles.img) y=rgb2gray(handles.img); %RGBimshow(y);else msgbox(这已经是灰度图像,转换失败);end -function liangdu_Callback(hObject, eventdata, handles)%亮度处理 prompt=输入参数1,输入参数2,输入gamma; defans=0 0.7,0 1,1; p=inputdlg(prompt,输入参数,1,defans); p1=str2num(p1); p2=str2num(p2); p3=str2num(p3); gamma=p3; x=(handles.img); y=imadjust(x,p1,p2,gamma); axes(handles.axes2); imshow(y);-function jietu_Callback(hObject, eventdata, handles)%截图set(handles.axes2,HandleVisibility,ON);axes(handles.axes2);y=imcrop(handles.img);imshow(y); handles.Timage=y;-

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!