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

更新时间:2023-12-08 18:21: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

唐 山 学 院 毕 业 设 计

1 引言

1.1 论文背景和意义

一直以来图像配准技术就是一个值得研究的方向。图像配准技术被广泛应用于医学图像分析、遥感数据分析与计算机视觉等领域。在医学图像分析中,图像配准技术可用于跟踪肿瘤的放射治疗效果,研究人脑功能和个体差异,辅助诊断神经系统疾病等;利用图像配准技术分割脑核磁共振(MRI)图像,重建大脑的3D结构。[1]

按照成像模式图像配准可以分为单模配准和多模配准,前者是指用不同成像设备获取两幅或多幅待配准图像,它是针对不同线程、不同时间、不同成像模式的两幅或多幅图像进行空间几何变换,以使代表相同解剖结构的元素在几何上能够匹配对应起来,多模态图像配准在医学研究中具有极为重要的应用价值,随着科技的发展,医学分析和诊断多利用多模态图像,尤其医学图像配准是现代医学图像处理技术应用的一个重要方面,它是图像融合的第一步[2]。不同传感器所具有的特点不同,为了将多源图像进行有效地组织,发挥各自的优点,我们必须先研究各种传感器所具有的特点,针对这些传感器不同的特点,进行优势互补,帮助我们对所获多源图像进行解译。

不同模态的图像成像原理不同,而且提供的信息针对性也不同。临床上根据图像提供的信息内容将医学图像分为两大类:一类图像用于描述生理形态解剖结构的解剖图像,另一类图像用于描述生理代谢或功能信息的功能图像。前者包括计算机X射线断层成像简称(CT)、核磁共振成像(简称MR)、超声成像(简称US)和B型超声检查(简称B超)等。这类图像能准确反映人体器官的解剖结构信息并且有较高的分辨率,但是不能清晰地反映生理的功能信息。功能图像包括正电子发射断层成像(简称PET)、功能磁共振成像(简称FMR)和单光子发射计算机断层成像(简称SPECT)等。这类图像虽然能够提供脏器的功能代谢信息,但是它在反映人体器官的解剖结构信息时分辨率较低。[3]

在医学应用中,单一模态的图像往往难以提供足够的病理信息,医生为了获得病人多方面的信息常常需要将同一病人多种成像模式的图片综合起来进行分析,如在CT上观察骨组织,在MR上观察软组织;利用PET、SPECT获得功能信息,再综合CT、MR的解剖信息分析。这就是图像融合,这种把各种成像模式的图像信息融合成一种新的影像模式的图像融合技术,将同一或不同研究对象获得的相同模态或不同模态的图像在空间对齐,加工利用多元信息,使不同形式的信息互相补充,最终目的是将不同图像中的有用信息集成到一幅图像中,以便改善单一成像系统所形成的图像质量,以获取对同一场景的更为精确、客观、全面、可靠的图像描述[4]。经过融合后的图像互补了各种单一模式图像信息的不足,而在图像融合之前首先要

1

唐 山 学 院 毕 业 设 计

解决图像的配准问题,配准结果的好坏直接影响图像融合的质量。因此,医生要想全面了解病变组织的情况,必须准确的对多幅图像进行配准才能融合,进而制定出更加合理的治疗方案。

随着现代科技的迅速发展和新型传感器的不断涌现,人们获取图像数据的能力不断提高。由于不同物理特性的传感器所产生的图像不断增多,同一地区往往可以获得大量不同尺度、不同光谱、不同时相的多源图像数据信息。在利用多源图像信息进行数据融合、目标变化检测、目标识别等多源协同处理工作之前,必须进行多源图像配准工作,配准精度的高低直接影响到后续应用效果的好坏。所以,如何对图像进行高精度的配准一直是图像处理领域的热点与重点。

1.2 图像配准技术研究现状

