图像校正及分割处理软件设计与实现-模式识别与智能系统--本科毕设论文

上传人:仙*** 文档编号:202810211 上传时间:2023-04-23 格式:DOC 页数:21 大小:1.41MB
收藏 版权申诉 举报 下载
图像校正及分割处理软件设计与实现-模式识别与智能系统--本科毕设论文_第1页
第1页 / 共21页
图像校正及分割处理软件设计与实现-模式识别与智能系统--本科毕设论文_第2页
第2页 / 共21页
图像校正及分割处理软件设计与实现-模式识别与智能系统--本科毕设论文_第3页
第3页 / 共21页
资源描述:

《图像校正及分割处理软件设计与实现-模式识别与智能系统--本科毕设论文》由会员分享,可在线阅读,更多相关《图像校正及分割处理软件设计与实现-模式识别与智能系统--本科毕设论文(21页珍藏版)》请在装配图网上搜索。

1、图像校正及分割处理软件设计与实现图像分析与模式识别课程期末大作业报告课程名称: 图像分析与模式识别 学 院: 信息工程与自动化学院 专 业: 计算机技术 年 级: 2014级 学生姓名: 樊祥锰 学生学号: 2014704101 指导教师: 刘 辉 2015-01-01昆明理工大学信息工程与自动化学院 目录图像校正及分割处理软件设计与实现11 软件需求11.1 操作界面需求分析11.2 图像几何校正需求分析11.2 ISODATA聚类算法的图像分割需求分析22 算法原理及流程图22.1 Hough变换22.1.1 Hough变换原理22.1.2 图像几何校正流程32.2 ISODATA算法原理

2、32.2.1 ISODATA算法原理步骤32.2.1 ISODATA算法流程图53 程序设计框图64 实验结果及分析74.1 图像几何74.1.1 支票图像几何校正结果74.1.1 支票图像几何校正结果分析84.2 图像分割84.2.1图像分割结果84.2.1图像分割结果分析10附录:11附录一:图像几何校正代码11附录一:ISODATA聚类算法图像分割代码11附录一:MATLAB的GUI操作界面代码17 图像分析与模式识别课程期末大作业报告姓名:赵世瑜 学号:2013204067图像校正及分割处理软件设计与实现摘要:设计一种图像几何校正及图像分割处理软件,实现对倾斜支票图像校正为水平,及对已

3、给的图像进行分割。图像几何校正主要通过边缘检测、Hough变换、求倾斜角、图像旋转等算法实现;图像分割采用ISODATA聚类算法实现。实验结果表明,实现了对倾斜支票图像几何校正和对图像的分割功能。关键词:边沿检测;Hough变换、图像旋转、ISODATA算法;图像分割;1 软件需求需求分析是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括整个系统所要实现的功能。根据题目,设计需要编写带有操作界面的图像处理软件,功能包含图像几何校和基于ISODATA聚类算法的图像分割。开发工具使用MATLAB。根据MATLAB的特点及需要实现的软件功能,软件需求分析如下:1.1 操作界面需求分析软件实现的

4、功能是图像处理,因此操作界面中需要一个按钮,用于选择待处理的图像,称为“图像选择”按钮;选择的原始图像需要在操作界面中显示,因此需要一个用于显示原始图像的坐标控件;由于软件需要实现多功能,需要一个下拉框实现功能的选择;一个开始功能处理的按钮,称为“开始处理”按钮;一个用于显示图像处理结果的坐标控件。最后需要一个退出操作界面的按钮,称为“退出”按钮。1.2 图像几何校正需求分析原始图像在拍照时出现了倾斜,需要将图像校正,消除倾斜。通过对图像的观察,图像是一张支票,支票上存在表格。因此想法是通过检测支票表格边框线的倾斜角,就是整张图像的倾斜程度,然后根据这个倾斜角旋转,便可得到校正的水平图像。要检

