单片机的U盘读写模块的设计

更新时间:2024-06-10 04:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

唐 山 学 院

毕 业 设 计

设计题目:基于单片机的U盘读写模块的设计

系 别: 班 级: 姓 名: 指 导 教 师:

2013年

6月

6 日

基于单片机的U盘读写模块的设计

摘 要

介绍了一种USB总线的通用接口芯片CH375,并在此基础上提出了一种外部单片机读写U盘的基本方法及其硬件连接方法。单片机只要在原硬件系统中增加1个CH375芯片就可以直接调用CH375提供的子程序库来直接读取U盘中的数据,从而实现了普通单片杌与U盘的通讯、方法简单、便于操作、综合成本比较低,具有较大的推广应用价值。

关键词:U盘;CH375;接口芯片;单片机

RESEARCH ON IMAGE REGISTRATION TECHNOLOGY BASED ON MATLAB

Abstract

A general purpose interface chip CH37 5 for USB is introduced in this paper.Based On which a new method of Using external single chip microcomputer to connect with the flash disk is given.Only add one CH375 chip to the single chip microcomputer s hardware system,the operator can use the program given by the CH375 to read the data from the flash disk and realize the communication between the single chip microcomputer and the flash disk.This method is very simple and can be operated easily.

Key words: Powell; PSOUSB;CH375;interface chip;single chip microcomputer

目 录

1 引言 ................................................................................................................................ 1

1.1 论文背景和意义 ........................................................................................... 1 1.2 图像配准技术研究现状 ............................................................................... 2

2 图像配准综述 ................................................................................................................ 4

2.1 图像配准理论 ............................................................................................... 4 2.2 图像配准一般步骤 ....................................................................................... 4 2.3 特征空间 ....................................................................................................... 5

2.3.1 基于灰度统计信息的配准 ................................................................ 5 2.3.2 基于特征的配准方法 ........................................................................ 7 2.4 搜索空间 ..................................................................... 错误!未定义书签。 2.5 搜索策略 ..................................................................... 错误!未定义书签。

2.5.1 一般Powell算法 ............................................. 错误!未定义书签。 2.5.2 PSO算法 ........................................................... 错误!未定义书签。 2.6 相似性度量 ................................................................. 错误!未定义书签。

3 基于互信息的图像配准 ................................................................................................ 9

3.1 信息熵 ......................................................................... 错误!未定义书签。 3.2 互信息的定义 ............................................................. 错误!未定义书签。 3.3 直方图 ......................................................................... 错误!未定义书签。 3.4 联合直方图 ................................................................. 错误!未定义书签。 3.5 图像互信息计算 ......................................................... 错误!未定义书签。 3.6 基于最大互信息理论的图像配准 ............................. 错误!未定义书签。

4 图像配准及仿真 .......................................................................................................... 10

4.1 设计思路 ..................................................................................................... 10 4.2 空间几何变换 ............................................................................................. 10

4.2.1 平移变换 .......................................................... 错误!未定义书签。 4.2.2 旋转变换 .......................................................... 错误!未定义书签。 4.3 PV插值 ........................................................................ 错误!未定义书签。 4.4 互信息值 ..................................................................... 错误!未定义书签。 4.5 优化搜索 ..................................................................... 错误!未定义书签。

4.5.1 改进的Powell算法 ......................................... 错误!未定义书签。 4.5.2 PSO .................................................................... 错误!未定义书签。 4.5.3 Powell算法与PSO算法比较 .......................... 错误!未定义书签。 4.6 配准效果检验 ............................................................. 错误!未定义书签。

4.7 界面设计 ..................................................................................................... 11

4.7.1 GUI简介 ........................................................................................... 11 4.7.2 GUI界面设计步骤 ........................................................................... 11 4.7.3 仿真步骤 .......................................................... 错误!未定义书签。

5 总结 .............................................................................................................................. 13 谢辞 .................................................................................................................................. 14 参考文献 .......................................................................................................................... 15 附录 .................................................................................................................................. 16 外文资料 .......................................................................................................................... 40

唐 山 学 院 毕 业 设 计

于灰度的配准方法也存在一些如计算量大,对缩放旋转及扭曲等较敏感,配准时间长,忽略了图像的空间相关信息等缺点。根据对数据作统计计算时建立的相似性测度函数的不同,这种方法可分为傅立叶配准法、相关法以及最大互信息法等。[8]

(1) 互相关方法[7]

互相关方法是一种由Rosenfeld于1982年提出的最基本的统计匹配方法。它要求参考图像和浮动图像具有相似的尺度和灰度信息,互相关方法广泛应用于模式识别和模板匹配等领域。对于一幅图像I和一个尺寸小于I的模板T,二维归一化的互相关函数为

??T(x,y)I(x?i,y?j)cc(i,j)?xy??Ixy2(x?i,y?j) (2-2)

互相关方法也有一些其他的改进形式。Berthilssoon提出改进的互相关方法配准了两幅具有仿射变换的图像。

(2) 相关系数法[7]

相关系数法是一种与互相关方法类似的度量方法,其计算公式为

??(T(x,y)?uccorr(i,j)?xy2TxyT)(I(x?i,y?j)?uI)2??(T(x,y)?u)??(I(x?i,y?j)?u)ixy (2-3)

其中uT是模板T的均值,uI图像I中与模板T同样大小的子图像的灰度均值。利用扩展的相关系数法可以解决两幅图像之间存在部分遮挡的的配准问题。