早在七十年代美国从事的飞行器辅助导航系统、武器投射系统的末制导以及寻地等应用研究中就提出了图像配准。八十年代后,在遥感、模式识别、医学诊断、自动导航、计算机视觉等很多不同领域都有大量配准技术的研究。70年代,为提高配准的速度性能EE.Anutal就提出了使用FFT进行互相关图像检测计算的图像配准技术;D.L.Barneal等提出了使用模板子图像差值相似性测度的图像配准技术,它比EE.Anutal提出的使用FFT计算互相关相似性测度进行图像检测的方法有更高的性能;M.Svedlow对图像配准的相似性测度和预处理方法进行了比较分析;W.K.Prattl对图像配准的互相关技术进行了全面的研究;Eric.Rignot等在较高层次上对多图像的自动配准技术和要求进行比较和分析;Flussr又提出一个自适应映射方法,这种方法针对变形图像间的匹配,自动地对两幅遥感图像进行分割,使得分割后两幅图像上相应子块间的相似度较大,利用这些子块之间的空间位置关系来对原来的两幅图像进行匹配[5]。

医学图像的配准经历了一个较长的发展历程。二十世纪八十年代初,图像配准主要应用于DSA(数字减影血管造影)中。它针对二维图像采用基于图像灰度的方法,通过检测相关性和灰度值的差异来决定刚性变换的参数。这种方法在今天的三维变换中仍可以借鉴。二十世纪八十年代中后期到九十年代初,不同模态的图像配准开始受到关注,但这时候图像配准和图像融合也主要集中于二维刚性变换。二十世纪九十年代,医学图像配准研究取得了飞速发展,尤其在三维方向和非刚性图形配准上成果非常显著。由此可见,不论在国内还是国外图像配准技术经过多年的研究,图像配准技术己经取得了诸多研究成果。近二十年来,在模式识别和运动分析等领域里,配准技术发挥着越来越重要的作用。目前,像素级图像配准算法已基本成熟,亚像素级正在得到越来越广泛的应用。图像配准的高精度、配准算法的配准速度、配准算法的强鲁棒性、以及配准的自动化一直以来都是图像配准领域所不断

2

唐 山 学 院 毕 业 设 计

追求的目标。寻找一种在医学图像、遥感、计算机视觉等诸多领域通用的有效的图像配准技术也是目前正在积极探索和研究的课题。[5]

目前,尽管国内外在图像配准方面已经开展了许多研究工作,提出了许多种图像配准方法,但仍然存在不少问题,主要表现在[6]:

(1) 异构传感器图像配准技术。不同传感器所获得的图像往往存在很大差异,目前的配准方法对于特征一致或接近的图像配准方法比较成熟,而对于差别较大特征的图像则无法达到快速、自动配准。

(2) 自动配准技术。目前研究的大多数方法都需要进行人工交互自动配准,较难完成无需人工干预,计算机自动完成多源图像的配准。

(3) 快速图像配准算法。在建立实时、准实时图像融合系统时,一种快速图像配准算法是必不可少的。但是如何提高配准处理速度,进行快速和实时的图像配准,仍然是图像配准发展的一大难题。

(4) 高精度图像配准算法。在实际的应用中,图像易受噪声影响,尤其是在利用目标的特征配准中,获取区域和边缘时存在一定困难,实现高精度的图像配准难度很大。

(5) 差异较大条件下配准技术。对于两幅图像存在大的失配,如存在较大的非线性畸变,配准难度相当大,很多算法无法对以上情况配准。

3

唐 山 学 院 毕 业 设 计

2 图像配准综述

2.1 图像配准理论

图像配准是将两幅或多幅不同传感器、不同视角、不同时间及不同拍摄条件下的图像进行变换,如进行平移、旋转等形变,其最终目的是建立两幅图像像元之间的对应关系使其几何关系达到匹配,从而去除或抑制待配准图像和参考图像之间几何上的不一致。图像配准是图像智能分析与处理、图像对比、融合、变化分析和目标识别的的关键技术也是必要前提。