5、测支票图像表格边框直线。需要对图像的边缘进行检测,图像的边缘检测方法很多,如:sobel算子边缘检测,prewitt算子边缘检测,roberts算子边缘检测,log算子边缘检测,canny算子边缘检测等,由于原图的噪声并不是很严重,因此上面这些边缘检测办法都能胜任,这里使用log算子进行边缘检测,为了适应其它边缘检测方法,本设计需要尽量在改变边缘检测方法时尽可能少地修改代码。边缘检测后,采用Hough变换提取直线,然后在提取的直线上找两个点,计算出直线的倾斜角度。最后根据这个倾斜角度对图像进行旋转。1.2 ISODATA聚类算法的图像分割需求分析ISODATA聚类算法的图像分割功能,ISODA

6、TA比较复杂,因此主要是ISODATA算法的实现。设计的处理过程是,在操作界面选择了待处理的图像后,选择图像分割功能,点击开始处理按钮后,弹出图像,通过鼠标左键选择聚类中心点,然后按回车键或者单击鼠标右键确认后,调用ISODATA对图像进行分割。2 算法原理及流程图设计的功能有图像几何和基于ISODATA聚类算法的图像分割。图像几何校正功能中,采用Hough变换对支票表格边框直线进行检测;ISODATA聚类算法的图像分割功能和核心是ISODATA聚类算法。对其原理及实现的流程图分析如下。2.1 Hough变换哈夫变换是利用图像全局特性而直接检测目标轮廓,就可将边缘像素连接起来组成区域封闭边界的

7、一种方法。在预先知道区域形状的条件下,利用哈夫变换可以方便地得到边界曲线而将不连续的边缘像素点连接起来。2.1.1 Hough变换原理哈夫变换的基本思想是点-线对偶性。图像变换前在图像空间,变换后在参数空间。在图像空间XY里,所有过点(x, y)的直线都满足方程: y=px+q写成: q=-px+y (1)可以认为代表参数空间PQ中过点(p,q)的一条直线。图1 图像空间 图2 参数空间图像空间的点(xi, yi)和(xj, yj)对应参数空间两条直线,它们的交点(p, q)对应图像空间XY中过(xi, yi)和(xj, yj)的直线,这样,图像空间XY中过(xi, yi)和(xj,yj)的直

8、线上的所有点都对应参数空间PQ里的一条直线,这些直线相交于点(p, q) 。 在图像空间中共线的点对应在参数空间中相交的线,反过来,在参数空间中交于同一个点的所有直线在图像空间中都有共线的点相对应,这就是点-线对偶性。根据点-线对偶性,当给定图像空间的一些边缘点,就可以通过哈夫变换确定连接这些点的直线方程,哈夫变换把图像空间中的直线检测问题转换到参数空间里点检测的问题。2.1.2 图像几何校正流程图像几何校正中使用的Hough变换算法采用MATLAB已经封装好的hough函数,这里不要详细阐述其流程,整个图像几何校正的流程如图3所示:图3 图像几何校正流程图2.2 ISODATA算法原理ISO

9、DATA算法的思想是,在每轮迭代过程中,样本重新调整类别之后计算类内及类间有关参数,并和设定的门限比较,确定是两类合并为一类还是一类分裂为两类,不断地“自组织”,以达到在各参数满足设计要求条件下,使各模式到其类心的距离平方和最小。2.2.1 ISODATA算法原理步骤 预置 设定聚类分析控制参数:=预期的类数,=初始聚类中心个数(可以不等于c),137=每一类中允许的最少模式数目,=类内各分量分布的距离标准差上界,(分裂用)=两类中心间的最小距离下界,(合并用)=在每次迭代中可以合并的类的最多对数,=允许的最多迭代次数。 将待分类的模式特征矢量读入; 选定初试聚类中心,可从待分类的模式特征矢量