(3) 傅立叶方法[7]

傅立叶方法在提高计算速度以及当图像受到频域噪声的影响时要比相关方法性能好。傅立叶变换的如平移、旋转、缩放等很多性质可用于图像配准,加上傅立叶变换有成熟的快速算法和易于硬件实现等特点,使其成为变换域图像配准的最主要方法。

最早提出的用于配准平移两幅失配图像的傅立叶变换方法是相位相关技术。它通过计算浮动图像和参考图像的互功率谱寻找其反变换尖峰的位置,从而找到图像的平移量。

F(f)F(g)?2?i(ux0?vy0)?e (2-4) F

F(f)F(g)?Decastro和Morandi介绍了用于附加旋转变换的相位相关的扩展。该方法在计算复杂度和对噪声的敏感性方面有一定的优势,但是由于这一方法受限于傅立叶变换的不变性质,不能有效解决变换形式复杂的图像配准问题,所以只适用于发生平

6

唐 山 学 院 毕 业 设 计

移、旋转和缩放的两幅图像之间的配准。

(4) 互信息方法[7]

根据信息理论,互信息方法是两个数据集之间统计依赖的测度,在统计、通信理论和复变分析等领域有着广泛的应用。下面给出两个随机变量X和Y的互信息。

MI(X,Y)?H(Y)?H(Y|X)?H(X)?H(Y)?H(X,Y) (2-5)

H(X)??EX(log(P(X))) (2-6) (2-7) H(Y|X)??EY|X(log(P(Y|X))) (2-8)

H(X)代表随机变量X的熵,P(X)是X的分布函数。此方法是以互信息最大

H(X,Y)??EX,Y(log(P(X,Y)))化为基础的,通过寻优方法来寻找互信息最大时的图像变换参数。对于浮动图像I2和参考图像I1,基于互信息的配准方法,就是要找到一个几何变换T,使I1和T(I2)之间的互信息MI(I1,T(I2))达到最大。

在图像配准领域,互信息方法的运用非常多,尤其是在医学图像处理方面,互信息方法的应用更是日趋成熟。目前为止,针对互信息的改进方法也是层出不穷,而且也有一些研究人员将互信息方法与其他方法结合使用。

互信息是基于灰度的互信息,该方法也存在一些缺点,基于灰度的方法考虑的是像素邻域的灰度特性变化,不是利用像素本身的信息,而是利用图像的统计特性,所以此方法计算量必然是很大的;而且基于灰度的方法对灰度特性敏感,这样基于灰度的方法的应用范围必然受到限制。[7]

2.3.2 基于特征的配准方法

基于特征的方法是图像配准中的另一类方法,它不是直接对图像的灰度信息进行操作,而是首先从参考图像和浮动图像中提取一些共同特征构成特征空间,然后通过建立特征之间的对应关系求解变换参数,从而完成图像之间的配准。[7]

基于特征的配准方法与基于灰度的配准方法相比有其自身的优点。基于特征的配准方法只通过两幅图像中部分相似特征求解变换参数,因而计算量小。而且基于特征的方法受两幅图像中灰度和噪声干扰影响小,是在特征空间上进行配准,故稳定性较好。[8]

基于特征的配准方法存在着自身的缺点。如需要人工干预,特征点的提取比较困难,而且通过图像分割等技术来确定图像的特征也存在着较大的问题,因为图像分割的精度和评价标准都没有得到很好的解决,并且医生的干预过程会受到操作者的水平和主观因素的影响,会给配准结果带来很大不确定性。

基于特征的图像配准方法在图像配准领域已经得到了广泛应用,现在己经成为图像配准领域热点。总体而言,常用的图像特征有轮廓、边缘、区域特征结构和特

7

唐 山 学 院 毕 业 设 计

征点等。

(1) 基于轮廓的方法

基于闭合轮廓的方法是比较有效的图像配准方法,适用于多传感器配准,它可以解决图像间的平移、旋转、尺度缩放等变换。然而,实际情况中有很多因素限制了基于闭合轮廓的图像配准方法的应用范围,比如实际应用中无法得到足够多的闭合轮廓,或者区域之间的重叠比较严重等因素。相对于闭合轮廓,普通边缘即非闭合轮廓是图像中更普遍存在的特征,所以,基于非闭合轮廓的图像配准方法相对基于闭合轮廓的图像配准方法来说,更有实用意义。

(2) 基于边缘特征的配准方法

边缘特征代表了图像中的部分结构信息,能较好地剔除灰度畸变的影响,而且边缘检测计算快捷。但是边缘特征也有其缺点,在提取过程中容易出现断裂、提取不完整等现象,不利于后续的图像匹配处理。

(3) 基于区域特征结构的配准方法

基于区域特征结构的匹配算法需要对区域进行很好的分割。矩不变量对图像旋转、平移、缩放等具有不变性,因此常被用作区域统计特征。利用区域特征进行匹配的算法的缺点是不容易实现区域提取的一致性。

(4) 基于特征点的配准方法