数字图像可以用一个二维矩阵表示,图像配准可以定义为两幅图像在空间和灰度上的映射,如果用I1(x,y),I2(x,y)分别表示浮动图像和参考图像在点(x,y)处的灰度值,f代表二维的集合变换函数,g表示一维的灰度变换函数,那么图像I1、I2的配准关系可以表示为公式

I2(x,y)?g(I1(f(x,y))) (2-1)配准的主要任务就是寻找最佳的空间变换关系f与灰度变换关系g,使图像相对于失配源得到匹配,两幅图像实现最佳对准。由于空间变换是实现灰度变换的前提,而且有些情况下灰度变换g是不需要的,所以寻找空间几何变换关系f便成了配准的关键所在。

2.2 图像配准一般步骤

特征提取 确定相似性测度 选择搜索空间搜索策略 确定配准参数完成配准

图2-1 图像配准一般步骤

图2-1为图像配准一般步骤,具体步骤如下:

第一步是特征空间的选择,也即特征提取。特征提取的方法应该对图像退化不敏感,并且有良好的定位精度。在理想情况下,同一场景的图像细节即使受图像退化的影响,各个投影也应该可以提取出相同的特征。

第二步是构造相似性测度准则。因为相似性度量的是特征之间的相似性,此步骤与特征空间密切相关。图像中的本质结构成为配准的依据,需要其通过特征空间和相似性测度的合理选择而在图像处理的过程中保持不变性。典型的相似性测度有互相关方法、绝对差方法、傅立叶方法(如相位相关)、互信息法等。[7]依据具体的

4

唐 山 学 院 毕 业 设 计

配准应用而决定最终相似性测度的选择,相似性测度决定图像中哪些因素参与配准,哪些不参与,因此可以消除或减弱图像畸变对配准的影响,所以它将决定图像配准中使用哪种变换模型。

第三步是确定搜索空间和搜索策略。搜索空间与相似性度量密切相关,不同的搜索空间对应不同的相似性度量,搜索策略的选择直接关系到配准速度的快慢。 第四步输出配准参数。

2.3 特征空间

特征空间指从参考图像和浮动图像中提取用于匹配的特征。图像配准中提取的图像特征有着重要意义,关系到图像中哪些特征对配准算法敏感和哪些特征被匹配,并且大体上决定了配准算法的运行速度和鲁棒性能。在基于灰度的配准方法中,基本的像素灰度值是一种特征空间;在基于特征的图像配准中还可以包括如边缘、曲线、曲面等常见的特征,拐角、交叉线、高曲率的点等显著的视觉特征,不变矩等统计特征。所有计算机视觉和图像处理任务都会涉及到图像特征这个基本因素,因为它将影响到:

(1) 成像设备和图像中何种特征会对算法敏感; (2) 运用何种特征进行匹配;

(3) 算法执行的效率和后续方法的选择。

因此,一个好的图像特征选择将会消除噪音干扰,降低参与计算的数据量,提高配准速度,同时又不失充分表达图像内容等信息。

理想的特征空间应满足以下几个条件: (1) 特征匹配的运算量要小; (2) 特征的提取要简单快捷; (3) 特征数据要合适; (4) 对各种图像均能使用; (5) 不受噪声光照度等因素影响。

2.3.1 基于灰度统计信息的配准

基于灰度的配准方法又称为基于体素或像素相似性的配准方法,这种方法,直接利用整幅图像的灰度度量两幅图像之间的相似性,以图像内部的信息为依据,然后采用搜索方法寻找使相似性度量最大或最小值点,确定参考图像和浮动图像之间的变换参数。基于灰度的配准方法实现简单,只对图像的灰度进行处理,不需要对参考图像和待配准图像进行复杂的预处理,配准结果只依赖于配准方法本身,避免了主观因素的影响,同时可以避免因图像分割而给图像带来的额外误差,并能实现完全自动配准。因此,基于灰度的配准方法在图像配准领域中应用最为广泛。但基

5

唐 山 学 院 毕 业 设 计

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

Top