1、*实践教学*兰州理工大学计算机与通信学院2012年秋季学期 图像处理 综合训练题 目: 图像分割程序设计 专业班级: 姓 名: 学 号: 指导教师: 成 绩: 22目 录摘 要2一、前言3二、算法分析与描述4三、详细设计过程5四、调试过程中出现的问题及相应解决办法6五、程序运行截图及其说明7六、简单操作手册10设计总结14参考资料15致谢16附录17摘 要图像分割是指把图像分解成各具特性的区域并提取出感兴趣目标的技术和过程,它是计算机视觉领域的一个重要而且基本的问题,分割结果的好坏将直接影响到视觉系统的性能。因此从原理、应用和应用效果的评估上深入研究图像分割技术具有十分重要的意义。本课题主要介
2、绍了图像分割的基本知识,研究了图像分割的两大类算法,即基于边缘检测的方法和基于区域生成的方法。采用MATLAB仿真了所有分割过程,得到了比较理想的分割结果,并分析了各个算法的优点和不足之处,以及适用于何种图像。 基于边缘检测方法种类繁多,主要介绍基于EDGE函数、检测微小结构、四叉树分解和阈值分割的方法实现对图像的边缘检测及提取。而基于区域的图像分割方法主要包括区域生长法和分裂-合并分割方法。通过多次的实验过后,总结出一般的图像分割处理可以用EDGE函数。而特定的图像应用阈值分割、检测微小结构和四叉树分解比较简单。 虽然近年来人们在图像分割方面做了大量的研究工作,但由于尚无通用的分割理论,因此
3、现已提出的分割算法大都是针对具体问题的,并没有一种适合于所有图像的通用的分割算法,有待于进一步解决。 图像分割;边缘检测;区域生成;阈值分割关键词:图像分割;边缘检测;区域生成;阈值分割一、前言图像分割是数字图像处理中的一项关键技术,它使得其后的图像分析,识别等高级处理阶段所要处理的数据量大大减少,同时又保留有关图像结构特征的信息。由于分割中出现的误差会传播至高层次处理阶段,因此分割的精确程度是至关重要的,多年来一直受到研究人员的高度重视,被认为是计算机视觉中的一个瓶颈。 图像分割是图像处理中的主要问题,也是计算机视觉领域低层次视觉中的主要问题,同时它又是一个经典难题。由于问题的重要性和困难性
4、,从七十年代起图像分割问题就吸引了很多研究人员为之付出了巨大的努力,但到目前为止还未存在一个通用的方法,也不存在一个判断分割是否成功的客观标准。近几年来,很多研究人员做了大量的工作,提出了很多实用的分割算法,随着统计学理论、模糊集理论、神经网络、形态学理论、小波理论等在图像分割中的应用日渐广泛,遗传算法、尺度空间、多分辨率方法、非线性扩散方程等近期涌现的新方法和新思想也不断被用于解决分割问题,国内外学者提出了不少针对一些具体应用的好的分割方法。本文针对当前主流的灰度图像分割算法进行了分析、分类、归纳和总结,指出了各类方法的优缺点,为人们在不同的应用场合及不同的图像数据条件选择不同的分割算法提供
5、了一定的依据。需要指出的是,由于从不同的角度将得到不同的分类结果,本文中涉及方法的分类并不是绝对的,而且许多分割方法还是多种简单方法的综合体,我们只能大致将它们分为属于最能反映其特点的某一类。二、算法分析与描述 图像分割(Image Segmentation)是把图像分割成若干个特定的、具有独特性质的区域并提取出感兴趣的目标的技术和过程。在对图像的研究和应用中,人们往往仅对图像的某些部分感兴趣(目标或背景),他们一般对应图像中的特定的、具有独特性质的区域。为了分析和识别目标,需要将他们分割并提取出来。 图像分割是由图像处理转到图像分析的关键。一方面,它是目标图像表达的基础,对特征测量有重要的影
6、响。另一方面,图像分割和分割的目标表达、特征提取和参数测量等将原始图像转化为数学表达形式,使得利用计算机进行图像分析和理解成为可能。本章主要介绍图像分割的基本概念和分割所用的主要方法。图像分割算法的研究一直受到人们的高度重视,到目前为止,提出的分割算法已经多达上千种,由于现有的分割算法粉肠多,所以将它们进行分类的方法也提出了不少。例如有把分割算法分成3类的:边缘检测、阈值分割区域生长。 三、详细设计过程3.1阈值化分割原则阈值化分割原则阈值化分割原则阈值化分割原则 阈值化分割算法是图像分割中应用数量最多的一类。简单地说,对灰度图像的阈值分割就是先确定一个处于图像灰度取值范围内的灰度阈值,然后将
7、图像中各个像素的灰度值与这个阈值相比较,并根据比较的结果将对应的像素划分为(分割)为两类:像素灰度大于阈值的一类,像素灰度值小于阈值的为另一类,灰度值等于阈值的像素可以归如这两类之一。分割后的两类像素一般分属图像的两个不同区域,所以对像素根据阈值分类达到了区域分割的目的。由此可见,阈值分割算法主要有两个步骤: (1) 确定需要分割的阈值; (2) 将分割阈值与像素点的灰度值比较,以分割图像的像素。 以上步骤中,确定阈值是分割的关键,如果能确定一个合适的阈值就可准确地将图像分割开来。阈值确定后,将阈值与像素点的灰度值比较和像素分割可对像素并行地进行,分割的结果直接给出图像区域。3.2区域生长的基
8、本思想是将具有相似性质的像素集合起来构成区域。具体先对每个需要分割的区域找一个种子像素作为生长的起点,然后将种子像素周围邻域中与种子像素有相同或相似性质的像素(根据某些事先确定的生长或相似准则来判定)合并到种子像素所在的区域中。将这些新像素当作新的种子像素继续进行上面的过程,直到再没有满足条件的像素可被包括进来。这样一个区域就长成了。 四、调试过程中出现的问题及相应解决办法 在实际因果能够区域生长方法时需要解决3个问题: 如何选择一组能正确代表所需区域的种子像素; 如何确定在生长过程中能将相邻像素包括进来的准则; 如何确定生长终止的条件和规则。 第一个问题通常可以根据具体图像的特点来选取种子像
9、素。例如,在红外图像检测技术中,通常目标的辐射都比较大,所以可以选择图像中最亮的像素作为种子像素。如果没有图像的先验知识,那么可以借助生长准则对像素进行相应的计算。如果计算结果可以看出聚类的情况,那么可以选择聚类中心作为种子像素。 第二个问题的解决不但依赖于具体问题的特征,还与图像的数据类型有关。如果图像是RGB彩色图像,那么如果使用单色准则就会影响分割结果。另外,还需要考虑像素间的连通性是否有时会出现无意义的分割结果。 一般生长过程在进行到再没有满足生长准则需要的像素时停止。但常用的基于灰度、纹理、彩色的准则大都基于图像中的局部性质,并没有充分考虑生长的“历史”。为增加区域,长的能力长需要考
10、虑一些与尺寸、形状等图像和目标的全局性质有关的准则, 在这种情况下需对分割结果建立一定的模型或辅以一定的先验知识。五、程序运行截图及其说明1.处理前后原图: 图5.1 2.区域生长处理前后: 图5.23基于灰度的阀值处理前后: 六、简单操作手册1.图6.12.图6.23.图6.3 4.图6.45.图6.56.图6.6设计总结在这两周的计算机图像处理综合训练中,我的题目是:图象分割程序设计。通过该题目的设计,我加深了对课本中所学知识的理解,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。刚开始拿到自己的题目时,大家脸上都露出了茫然的表情,感觉无从下手,但在老师耐心的启发和开导下,终
11、于摸着了头绪,在一番深思熟虑和查阅资料之后终于形成了自己的思路。但这只是刚刚开始,经过上机实现才发现自己的想法漏洞百出,尽管如此,同学们并没有放弃,在老师的指导和大家坚持不懈的调试下,终于将一个个问题拿下,程序运行成功的那一刻,每个同学都无比激动。两周的综合训练很短暂,但其间的内容是很充实的,我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,通过这次综合训练,我不仅对课本的基本知识有了进一步的掌握,还对其他方面的知识也有所了解,所有这些都使我受益匪浅!参考资料1 朱虹. 数字图像处理基础M. 科学出版社, 20052 R C.Gonzalez, R E.W
12、oods著,阮秋琦,阮宇智等译.数字图像处理(第2版).北京:电子工业出版社,20033 K.R.Castleman. 数字图像处理.北京:电子工业出版社,20024 章毓晋.图像处理与分析-图像工程(上册),清华大学,20015 何斌等编著.Visual C+数字图像处理.人民邮电出版社,2002 6 张宏林编著.Visual C+数字图像模式识别技术及工程实践.人民邮电出版社,2003.7 黄维通.Visual C+面向对象与可视化程序设计.清华大学出版社,20038 R C.Gonzalez, R E.Woods, S L. Eddins著,阮秋琦,阮宇智等译.数字图像处理(MATLAB
13、版).北京:电子工业出版社,2005 致谢首先感谢我的指导老师徐志刚老师,他在我的综合训练过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的计算机图像处理老师和我的C+面向对象老师在以往的基础课学习中为我打下良好的基础,这是我这次综合训练能够顺利完成的前提。还有我的同学,在设计过程与完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此表示感谢。附录function varargout = ma(varargin)% MA MATLAB code for ma.fig% MA, by itself, creates a n
14、ew MA or raises the existing% singleton*.% H = MA returns the handle to a new MA or the handle to% the existing singleton*.% MA(CALLBACK,hObject,eventData,handles,.) calls the local% function named CALLBACK in MA.M with the given input arguments.% MA(Property,Value,.) creates a new MA or raises the%
15、 existing singleton*. Starting from the left, property value pairs are% applied to the GUI before ma_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to ma_OpeningFcn via varargin.% *See GUI Options on GUIDEs Tools menu.
16、Choose GUI allows only one% instance to run (singleton).% See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help ma % Last Modified by GUIDE v2.5 10-Jan-2013 19:28:42 % Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct(gui_Name, mfilename,
17、 . gui_Singleton, gui_Singleton, . gui_OpeningFcn, ma_OpeningFcn, . gui_OutputFcn, ma_OutputFcn, . gui_LayoutFcn, , . gui_Callback, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);end if nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_
18、State, varargin:);end% End initialization code - DO NOT EDIT % - Executes just before ma is made visible.function ma_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version o
19、f MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to ma (see VARARGIN) % Choose default command line output for mahandles.output = hObject; % Update handles structureguidata(hObject, handles); % UIWAIT makes ma wait for user response (see UIRESUME)
20、% uiwait(handles.figure1); % - Outputs from this function are returned to the command line.function varargout = ma_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future versio
21、n of MATLAB% handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structurevarargout1 = handles.output; % -function file_Callback(hObject, eventdata, handles)% hObject handle to file (see GCBO)% eventdata reserved - to be defined in a future versi
22、on of MATLAB% handles structure with handles and user data (see GUIDATA) % -function quyu_Callback(hObject, eventdata, handles)% hObject handle to quyu (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global A0A0=
23、getimage;axes(handles.axes2);%A0=imread(lena.jpg);%seed=100,220;%thresh=15;%A=rgb2gray(A0);%A=imadjust(A,min(min(double(A)/255,max(max(double(A)/255,);A=double(A); %B=A;%ABr,c=size(B); % rcn=r*c;%pixel_seed=A(seed(1),seed(2);%q=seed(1) seed(2);%qtop=1;%flagM=zeros(r,c);%M(seed(1),seed(2)=1;%10count=
24、1;%while top=0%r1=q(1,1);%c1=q(1,2);%p=A(r1,c1);%dge=0;for i=-1:1%for j=-1:1if r1+i0 & c1+j0%if abs(A(r1+i,c1+j)-p)=n%ntop=1;endq=q(2:top,:);top=top-1;endimshow(B,);%title();handles.img=B;guidata(hObject,handles); % -function feng_Callback(hObject, eventdata, handles)% hObject handle to feng (see GC
25、BO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global Iaxes(handles.axes2);I=getimage;if ndims(I) = 3I = rgb2gray(I);endfxy = imhist(I, 256); %figure;%subplot(2, 2, 1); %imshow(I, ); %title()%subplot(2, 2, 2); plot(fxy
26、); %title()p1 = Input Num:;p2 = 180;p3 = inputdlg(p1,Input Num:1256,1,p2);p = str2num(p31); p = p/255;bw = im2bw(I, p); %subplot(2, 2, 3); imshow(bw); %title()handles.img=bw;guidata(hObject,handles); % -function open_Callback(hObject, eventdata, handles)% hObject handle to open (see GCBO)% eventdata
27、 reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)filename,pathname=uigetfile(*.jpg;*.bmp;*.tif;*.*,);if isequal(filename,0)|isequal(pathname,0) errordlg(,); return;else file=pathname,filename; global S %S S=file; x=imread(file); set(h
28、andles.axes1,HandleVisibility,ON); axes(handles.axes1); imshow(x); set(handles.axes1,HandleVisibility,OFF); axes(handles.axes2); imshow(x); handles.img=x; guidata(hObject,handles);end % -function save_Callback(hObject, eventdata, handles)% hObject handle to save (see GCBO)% eventdata reserved - to b
29、e defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)sfilename ,sfilepath=uiputfile(*.jpg;*.bmp;*.tif;*.*,untitled.jpg); if isequal(sfilename,sfilepath,0,0) sfilefullname=sfilepath ,sfilename; imwrite(handles.img,sfilefullname); else msgbox(,); end % -function exit_Callback(hObject, eventdata, handles)% hObject handle to exit (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)clc;close all;close(gcf);clear;