特征点是指图像灰度在各坐标轴方向都有很大变化的一类局部特征点。它包含边缘点、角点、线交叉点、高曲率点、轮廓中心等。点特征可以是人工选取的也可以是利用算法自动提取的。人工图像配准由于需要一定的认知背景,需要特殊的训练,精度方面也容易受到人为因素的影响,其发展受到一定的阻碍,所以逐步被自动方法取代。常用的点特征自动提取方法有兴趣算子法、角点检测法和小波变换提取法等。定位精度、重复率和信息含量等是衡量特征点检测方法的标准。从以上对各类图像配准方法的总结可以看出,至今还没有一种图像配准方法能适用于所有的图像配准问题,图像配准的方法多是针对某类具体图像类型提出的,是根据具体问题进行分析的。因此,针对具体的图像类型,尽可能地提高图像配准方法的自动化程度、配准精度、实时性和鲁棒性等成为图像配准的研究目标。

8

唐 山 学 院 毕 业 设 计

3 基于互信息的图像配准

互信息(Mutual Information)是信息论中的一个基本概念,是两个随机变量统计相关性的测度,它无需预先假设图像灰度间的关系,无需对图像进行分割等预处理,当两幅图像达到最佳配准,它们对应像素的灰度互信息达到最大。因此,最近几年图像配准应用中广泛将互信息作为图像配准过程的相似性测度,利用最大互信息法进行图像配准成为了图像处理领域的研究热点。

联合直方图数也可用二维图形表示:x轴表示图像A的灰度值,y轴表示图像B的灰度值。当图像A与图像B完全一致时,图形的所有点都分布在一条斜率为1的直线上,如图3-3所示。随着A,B的相似性降低。联合直方图中的点更加分散在对角线周边,如图3-4所示。

图3-3 A与B一致时直方图 图3-4 A与B不一致时直方图

与归一化直方图类似,对式(3-13)两边同除以全部的灰度级值对出现的次数和n,即可得到归一化的联合直方图函数pab

h[a(i,j),b(i,j)] (3-14) pab[a(i,j),b(i,j)]?abh[a(i,j),b(i,j)]?abi,ji?1,...,M j?1,..N.,

9

唐 山 学 院 毕 业 设 计

4 图像配准及仿真

4.1 设计思路

本设计主要由输入参考图像,输入浮动图像,设置初始点和初始搜索方向,空间几何变换,计算互信息值,最优化模块等构成。

其具体实现过程如下:首先输入参考图像R和浮动图像F;接着计算R和F的互信息值;然后利用优化搜索算法依据最大互信息理论判断所得参数是否最优,若不是,则继续搜索最优参数,在搜索时不断重复“空间几何变换→计算互信息值→最优化判断”的过程,直至搜索到满足精度要求的参数;最后输出配准参数。图4-1为程序设计流程图。

输入参考图像 输入浮动图像 设置初始点和 初始搜索方向 空间几何变换 计算互信息值 最优化 YES 输出配准参数 图4-1 设计流程图

NOO

4.2 空间几何变换

空间几何变换是图像配准中的关键步骤,经过图像不断进行空间几何变换,使图像几何上对齐,从而达到配准。本次设计用的空间几何变换为仿射变换,是最常用的一种空间变换形式,可以实现图像的平移、旋转等操作。

10

唐 山 学 院 毕 业 设 计

下面通过两组实验数据说明图像A和图像B配准时互信息达到最大。第一组实验的参考图像A为图4-17,浮动图像B为图像A依次水平平移x为-10至10个像素时所对应的图像,然后分别计算它们的互信息值MI。实验数据见表4-1,互信息曲线见图4-11。第二组实验的参考图像A为图4-17,浮动图像B为图像A一次旋转角度?为-10至10个像素时所对应的图像,然后分别计算它们的互信息值MI。实验数据见表4-2,互信息曲线见图4-12。

表4-1 平移后互信息值

操作

数值

-9 -8 -7 -6 -5 -4 -3 -2 -1 0 X平移

互信息 0.1568 0.1625 0.1701 0.1793 0.1894 0.2030 0.2226 0.2519 0.2946 0.4060

1 2 3 4 5 6 7 8 9 10 X平移

互信息 0.3033 0.2588 0.2286 0.2084 0.1945 0.1840 0.1747 0.1668 0.1610 0.1552

表4-2 旋转信息值

操作

数值

-9 -8 -7 -6 -5 -4 -3 -2 -1 旋转角 -10

互信息 0.1272 0.1467 0.1477 0.1594 0.1725 0.1851 0.2015 0.2210 0.2475 0.2919

0 1 2 3 4 5 6 7 8 9 旋转角

互信息 0.4060 0.2919 0.2474 0.2211 0.2019 0.1848 0.1725 0.1590 0.1479 0.1365

从图4-11中,我们可以看到,在水平平移互信息值曲线图中,当水平平移为0时对应的互信息值最大(0.4060),此时A,B没有相对位移,恰好处于最佳对准位置。

4.7 界面设计

4.7.1 GUI简介