10、集中任选Nc个模式特征矢量作为初始聚类中心;(2)按最小距离原则将模式集中每一个模式分到某一类中;(3)依据每一类中允许的最少模式数目判断合并;(4)计算分类后的参数:分类中心,;类平均距离及中体平均距离; 计算各类的中心 (2) 计算各类中模式到类心的平均距离 (3) 计算各个模式到其类内中心的总体平均距离 (4)(5)依据Ip, Nc判断停止、分类或合并;(6)计算各类类内距离的标准差矢量; (5)(7)对每一次聚类,求出类内距离标准差矢量中的最大分量;(8)在(7)所得结果中对任一最大值大于类内各分量分布的距离标准差上界则分裂;(9)计算各对聚类中心间的距离;(10)依据两类中心间的最小

11、距离下界判断合并;(11)如果迭代次数Ip已达I次或过程收敛,则结束,否则,Ip=Ip+1,若需要调整参数,则转(1),若不改变参数则转(2);2.2.1 ISODATA算法流程图图4 ISODATA聚类算法流程图3 程序设计框图根据需求分析,对整个操作界面及其中的函数调用等,对整个程序进行分析。操作界面运行后,单击选择图像按钮选择待处理的图像。然后选择要对图形进行处理的功能,单击开始处理按钮,调用相应的处理方法进行处理,整个程序的设计框图如图5所示:图5 程序设计框图设计好的操作界面如下图所示:图6 操作界面设计结果4 实验结果及分析4.1 图像几何4.1.1 支票图像几何校正结果图像几何校

12、正功能中,对支票图像的校正如下图所示:图7 图像结合校正处理中图8 图像结合校正处理中4.1.1 支票图像几何校正结果分析通过支票图像几何校正结果可知,设计达到了预计的结果。通过MATLAB运行提取计算斜率的坐标为 (1200,522)和(1540, 511)。直线的斜率为slope = -0.0324,通过次斜率计算出的倾斜角度为angle = -1.8530。根据人眼观测结果显示支票的请倾斜角也比较小,而且根据校正后的支票图像结果显示已经水平。即达到了实验设计目的。4.2 图像分割4.2.1图像分割结果在运行图像分割功能时,需要通过鼠标选择预期聚类,其中选择之一如图9所示:图9 选择预期的

13、聚类中心图10 图像分割处理中最终对图像的分割结果如下图所示:图11 图像分割结果(a)图11 图像分割结果(b)图13 图像分割结果(c)图14 图像分割结果(d)4.2.1图像分割结果分析通过多次选择不同的预期聚类中心的实验结果表明,设计基本完成了所需的功能。同时也证明了设计的合理性,以及ISODATA聚类算法在图像分割中的运用。结果显示,把鸭子的眼睛分成了一类,把鸭子的嘴分成了一类,把鸭子的身体分成了一类,虽然有时分类结果不是非常好。但选择预期聚类中心时有一定的影响。总体来看,仍然达到了图像分割的目的。本学期在图像分析与模式识别课程中学到很多,学到的不仅仅是课程相关的知识。更重要的是学到

14、了许多处理和解决问题的思想,相信对今后的学习会有很大的帮助。这都是刘辉老师教导的结果,在此对刘辉老师表示衷心感谢!附录:附录一:图像几何校正代码function jiaozheng = jiaozheng(cheque)BW_laplace = edge(cheque,log);% log算子边缘检测BW2 = bwmorph(BW_laplace, thin,Inf);%细化H,T,R = hough(BW2); %Hough变换P = houghpeaks(H,5); %提取Hough变换后参数平面上的峰值点 lines = houghlines(BW2,T,R,P); %提取直线for

