基于Matlab的数字图像处理系统设计Word文件下载.docx
《基于Matlab的数字图像处理系统设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于Matlab的数字图像处理系统设计Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。
可利用软件及图像采集与传输设备,采集图像并实现点对点的数字图像传输,可以观察理解多种图像处理技术的效果和差别,其中包括图像的灰度直方图及其变换、锐化、平滑、滤波、伪彩、轮廓提取与增强、图像格式转换及其文件结构。
1.2.2国外研究现状
目前大量的图像处理软件如PHOTOSHOP,PAINTSHOP等都是基于广告策划和图像修饰处理而设计的应用软件,针对图像处理技术基本知识的理解与掌握以及相关处理方法研究的软件甚少,不适合学习研究使用。
随着计算机辅助设计的日益提高和成熟,用于学习与研究的软件也越来越多。
如美国SouthernIllinoisUniversity开发的CVIPtools计算机视觉与图像处理实验软件就是专门针对图像处理技术的实验软件,为初学者提供了一个消化理论知识的实验环境。
CVIPtools计算机视觉与图像处理实验软件,主要用于计算机数字图像分析和处理,主要宗旨是让图像处理的初学者、学生、老师和其它研究人员探索计算机数字图像处理的巨大力量。
最新Windows版本的CVIPtools提供使用者四种层次应用方式:
算法代码层,公共对象模块(组件)界面层,cvipimage层和图形用户界面(GUI)。
最下面的阶层算法代码层主要是基于以前的版本CVIPtools,包括所有的图像、数据处理程序和功能,是用标准C语言写的。
最上的阶层为CVIPtoolsGUI,可以让生手实验一些图像处理的工具,而不需具备程序设计的能力。
目前国外很多大学、研究院在数字图像处理的实验研究中都应用此软件。
1.3数字图像处理研究的内容
一般的数字图像处理的主要目的集中在图像的存储和传输,提高图像的质量,改善图像的视觉效果,图像理解以及模式识别等方面。
新世纪以来,信息技术取得了长足的发展和进步,小波理论、神经元理论、数字形态学以及模糊理论都与数字处理技术相结合,产生了新的图像处理方法和理论。
数字图像处理技术主要包括:
1、图像增强
目前图像增强技术根据其处理的空间不同,可分为空域法和频域法两大类,前者根据在图像所在的像素空间进行处理,后者是通过对图像进行傅里叶变换后在频域上间接进行的。
2、图像恢复
图像恢复,也称为图像还原,其目的是尽可能地减少或者去除数字图像在获取过程中的降质,恢复被退化图像的本来面貌,从而改善图像质量,以提高视觉观察效果。
3、图像变换
图像变换就是把图像从空域转换到频域,对原图像函数寻找一个合适变换的数学问题,众多图像变换方法不断出现,从傅里叶变换发展到余弦变换,再到现在非常流行的小波变换,图像变换分为可分离变换和统计变换两大类。
4、图像压缩
数字图像需要很大的存储空间,因此无论传输或存储都需要对图像数据进行有效的压缩。
其目的是生成占用较少空间而获得与原图十分接近的图像
5、图像分割
图像分割的目的是把一个图像分解成它的构成成分,图像分割是一个十分困难的过程。
图像分割的方法主要有2类:
一种是假设图像各成分的强度值是均匀的,并利用这个特性,这种方法的技术有直方图分割,另外一种方法是寻找图像成分之间的边界,利用的是图像的不均匀性,基于这种方法的的技术有梯度法分割。
6、边缘检测
边缘检测技术用于检测图像中的线状局部结构。
大多数的检测技术应用某种形式的梯度算子。
边缘检测广泛应用于图像分割、图像分类、图像配准和模式识别,在大多数的实际应用中,边缘检测是当做一个局部滤波运算完成的。
第二章数字图像处理技术软件MATLAB简介
2.1MATLAB软件简介
MATLAB是Mathworks公司于推出的一套高性能的数值计算和可视化软件,其全称是MatrixLaboratory,亦即矩阵实验室,经过多年的逐步发展与不断完善,现已成为国际公认的最优秀的科学计算与数学应用软件之一,是近几年来在国内外广泛流行的一种可视化科学计算软件。
它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便的、界面友好的用户环境,而且还具有可扩展性特征,具有信号处理、控制系统、神经网络、图像处理、小波分析等30多个具有专门功能的工具箱,工具箱内的函数源程序也是开放性的,多为M文件,用户可以查看这些文件的代码并进行更改,MATLAB支持用户对其函数进行二次开发,用户的应用程序也可以作为新的函数添加到相应的工具箱中。
MATLAB中的数字图像是以矩阵形式表示的,这意味着MATLAB强大的矩阵运算能力用于图像处理非常有利。
矩阵运算的语法对MATLAB中的数字图像同样适用。
2.2.MATLAB的主要优缺点
2.2.1MATLAB的主要优点
1、界面友好,编程效率高
MATLAB是一种以矩阵为基本变量单元的可视化程序设计语言,它的语法结构简单,数据类型单一,命令表达方式接近于常用的数学公式。
不仅能免去大量的经常反复的基本数学运算,而且它的编译和执行速度都远远超过了采用C和Fortran语言设计的程序。
2、功能强大,可扩展性强
MATLAB语言不但提供了科学计算、数据分析与可视化、系统仿真等强大的功能,而且具有可扩展性特征,具有自动控制、信号处理、图像处理、模糊逻辑、神经网络、小波分析等30多个具有专门功能的MATLAB工具箱。
工具箱中的函数可以互相调用,也可以由用户自己更改
3、易学易用性、高效性
MATLAB不需要用户有高深的数学知识和程序设计能力,不需要用户深刻了解算法及编程技巧。
MATLAB语句功能十分强大,一条语句可完成十分复杂的任务,大大加快了工程技术人员从事软件开发的效率。
2.2.2 MATLAB的缺点
1、MATLAB是一种解释性语言,对于实时性要求较高的领域,如自动控制、信号处理等,其实时效率是较差的。
2、MATLAB程序不能脱离其环境运行,因此它不能被用于开发商用软件。
3、程序可以被直接看到程序的源代码,因而不利于算法和数据的保密。
2.3MATLAB图像处理工具箱简介
MATLAB的图像处理工具箱功能十分强大,支持的图像文件格式丰富,如*.BMP、*.JPEG、*.GIF、*.TIFF、*.PCX、*.HDF、*.XWD、*.PNG等。
MATLAB图像处理工具箱支持四种图像类型,分别为真彩色图像、索引色图像、灰度图像、二值图像,由于有的函数对图像类型有限制,这四种类型可以用工具箱的类型转换函数相互转换。
MATLAB提供了15类图像处理函数,涵盖了包括近期研究成果在内的几乎所有的图像处理方法。
这些函数按其功能可分为:
图像显示;
图像文件I/O;
几何操作;
像素和统计处理;
图像分析;
图像增强;
线性滤波;
线性二元滤波设计;
图像变换;
邻域和块处理;
二进制图像操作;
区域处理;
颜色映像处理;
颜色空间变换;
图像类型和类型转换。
利用这些图像处理工具箱,并结合其强大的数据处理能力,我们可把精力集中在算法研究上,大大提高了工作效率。
而且,在测试这些算法时既可方便地得到统计数据,同时又可得到直观图示。
2.4MATLAB支持的图像类型及其转换分析
1、索引图像
索引图像包括一个数据矩阵A,一个颜色映射矩阵B。
其中B是一个包含3列和若干行的数据阵列。
B矩阵的每一行分别表示红色、绿色和蓝色的颜色值。
在MATLAB中,索引图像是从像素值到颜色映射表值的直接映射。
像素颜色由数据矩阵A作为索引指向矩阵B进行索引。
2、灰度图像
MATLAB中,一幅灰度图像是一个数据矩阵I,其中I的数据均代表了在一定范围内的颜色灰度值。
MATLAB把灰度图像存储为一个数据矩阵,该数据矩阵中的元素分别代表了图像中的像素。
矩阵中的元素可以是双精度的浮点数类型、8位或16位无符号的整数类型。
大多数情况下,灰度图像很少和颜色映射表一起保存。
但是在显示灰度图像时,MATLAB仍然在后台使用系统预定义的默认的灰度颜色映射表。
3、二值图像
与灰度图像相同,二值图像只需要一个数据矩阵,每个像素只取两个灰度值。
二值图像可以采用uint8和double类型存储,工具箱中以二值图像作为返回结果的函数都使用uint8类型。
4、RGB图像
RGB图像,即真彩色图像,在MATLAB中存储为n×
m×
3的数据矩阵。
数组中的元素定义了图像中每一个像素的红、绿、蓝颜色值。
需要指出的是,RGB图像不使用Windows颜色映射表。
像素的颜色保存在像素位置上的红、绿、蓝的强度值的组合来确定。
图像文件格式把RGB图像存储为24位的图像,红、绿、蓝分别占8位。
这样可以有约1000万种颜色
5、图像序列
MATLAB的图像处理工具箱中还支持将多帧图像连接成图像序列。
图像序列是一个四维的数组,图像帧的序号在图像的长、宽、颜色深度之后构成第四维。
在MATLAB中,各种图像类型之间的转换关系如图2.1所示:
图2.1图像类型间的转换
第三章:
图像处理系统的详细设计
用MATLAB对图像进行处理是当前科技领域的一个重要的课题,它采用的是用一组有序的灰度或彩色数据元素构成图像,数组的每一个元素对应于图像的一个像素值。
这样MATLAB就可以利用其强大的矩阵计算功能实现对图像的数字处理。
本案所设计的系统主要是利用MATLAB所提供的图形用户界面(GUI),实现一个可视的面向对象的操作界面。
3.1设计原则
由于要求不同,设计出来的界面也就千差万别。
但是,自从人们开始设计图形界面以来,界面设计的评判标准却没有太大的变化。
简单说来,一个好的界面应遵从以下三个原则:
简单性、一致性、习常性。
1、简单性
设计界面时,应力求简洁、直接、清晰地体现出界面的功能和特征。
那些可有可无的功能应尽量删去,以保持界面的清洁。
2、一致性
所谓一致性包含两层意义:
一是自己开发的界面风格要尽量一致;
二是新设计的界面要与其他已有的界面风格不要截然相左。
这是因为用户在初次使用新界面时,总是习惯于凭借经验进行试探。
3、习常性
设计界面时,应尽量使用人们所熟悉的标志和符号。
用户可能并不了解界面的具体含义及操作方法,但他也可以根据熟悉标志做出正确猜测,自学入门。
4、其他考虑因素
除了以上对界面的静态要求外,还应注意界面的动态性能。
如对用户操作的响应要迅速、连续。
3.2设计的一般步骤
1、分析界面所要求实现的主要功能,明确设计任务。
2、在稿纸上绘出界面草图,并对其进行审查。
3、按照构思的草图,上机制作静态界面,并进行检查。
4、编写界面动态功能的程序,对其功能进行逐项检查。
3.3系统功能的模块设计
根据当前图像处理系统的总体设计样式和要求,该系统主要包括文件、工具、编辑、图像、调色、图像类型转换、颜色空间转换、正交变换等模块。
其模块图如3.1所示:
图3.1系统功能框图
3.4窗口界面的实现
该系统界面的设计主要是利用MATLAB所提供的GU(IGraphUserInterface)向导设计控件而完成的,该向导可以实现多种控件的设计,给用户提供了一种友好的交互方式,同时也给操作带来很多方便。
图形用户界面GUI是包含图形对象(如图形窗口、菜单、控件、文本)的用户界面,用户以某种方式选择或者击活这些对象会发生变化或引起动作。
1、启动GUI的方法
启动图形用户界面的方法有很多种,例如可以利用工具栏上的命令按钮,也可以采用菜单和命令的方式。
在本人设计的案例中采用的是命令方式:
在命令窗口直接输入guide命令,弹出的窗口如图3.2所示:
图3.2GUI启动界面
在弹出的guidequickatenewgui选项卡里面的start窗口中选择creBlankGUI选项,这样就可以进入图形用户界面来设计我们的系统静态界面。
图3.3Guide界面
上图就是Guide提供的图形界面设计工具集,在此界面下就可以利用控件组件、文本菜单、排列工具等对系统的界面进行设计。
该系统的静态界面如图3.4所示:
图3.4 Guide设计界面
当静态界面设计完成以后,对该界面进行保存,此时Guidie将自描述,动生成两个发布文件,分别是.fig文件和.m文件。
Fig文件:
该文件包括图形窗口及其所有后裔的完全包括:
该文件包括GUI设计、控制函数以及为子函数的用户控uEdit对系统的菜所有对象的属性值。
Fig文件是一个二进制文件,调用hgsave命令或界面设计编辑器的file菜单save选项保存图形窗口时将产生该文件。
Fig文件最有用的地方之一就是对象句柄的保存和引用,可以使用open、openfig和hgload命令打开一个后缀为.fig的文件。
M文件件回调函数,主要用于控制GUI展开时的各种特征。
这个M文件可以分为GUI初始化和回调函数两个部分,用户控件的回调函数根据用户与GUI的具体交互方式分别调用。
设计好系统的界面以后,接下来就要利用Men单进行设计,创建菜单的第一步就是利用GUI的工具栏上的MenuEdit按钮启动相应的窗口。
然后使用NewMenu工具栏来创建菜单,然后可以指定菜单的属性。
例如可以设置菜单的标签、分隔符、选种模式以及回调函数字符串。
第二步就是创建菜单项。
可以使用NewMenuItem工具来添加菜单项,每一个菜单项也可以有级联的子菜单项。
如果想要定义快捷菜单可以使用NewContextMenu工具来进行创建。
本系统的菜单创建效果如图3.5所示:
图3,5 菜单
3.5各个模块的实现
3.5.1文件模块
在文件模块中主要是包括对图像文件的打开、保存、打印设置和退出等操作。
其中对图像文件如何读取以及如何写入是本模块的重点,下面主要介绍这两个功能的实现。
1、打开
对于打开菜单,主要利用的是MATLAB所提供的uigetfile()标准读盘文件处理对话框来选择要打开的图像,然后用imread()函数实现对图像文件的读取。
其主要代码如下:
functionopen_Callback(hObject,eventdata,handles)
[filename,pathname]=uigetfile({'
*.jpg'
;
'
*.bmp'
*.tif'
}
S=imread([pathnamefilename]);
handles.S=S;
axes(handles.axes1);
imshow(S);
handles.output=hObject;
guidata(hObject,handles);
2、保存
保存菜单的实现主要应用uiputfile()标准写盘处理对话框来实现,其代码如下:
functionsave_Callback(hObject,eventdata,handles)
globalhresult;
[filename,pathname,filterindex]=uiputfile(...
{‘*.bmp;
*.jpg;
*.tif’,’Picturestyles(*.bmp;
*.tif)’;
‘*.bmp’,’Bitmap-files(*.bmp)’;
...
'
J-PEG(*.jpg)'
Gif-files(*.tif)'
*.*'
'
AllFiles(*.*)'
},...
Saveas'
);
Ifisequal([ilename,pathname],[0,0])
return
else
File=fullfile(pathname,filename);
saveas(hresult,File)
End
3.5.2编辑模块的实现
该模块主要是对所要处理的图像进行一些常规的编辑操作,可以实现对图片进行放大和缩小,也可以对图片进行剪切和旋转。
当然还可以实现很多有关编辑的操作,但是无论哪一种操作,其关键是如何获得该图像的句柄。
句柄实际上就是分配给每个对象的数字标识,每次创建对象时,MATLAB就会自动为它创建一个唯一的句柄,这样只要我们能找到该句柄,就能对该对象进行操作。
在MATLAB中,图形对象是一幅图中很独特的成分,它可以被单独地操作。
由图形命令产生的每一件东西都是图形对象,它们包括图形窗口不仅仅说是图形,还有坐标轴、线条、曲面、文本和其它。
这些对象按父对象和子对象组成层次结构。
计算机屏幕是根对象,并且是所有其它对象的父对象。
图形窗口是根对象的子对象;
坐标轴和用户界面对象是图形窗口的子对象;
线条、文本、曲面、补片和图象对象是坐标轴对象的子对象。
这种层次关系在图3.6中给出
图3.6对象层次结构
根对象可包含一个或多个图形窗口,每一个图形窗口可包含一组或多组坐标轴。
所有其它的对象(除了uicontrol和uimenu外)都是坐标轴的子对象,并且在这些坐标轴上显示。
所有创建对象的函数当父对象或对象不存在时,都会创建它们。
例如,如果没有图形窗口,plot(rand(size([1:
10])))函数会用缺省属性创建一个新的图形窗口和一组坐标轴,然后在这组坐标轴内画线。
每次创建一个对象时,就为它建立一个唯一的句柄。
计算机屏幕作为根对象常常是0。
Hf_fig=figure命令建立一个新的图形窗口,变量Hf_fig中返回它的句柄值。
图形窗口的句柄为整数,通常显示在图形窗口标题条中。
其它对象句柄是MATLAB满精度的浮点值。
所有产生对象的MATLAB函数都为所建立的每个对象返回一个句柄(或句柄的列向量)。
这些函数包括plot,mesh,surf及其它。
有一些图形由一个以上对象组成。
比如,一个网格图由一个曲面组成,它只有一个句柄;
而waterfall图形由许多线条对象组成,每个线条对象都有各自的句柄。
例如,Hl_wfall=waterfall(peaks(20))对线条返回一个包含着20个句柄的列向量。
在MATLAB中常用获得句柄的函数有以下几种
gcf:
获取当前图形窗口的句柄
gca:
获取当前坐标轴的句柄
gco:
获取当前对象的句柄
gcbo:
获取当前正在调用的对象的句柄
gcbf:
获取包括正在执行调用的对象的图形的句柄
这样我们就可以使用这几个函数获得要操作对象的句柄。
例如旋转菜单功能的实现就可以利用这样的代码实现:
functionxuanzhuan_Callback(hObject,eventdata,handles)
h=getimage(gco);
%获得当前对象的句柄
j=imrotate(h,-15);
%把图像以15度为单位顺时针旋转,并把该图象的句柄付给jimshow(j)%显示旋转后的图像在这个例子中,其中h=getimage(gco)语句的作用就是利用getimage()函数获取当前图形对象的句柄,并把该句柄的值赋给了变量h。
以后只要是对该图像操作只要找到句柄h即可。
本例子是只要单击一次编辑菜单的旋转命令,当前的图像就会顺时针旋转15度。
原始图像 旋转后图像
图3.7旋转
其他编辑功能的实现与上边的例子大致相同,故一些具体的实现省略,详见程序的代码。
3.5.3图像模块的实现
在MATLAB中,一幅图像可能包含一个数据矩阵,也可以包含一个颜色映射矩阵。
因此MATLAB所能够处理的4种基本图像就是:
索引图像、灰度图像、RGB图像、二进制图像。
该模块的主要功能就是把一幅真色彩图像显示成上述四种图像。
该模块主要包括灰度、灰度倒置、腐蚀、膨胀、边界图等功能。
1、灰度:
灰度变换是一种简单而实用的方法,它可以使图像的动态范围增大,图像的对比度扩展,图像变清晰,特征明显,是图像增强的重要手段之一。
它可分为比例线性变换、分段线性变换、非线性灰度变换。
本例子采用的是分段线性变换。
对感兴趣的(20~180)区间进行灰度变换,程序代码如下:
x1=getimage(gco);
figure
imshow(x1)
f0=0;
g0=0;
f1=20;
g1=10
f2=180;
g2=230;
f3=255;
g3=255;
figure,plot([f0,f1,
r1=(g1-g0)/(f1-f0);
b1=g0-r1*f0;
r2=(g2-g1)/(f2-f1);
b2=g1-r2*f1;
r3=(g3-g2)/(f3-f2);
b3=g2-r3*f2;
[m,n]=size(x1);
x2=double(x1);
for