图形用户界面(Graphical User Interface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。

GUI的广泛应用是当今计算机发展的重大成就之一,他极大地方便了非专业用户的使用,人们从此不再需要死记硬背大量的命令,取而代之的是可以通过窗口、菜单、按键等方式来方便地进行操作。而GUI有轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点。[13,14]

4.7.2 GUI界面设计步骤

(1) 进行界面设计,本设计中的界面如图4-19所示。

11

唐 山 学 院 毕 业 设 计

图4-19 界面图

(2) 设置控件属性

三个静态文本(static text),分别用来显示“Optimization Algorithm”,“Mutual Information Measure”,“Image Pair For Registration”。

三个轴对象(axes),用来显示参考图像,浮动图像,配准结果。

三个文本框(Edit Text),Edit1用来显示参考图像名称,Edit2用来显示浮动图像名称、Edit3用来显示配准时的参数。

三个按钮(push botton),点击“reference image”或“float image”后,弹出一个小界面,从小界面中选择图像,点击“run”后,在axes3中输出配准图像,在Edit3中输出配准参数。

两个下拉菜单(pupupmenu),pupupmenu1用来选择优化搜索算法,pupupmenu2用来显示相似性测度即互信息值。

12

唐 山 学 院 毕 业 设 计

5 总结

研究图像配准具有十分重要的现实意义,图像配准在遥感影像配准、自然资源分析、天气预报、环境监测、生理病变等许多领域有重要的应用价值,是视频压缩与编码、模式识别、图像融合、运动目标检测等中的一项关键技术。本文主要研究了基于灰度的图像配准技术,主要工作成果如下:

(1) 对图像进行平移和旋转等空间几何变换,并计算互信息值。

(2) 针对一般Powell算法存在的缺点,提出了改进后的Powell算法,并对该算法进行仿真。

(3) 对基于互信息的多光谱图像的配准算法进行了研究,以互信息作为相似性测度详细介绍了改进后的Powell算法和PSO两种优化搜索算法理论知识,对这两种算法进行仿真分析,对比这两种算法的优劣。结果表明Powell算法在搜索速度、配准对齐效果、计算出的最大互信息值等方面优于PSO算法。

针对图像配准技术研究,有些理论和技术还需做更深入的探讨,下面是未来工作的展望:

(1) 对采用互信息的医学图像配准向三维方向拓展,如何实现程序的规范化,和如何获得更短的时间开销将是今后研究工作的重点。

(2) 将配准的变换类型扩展到非刚体配准。在实际的图像配准应用中,有很多情况例如身体某些非刚体运动的部分(如心脏等)的配准,并不能简单的用刚体变换来实现,采用非刚体变换的配准方法使用范围更广。

(3) 研究新的优化算法,并对配准后的图像之间的融合等后续工作进行研究,进一步对插值算法进行研究,采用更好的插值函数,避免由于插值算法造成互信息配准中局部极值的产生。

13

唐 山 学 院 毕 业 设 计

谢辞

经过几个月的查资料、编程序、写作论文,我的毕业设计终于要完成了。写到谢辞这里,大学期间的点点滴滴历历涌上心头,四年多的努力与付出,随着论文的完成,终于让大学的生活得以划下了完美的句点。

论文得以顺利完成,要感谢的人实在太多太多了。首先,我想对我的指导老师申彦春表示深深的敬意和真挚的感谢!申老师对待学生亲切和蔼,关怀无微不至,对待工作认真负责,跟着申老师做毕业设计之后,我更敬佩老师那严谨、科学的作风以及孜孜不倦的学习态度,本文从选题、查找资料,编写程序,写作以至到论文的最后定稿自始至终都得到了申老师的大力支持和悉心指导。自己一步一步付出后,到现在终于对图像配准有了一定程度的理解。在此我想对这半年来给予我极大关怀和帮助的申老师,表示深深的谢意!此外,还要感谢同窗好友在生活和学习上给予我的帮助!在本科生学习生活即将结束之际,感谢我的父母一直以来对我的鼓励和支持,感谢他们给予我经济和精神上的支持和鼓励,没有他们就没有我的今天。我要继续在科学的高山上努力往上攀登,用实际的行动来报答他们。

最后非常感谢阅读本文的各位老师为此付出的辛勤劳动!

14

唐 山 学 院 毕 业 设 计

参考文献

[1] 郭丽珍.基于特征的图像配准方法研究[D],太原理工大学,2010.

[2] 陈显毅,周开利.医学图像配准常用方法与分类[J].信息技术,2008年第7期,P17-19. [3] 田剑豪,基于互信息的多模态医学图像配准[D].西安电子科技大学,2005. [4] 陈煜.图像融合技术及其应用研究[D].南京航空航天大学,2004. [5] 周亚平.图像配准技术研究[D].西安电子科技大学,2008年.

[6] 袁伟.基于结构信息的SAR图像配准方法研究[D].国防科学技术大学,2009. [7] 陈显毅.基于互信息的医学图像配准技术研究[D].海南大学,2008. [8] 刘青芳,基于改进互信息的医学图像配准方法研究[D].山西大学,2010. [9] 陈宝林.最优化理论与算法[M].北京:清华大学出版社,2005.

[10] 孙晶晶.粒子群优化算法的改进及其应用研究[D].山西师范大学,2010. [11] 杨立娜.基于相位相关理论的最大互信息图像配准[D].西安电子科技大学,2010. [12] 胡振国.基于ARM的嵌入式软硬件系统设计与实现[D].电子科技大学,2010. [13] 张德丰.MATLAB数字图像处理[M].机械工业出版社,2009.

[14] 毛涛涛,王正林,王林.精通MATLAB GUI设计[M].电子工业出版社,2008. [15] 赵书兰.MATLAB数字图像处理与分析实例教程[M].化学工业出版社,2009. [16] 陈显毅.图像配准技术及其MATLAB编程实现[M].电子工业出版社,2009.

[17] P Violar,W M.Wells III.Aligment by maximization of mutual information[J].In:proceedings of

5th Intermational Conference on computer Vision.Boston,MA,USA.1995.

15

唐 山 学 院 毕 业 设 计

附录

%主界面程序

function varargout = proj(varargin) % PROJ M-file for proj.fig

% PROJ, by itself, creates a new PROJ or raises the existing % singleton*.

% H = PROJ returns the handle to a new PROJ or the handle to % the existing singleton*.

% PROJ('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in PROJ.M with the given input arguments. % PROJ('Property','Value',...) creates a new PROJ or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before proj_OpeningFunction gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to proj_OpeningFcn via varargin.

% *See GUI Options on GUIDE's Tools menu. Choose \% instance to run (singleton)\

% See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help proj % Last Modified by GUIDE v2.5 21-Sep-2005 21:51:00 % Begin initialization code - DO NOT EDIT gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @proj_OpeningFcn, ... 'gui_OutputFcn', @proj_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin & isstr(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

16

唐 山 学 院 毕 业 设 计

gui_mainfcn(gui_State, varargin{:}); end

% End initialization code - DO NOT EDIT addpath(pwd)

% --- Executes just before proj is made visible.

function proj_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 of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to proj (see VARARGIN) % Choose default command line output for proj handles.output = hObject; handles.OAname='PSO'; handles.MIname='MI'; handles.NumOfVar=0; % set(handles.axes1,'','off'); % axes(handles.axes1) % I1=0; % imshow(I1) % axes(handles.axes2) % I2=0; % imshow(I2) % axes(handles.axes3) % I3=0; % imshow(I3)

guidata(hObject, handles);

% UIWAIT makes proj wait for user response (see UIRESUME) % uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line. function varargout = proj_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 version of MATLAB

17

唐 山 学 院 毕 业 设 计

% handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output;

% --- Executes during object creation, after setting all properties. function popupmenu1_CreateFcn(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc

set(hObject,'BackgroundColor','white'); else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end

% --- Executes on selection change in popupmenu1. function popupmenu1_Callback(hObject, eventdata, handles) % hObject handle to popupmenu1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) popupmenu1string=get(handles.popupmenu1,'string'); popupmenu1value=get(handles.popupmenu1,'value');

popupmenu1context=get(handles.popupmenu1,{'value','string'}); vvv1=deblank(popupmenu1context{2}(popupmenu1context{1})); handles.OAname=vvv1{1}; guidata(hObject,handles);

% Hints: contents = get(hObject,'String') returns popupmenu1 contents as cell array % contents{get(hObject,'Value')} returns selected item from popupmenu1 % --- Executes during object creation, after setting all properties. function popupmenu2_CreateFcn(hObject, eventdata, handles) % hObject handle to popupmenu2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: popupmenu controls usually have a white background on Windows.

18

唐 山 学 院 毕 业 设 计

% See ISPC and COMPUTER. if ispc

set(hObject,'BackgroundColor','white'); else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end

% --- Executes on selection change in popupmenu2. function popupmenu2_Callback(hObject, eventdata, handles) % hObject handle to popupmenu2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) popupmenu2string=get(handles.popupmenu2,'string'); popupmenu2value=get(handles.popupmenu2,'value');

popupmenu2context=get(handles.popupmenu2,{'value','string'}); vvv2=deblank(popupmenu2context{2}(popupmenu2context{1})); handles.NumOfVar=NumOfVar; handles.MIname=vvv2{1}; guidata(hObject,handles);

% Hints: contents = get(hObject,'String') returns popupmenu2 contents as cell array % contents{get(hObject,'Value')} returns selected item from popupmenu2 % --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc

set(hObject,'BackgroundColor','white'); else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end

function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO)

19

唐 山 学 院 毕 业 设 计

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text

% str2double(get(hObject,'String')) returns contents of edit1 as a double % --- Executes during object creation, after setting all properties. function edit2_CreateFcn(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc

set(hObject,'BackgroundColor','white'); else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end

function edit2_Callback(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit2 as text

% str2double(get(hObject,'String')) returns contents of edit2 as a double % --- Executes on button press in pushbutton1.

function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) clc

set(handles.text6,'string','Result Of Registration & MI Value'); axesIbox=get(handles.axes2,'box'); axesJbox=get(handles.axes3,'box');

if strcmp(axesIbox,'off') | strcmp(axesJbox,'off') errordlg('请选择配准图像','′错误') error('未选择配准图像')

20

唐 山 学 院 毕 业 设 计

end

handles.isSameSizeIJ=strcmp(handles.ImsizeI,handles.ImsizeJ); if handles.isSameSizeIJ~=1

errordlg('请选择相同尺寸的图像','错误') error('配准图像大小不同') end

guidata(hObject,handles);

handles.edit1visible=get(handles.edit1,'visible'); handles.edit2visible=get(handles.edit2,'visible'); edit1visible=strcmp(handles.edit1visible,'on'); edit2visible=strcmp(handles.edit2visible,'on'); % if handles.edit2visible=='on'

% error:Array dimensions must match for binary array op. if edit1visible==1

handles.edit1string=get(handles.edit1,'string'); %handles.var1=str2num(handles.edit1string{1}); handles.var1=str2num(handles.edit1string); end

if edit2visible==1

handles.edit2string=get(handles.edit2,'string'); %handles.var2=str2num(handles.edit2string{1}); handles.var2=str2num(handles.edit2string); end

switch handles.OAname case 'PSO'

out=PSO(handles); case 'POWELL'

out=POWELL(handles); end

handles.out=out; x=out(1); y=out(2); ang=out(3); miValue=out(4);

FinalResult=['X,Y,Angle=',num2str(x)

',',num2str(y)

21

',',num2str(ang),'

唐 山 学 院 毕 业 设 计

MI_Value=',num2str(miValue)]; axes(handles.axes1)

Q=restore(handles); % imshow(Q) set(handles.text6,'string',FinalResult); % --- Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles) % hObject handle to pushbutton2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) clc

ValueI.ss.IsImage=0;

while ValueI.ss.IsImage==0 ValueI=testListBoxlj; end

delete(ValueI.figure1);

handles.ImsizeI=ValueI.ss.imsize; handles.filenameI=ValueI.ss.filename; handles.names_dispI=ValueI.ss.names_disp; set(handles.text7,'String',handles.names_dispI); axes(handles.axes2) I=imread(handles.filenameI); imshow(I)

guidata(hObject, handles);

% --- Executes on button press in pushbutton3.

function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) clc