15、k = 1:length(lines) xy = lines(k).point1; lines(k).point2; %提取坐标endslope=(xy(2,2)- xy(1,2)/(xy(2,1)-xy(1,1); %求斜率radian=atan(slope);%求角度angle=radian*180/pi; %转化成角度jiaozheng=imrotate(cheque,angle); %图像校正imshow(jiaozheng);close ;附录一:ISODATA聚类算法图像分割代码function isodata=isodata_zsy(I)%1.样本点为所有的像素点% 2.聚类中心

16、点的确定% figure(1); imshow(I,),title(请选取预期聚类的中心点,完成后请按回车键或单击鼠标右键); m,n=size(I); k=4; % k 用来记录预期聚类的数目这里假定为4 c=k; % c来记录实际分类时的数目 hold on; p,q=getpts; %获取聚类中心,返回去类中心的坐标,p存放第一个坐标点,q存放第二个坐标点(数对) J=zeros(1,3*c); %? for i=1:c f=round(q(i); %分为c类 J来记录各类的中心像素值.(坐标和像素值) d=round(p(i); J(i)=I(f,d); end %disp(J);%3

17、.将样本点分到各个聚类中心去%max_gen=10; %max_gen最大迭代次数w=1;%while wmax_gen A=zeros(m,n); for i=1:m for j=1:n dis=0,0,0,0; %用来记录样本点与每个聚类中心的距离 for x=1:4 dis(1,x)=(I(i,j)-J(x)*(I(i,j)-J(x); end %disp(dis); min1,temp=min(dis); A(i,j)=J(temp); end end %disp(A);%4.依据一个类中的最小聚类数判断是否舍去聚类点% sN=6; %sN一个聚类中至少含有的样本数目 count=ze

18、ros(1,3*c); %count数组用来记录每个聚类中含有的样本数目 for i=1:m for j=1:n for x=1:c if A(i,j)=J(x) count(x)=count(x)+1; end end end end for x=1:c-1 if count(x)sN J(x)=J(x+1); count(x)=count(x+1); %类的数目减少一个 c=c-1; end end if count(x)sN count(x)=0; c=c-1; end%5.更新聚类中心% for x=1:c sum=0; for i=1:m for j=1:n if A(i,j)=J(

19、x) sum=sum+I(i,j); end end end J(x)=round(1.0/count(x)*sum*1.0); %更新中心 end%6.各类的样本离开中心的平均距离% meandis=zeros(1,c);for x=1:c sum=0; for i=1:m for j=1:n if A(i,j)=J(x) sum=sum+abs(I(i,j)-J(x); end end end meandis(x)=1.0/count(x)*sum; end%7.所有样本离开其相应的聚类中心的平均距离%g_meandis=0; %g_meandis记录平均距离N=m*n; for x=1:

20、c g_meandis=g_meandis+count(x)* meandis(x); % end g_meandis=g_meandis/N;%8.决定是走向合并还是分裂%sC=1.5; %sC为合并参数if w=max_gen-1 %如果这是最后一次迭代置合并参数为0 sC=0;enddisp(g_meandis); if c g_meandis&count(x)2*(sN+1) r(x)=t*meandis(x); c=c+1; %实际类的数目加1 J_rec(x)=J(x); %记录原中心点的灰度值 J(x)=J(x)+r(x); J(c)=J(x)-r(x); for i=1:m %

21、将分裂之后的像素重新安排所归属的类中心 for j=1:n if A(i,j)=J_rec(x) if abs(I(i,j)-J(c)abs(I(i,j)-J(x) A(i,j)=J(c); count(c)=count(c)+1; %记录新增的类含样本的个数 else A(i,j)=J(x); end end end end count(x)=count(x)-count(c); %count(x)含样本的个数 end end %12.计算所有的聚类中心两两距离% else betwen_dis=zeros(c,c); for i=1:c for j=1:i betwen_dis(i,j)=

22、abs(J(i)-J(j); betwen_dis(j,i)=betwen_dis(i,j); % 这个矩阵为一对称矩阵 end end %13.将小于最小合并参数的 betwen_dis(i,j)% sL=2; %每次迭代允许的最大聚类对的数目 line=zeros(1,c*c)-1; s=1; for i=1:c for j=1:i if betwen_dis(i,j)1 for i=1:s-1 temp1=i; for j=i+1:s if line(j)sL % 当s超过最大合并对数时将s的值变为允许的最大聚类对的数目 s=sL; end %14.从最小的进行合并%temp_c=c;

23、for x=1:s for i=1:temp_c for j=1:temp_c J_temp=J; if betwen_dis(i,j)=line(x)&ij %矩阵为一对称矩阵.只看下三角 c=c-1; J(j)=round(1.0/(count(i)+count(j)*(count(i)*J(i)+count(j)*J(j); count(j)=count(i)+count(j); %合并后聚类中新含有新样本的个数 for g=1:m %将合并之后的像素重新安排所归属的类中心 for h=1:n if A(g,h)=J_temp(i)|A(g,h)=J_temp(j) A(g,h)=J(j

24、); end end end if i=temp_c count(i)=0; else for g=i:c-1 J(g)=J(g+1); %将记录后面类中心像素值前移 count(g)=count(g+1); end end end end end end %15.计数器加1进行迭代直到结束 end w=w+1; %进行下一次迭代 A=round(A);isodata=mat2gray(A);close;附录一:MATLAB的GUI操作界面代码function varargout = sztxfx_mssb_zsy(varargin)gui_Singleton = 1;gui_State =

25、struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, sztxfx_mssb_zsy_OpeningFcn, . gui_OutputFcn, sztxfx_mssb_zsy_OutputFcn, . gui_LayoutFcn, , . gui_Callback, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui

26、_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before sztxfx_mssb_zsy is made visible.function sztxfx_mssb_zsy_OpeningFcn(hObject, eventdata, handles, varargin)% Choose default command line output for sztxfx_mssb_zsyh

27、andles.output = hObject;% Update handles structureguidata(hObject, handles);% - Outputs from this function are returned to the command line.function varargout = sztxfx_mssb_zsy_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output;% - Executes during object creation, after setting all p

28、roperties.function axes1_CreateFcn(hObject, eventdata, handles)set(hObject,xTick,);set(hObject,ytick,);set(hObject,box,on);% Hint: place code in OpeningFcn to populate axes1% - Executes during object creation, after setting all properties.function axes2_CreateFcn(hObject, eventdata, handles)set(hObj

29、ect,xTick,);set(hObject,ytick,);set(hObject,box,on);% Hint: place code in OpeningFcn to populate axes2% - Executes on button press in togglebutton1.function togglebutton1_Callback(hObject, eventdata, handles)global imgage % global infofilename,pathname=uigetfile(*.bmp;*.tif;*.jpg;*.gif;*.*,选择图片);if

30、pathname = 0 return;endstr=pathname filename;% info=imfinfo(str);imgage=imread(str);axes(handles.axes1);imshow(imgage);% Hint: get(hObject,Value) returns toggle state of togglebutton1% - Executes on selection change in popupmenu1.function popupmenu1_Callback(hObject, eventdata, handles)global value

31、value = get(hObject,Value); switch value case 1 cla; end% - Executes during object creation, after setting all properties.function popupmenu1_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white

32、);end% - Executes on button press in togglebutton2.function togglebutton2_Callback(hObject, eventdata, handles)global imgageglobal valuem n=size(imgage);axes(handles.axes2);switch value case 1 cla; case 2 h = waitbar(0.1,正在处理,请稍候.); IMG=jiaozheng(imgage);% waitbar(1,h,ok!); pause(0.6);% delete(h); i

33、mshow(IMG); case 3 h = waitbar(0.1,正在处理,请稍候.); isodata=isodata_zsy(imgage); waitbar(1,h,ok!); pause(0.6); delete(h); imshow(isodata); %figure ,imshow(B);title(hough变换后的图像); %xlabel(theta), ylabel(rho); %axis on, axis normal, hold on;endclear;% Hint: get(hObject,Value) returns toggle state of togglebutton2% - Executes on button press in togglebutton3.function togglebutton3_Callback(hObject, eventdata, handles)clc;clear;close(gcbf);% Hint: get(hObject,Value) returns toggle state of togglebutton3 20 / 19

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