ValueJ.ss.IsImage=0;

while ValueJ.ss.IsImage==0 ValueJ=testListBoxlj; end

delete(ValueJ.figure1);

22

唐 山 学 院 毕 业 设 计

handles.ImsizeJ=ValueJ.ss.imsize; handles.filenameJ=ValueJ.ss.filename; handles.names_dispJ=ValueJ.ss.names_disp; set(handles.text8,'String',handles.names_dispJ); axes(handles.axes3) J=imread(handles.filenameJ); imshow(J)

guidata(hObject, handles);

%对图像进行平移和旋转 close all; clear; clc;

%J=imread('CTcankao1.jpg'); J=imread('CTcankao1.jpg');

se = translate(strel(1), [30 20]); J = imdilate(I,se); J = imrotate(J,45,'nearest','crop'); imshow(J); figure; imshow(I); %选择图像界面

function varargout = testListBoxlj(varargin) % TESTLISTBOXLJ M-file for testListBoxlj.fig

% TESTLISTBOXLJ, by itself, creates a new TESTLISTBOXLJ or raises the existing

% singleton*.%

% H = TESTLISTBOXLJ returns the handle to a new TESTLISTBOXLJ or the handle to

% the existing singleton*.

% TESTLISTBOXLJ('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in TESTLISTBOXLJ.M with the given input arguments.

% TESTLISTBOXLJ('Property','Value',...) creates a new TESTLISTBOXLJ or raises the

% existing singleton*. Starting from the left, property value pairs are % applied to the GUI before testListBoxlj_OpeningFunction gets called. An

23

唐 山 学 院 毕 业 设 计

% unrecognized property name or invalid value makes property application % stop. All inputs are passed to testListBoxlj_OpeningFcn via varargin. % *See GUI Options on GUIDE's Tools menu. Choose \% instance to run (singleton)\

% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help testListBoxlj % Last Modified by GUIDE v2.5 19-Sep-2005 10:36:50 % Begin initialization code - DO NOT EDIT gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @testListBoxlj_OpeningFcn, ... 'gui_OutputFcn', @testListBoxlj_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin & isstr(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

% End initialization code - DO NOT EDIT

% --- Executes just before testListBoxlj is made visible.

function testListBoxlj_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 of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to testListBoxlj (see VARARGIN) % Choose default command line output for testListBoxlj handles.output = hObject; % Update handles structure

24

唐 山 学 院 毕 业 设 计

guidata(hObject, handles); % if nargin == 3, % initial_dir = pwd; % elseif nargin > 4

% if strcmpi(varargin{1},'dir') % if exist(varargin{2},'dir') % initial_dir = varargin{2}; % else

% errordlg('Input argument must be a valid directory','Input Argument Error!')

% return % end % else

% errordlg('Unrecognized input argument','Input Argument Error!'); % return; % end % end

initial_dir = pwd;

ss=load_listbox(initial_dir,handles); handles.ss=ss;

% UIWAIT makes testListBoxlj wait for user response (see UIRESUME) % handles.parhandles=varargin{1}; guidata(handles.figure1, handles); % while handles.ss.IsImage==0 uiwait(handles.figure1); % handles.figure1 % handles.ss.IsImage % end

% --- Outputs from this function are returned to the command line. function varargout = testListBoxlj_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 version of MATLAB % handles structure with handles and user data (see GUIDATA)

25

唐 山 学 院 毕 业 设 计

% Get default command line output from handles structure % varargout{1} = handles.output; varargout{1} = handles;

% delete(handles.figure1)%%%%%%%%%%

% --- Executes during object creation, after setting all properties. function listbox1_CreateFcn(hObject, eventdata, handles) % hObject handle to listbox1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: listbox controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc

set(hObject,'BackgroundColor','white'); else

set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end

% --- Executes on selection change in listbox1. function listbox1_Callback(hObject, eventdata, handles) % hObject handle to listbox1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % get(handles.figure1,'SelectionType'); index_selected = get(handles.listbox1,'Value'); % file_list = get(handles.listbox1,'String'); filename = handles.ss.sorted_names{index_selected}; handles.ss.filename=[pwd,'\\',filename];

handles.ss.names_disp=handles.ss.sorted_names_disp{index_selected}; handles.ss.imsize=handles.ss.imsize_disp{index_selected}; if index_selected<=handles.ss.cnPiont cd(handles.ss.filename) ss=load_listbox(pwd,handles); handles.ss=ss; handles.ss.IsImage=0;

% filename = handles.ss.sorted_names{index_selected};

26

唐 山 学 院 毕 业 设 计

% handles.ss.filename=[pwd,'\\',filename];

% handles.ss.names_disp=handles.ss.sorted_names_disp{index_selected}; % handles.ss.imsize=handles.ss.imsize_disp{index_selected}; else

handles.ss.IsImage=1; end

guidata(handles.figure1, handles); uiresume(handles.figure1);

function ss=load_listbox(dir_path,handles) cd (dir_path)

dir_struct = dir(dir_path);

[sorted_names1,sorted_index1] = sortrows({dir_struct.name}'); k=max(sorted_index1); if k==2

sorted_names{1}='.'; sorted_names{2}='..'; sorted_names_disp{1}='.'; sorted_names_disp{2}='..'; imsize_disp{1}='null'; imsize_disp{2}='null'; cnPiont=2; else

sorted_names{1}='.'; sorted_names{2}='..'; sorted_names_disp{1}='.'; sorted_names_disp{2}='..'; imsize_disp{1}='null'; imsize_disp{2}='null'; cn=2; for i=1:k

[path,name,ext,ver] = fileparts(sorted_names1{i}); switch ext case '' cn=cn+1;

27

唐 山 学 院 毕 业 设 计

cnarray(cn)=cn;

%sorted_names(cn)=name; sorted_names{cn}=name; sorted_names_disp{cn}=name; %name

imsize_disp{cn}='null'; end end cnPiont=cn; for i=1:k

[path,name,ext,ver] = fileparts(sorted_names1{i}); switch ext

case {'.bmp','.jpg','.jpeg','.tif'} cn=cn+1; cnarray(cn)=cn; name=[name,ext]; sorted_names{cn}=name; temp=imread(name); [m,n]=size(temp); m=num2str(m); n=num2str(n);

imsize=[' ',m,'*',n,' (size)']; name_disp=[name,imsize];

sorted_names_disp{cn}=name_disp; imsize_disp{cn}=imsize; end end end

ss.sorted_names=sorted_names; ss.sorted_names_disp=sorted_names_disp; ss.imsize_disp=imsize_disp; ss.cnPiont=cnPiont;

% handles.file_names = sorted_names; % handles.file_names =sorted_names_disp;

28

唐 山 学 院 毕 业 设 计

% handles.is_dir = [dir_struct.isdir]; % %handles.sorted_index = [sorted_index]; % handles.sorted_index = [cnarray];

set(handles.listbox1,'String',sorted_names_disp,... 'Value',1)

set(handles.text1,'String',pwd)

%检测图像重合

function Q=restore(structure) handles=structure; I=handles.I; J=handles.J; x=handles.out(1); y=handles.out(2); ang=handles.out(3); se = translate(strel(1),[x y]); J = imdilate(J,se);

J = imrotate(J,ang,'nearest','crop'); [m,n]=size(I); I=edge(I,'canny')*255; J=edge(J,'canny')*255; QI=zeros(m,n,3); QJ=zeros(m,n,3); QI(:,:,1)=I; QJ(:,:,2)=J; Q=QI+QJ; Q=uint8(Q);

%计算互信息值 function[mi]=PV(x,y,ang) a=imread('CTcankao1.jpg'); a=double(a);

b=imread('MRfudong2.jpg'); b=double(b);

29

唐 山 学 院 毕 业 设 计

[m,n]=size(a); hab=zeros(256,256); ha=zeros(1,256); hb=zeros(1,256);

if max(max(a))~=min(min(a))

a=(a-min(min(a)))/(max(max(a))-min(min(a))); else

a=zeros(m,n); end

if max(max(b))-min(min(b))

b=(b-min(min(b)))/(max(max(b))-min(min(b))); else

b=zeros(m,n); end

a=double(int16(a*255))+1; b=double(int16(b*255))+1; [width,height]=size(b); u=(width-1)/2; v=(height-1)/2; rad=pi/180*20; t1=[1 0 0;0 1 0;1 1 1]; t2=[1 0 0;0 1 0;-u -v 1];

t3=[cos(rad) -sin(rad) 0;sin(rad) -cos(rad) 0;0 0 1]; t4=[1 0 0;0 1 0;u v 1]; t=t2*t3*t4*t1;

tform=maketform('affine',t); coordinate_x=zeros(width,height); coordinate_y=zeros(width,height); for i=1:width for j=1:height; coordinate_x(i,j)=i; end end for i=1:width

30

唐 山 学 院 毕 业 设 计

for j=1:height; coordinate_y(i,j)=j; end end

[w z]=tforminv(tform,coordinate_x,coordinate_y); for i=1:width for j=1:height source_x=w(i,j); source_y=z(i,j);

if(source_x>width-1||source_y>height-1||double(uint16(source_x))<=1||double(uint16(source_y))<=1)

hab(a(1,1),a(1,1))=hab(a(1,1))+1; else

m=fix(source_x); n=fix(source_y); index_b=b(i,j); index_a0=a(m,n); index_a1=a(m+1,n); index_a2=a(m,n+1); index_a3=a(m+1,n+1) dx=source_x-m; dy=source_y-n;

hab(index_a0,index_b)=hab(index_a0,index_b)+(1-dx)*(1-dy); hab(index_a1,index_b)=hab(index_a1,index_b)+dx*(1-dy); hab(index_a2,index_b)=hab(index_a2,index_b)+(1-dx)*dy; hab(index_a3,index_b)=hab(index_a3,index_b)+dx*dy; end end end

habsum=sum(sum(hab)); index=find(hab~=0); pab=hab/habsum;

hab=sum(sum(-pab(index).*log2(pab(index))));

31

唐 山 学 院 毕 业 设 计

pa=sum(pab'); index=find(pa~=0);

ha=sum(sum(-pa(index).*log2(pa(index)))); pb=sum(pab); index=find(pb~=0);

hb=sum(sum(-pb(index).*log2(pb(index)))); mi=ha+hb-hab;

%一维搜索

function [Y,fY,step]=oneDimSearch(R,F,X,direction,len,handles) for i=-len:len

step_b=X+direction*i;

% mi(i+len+1)=Huxinxi(R,F,step_b(1),step_b(2),step_b(3) ); mi(i+len+1)=myMI(step_b(2),step_b(1),-step_b(3),handles ); % x=step_b(2),y=step_b(1),ang=-step_b(3) end

[oneDim_max,position]=max(mi); step=position-len-1; Y=X+direction*step;

fY=oneDim_max; %Powell

function [OUT]=POWELL(handles) F= handles.I;

R= handles.J; % reference image len=10; D=[1 0 0; 0 1 0; 0 0 1]; X0=[0 0 0]; d3=D(3,:);

[Z,fZ,step]=oneDimSearch(R,F,X0,d3,len,handles); d1=D(1,:);

[X1,fX1,step]=oneDimSearch(R,F,Z,d1,len,handles);

32

唐 山 学 院 毕 业 设 计

d2=D(2,:);

[X2,fX2,step]=oneDimSearch(R,F,X1,d2,len,handles); d3=D(3,:);

[X3,fX3,step]=oneDimSearch(R,F,X2,d3,len,handles); Cha=[fZ-fX1 fX1-fX2 fX2-fX3]; [maxCha,j0]=max(Cha); e=9;

FANSHU=X3-X0;

Y=sum( FANSHU.*FANSHU ); aaa=0; while( Y>e ) aaa=aaa+1; d=X3-Z;

[Z1,fZ1,landa]=oneDimSearch(R,F,X3,d,len,handles); temp=sqrt( (fX3-fZ1)/maxCha ); if( abs(landa) <= temp ) X0=Z1; else D(4,:)=d; for i=j0:3

D(i,:)=D(i+1,:); end X0=Z1; end

d3=D(3,:);

[Z,fZ,step]=oneDimSearch(R,F,X0,d3,len,handles); d1=D(1,:);

[X1,fX1,step]=oneDimSearch(R,F,Z,d1,len,handles); d2=D(2,:);

[X2,fX2,step]=oneDimSearch(R,F,X1,d2,len,handles); d3=D(3,:);

[X3,fX3,step]=oneDimSearch(R,F,X2,d3,len,handles); Cha=[fZ-fX1 fX1-fX2 fX2-fX3]; [maxCha,j0]=max(Cha);

33

唐 山 学 院 毕 业 设 计

FANSHU=X3-X0;

Y=sum( FANSHU.*FANSHU ); end

OUT(1)=X3(2); OUT(2)=X3(1); OUT(3)=-X3(3); OUT(4)=fX3;

function [OUT,varargout]=PSO(structure) D=3;

rand('state',sum(100*clock)); if nargin < 1

error('Not enough arguments.'); end

% PSO算法

VRmin=ones(D,1)*-20; VRmax=ones(D,1)*20; VR=[VRmin,VRmax]; minmax = 1;

P =[1 2000 20 4 2 2 0.9 0.2 1500 2 1e-5 20 1]; df=P(1); me=P(2); ps=P(3); mv=P(4); ac1=P(5); ac2=P(6); iw1 = P(7); iw2 = P(8); iwe = P(9); flagg=P(10); ergrd=P(11); ergrdep=P(12); plotflg=P(13); % PLOTTING

34

唐 山 学 院 毕 业 设 计

message = sprintf('PSO: %%g/%g iterations, GBest = %%g.\\n',me); pos=40*rand(ps,D)-20; vel=8*rand(ps,D)-4; % initial pbest positions vals pbest=pos;

for j=1:ps % start particle loop numin='0'; for i=1:D

numin=strcat(numin,',',num2str(pos(j,i))); end

%evstrg=strcat('feval(''',functname,'''',numin(2:end),',structure',')'); evstrg=strcat('feval(''myMI''',numin(2:end),',structure',')');

out(j)=eval(evstrg); % evaluate desired function with particle j end

pbestval=out; % initially, pbest is same as pos % assign initial gbest here also (gbest and gbestval) if minmax==1

[gbestval,idx1]=max(pbestval); % this picks gbestval when we want to maximize the function elseif minmax==0

[gbestval,idx1]=min(pbestval); % this works for straight minimization end

gbest=pbest(idx1,:); % this is gbest position tr(1)=gbestval; % save for output % start PSO iterative procedures

cnt=0; % counter used for updating display according to df in the options cnt2=0; % counter used for the stopping subroutine based on error convergence for i=1:me % start epoch loop (iterations)

if flagg==0 % randimization control, one random set for each epoch rannum1=rand(1); rannum2=rand(2); end

for j=1:ps % start particle loop

if flagg==1 % randomization control, one random set for each particle at each

35

本文来源:https://www.bwwdw.com/article/4sb6.html

Top