基于VC++的图像融合技术的实现毕业设计论文.docx

上传人:b****7 文档编号:11198670 上传时间:2023-02-25 格式:DOCX 页数:64 大小:716.96KB
下载 相关 举报
基于VC++的图像融合技术的实现毕业设计论文.docx_第1页
第1页 / 共64页
基于VC++的图像融合技术的实现毕业设计论文.docx_第2页
第2页 / 共64页
基于VC++的图像融合技术的实现毕业设计论文.docx_第3页
第3页 / 共64页
基于VC++的图像融合技术的实现毕业设计论文.docx_第4页
第4页 / 共64页
基于VC++的图像融合技术的实现毕业设计论文.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

基于VC++的图像融合技术的实现毕业设计论文.docx

《基于VC++的图像融合技术的实现毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于VC++的图像融合技术的实现毕业设计论文.docx(64页珍藏版)》请在冰豆网上搜索。

基于VC++的图像融合技术的实现毕业设计论文.docx

基于VC++的图像融合技术的实现毕业设计论文

基于VC++的图像融合技术的实现

摘要

近年来,图像融合已成为图像理解和计算机视觉领域中一项重要而有用的新技术。

融合图像更符合人和机器的视觉特性,更有利于诸如目标识别、特性提取等进一步的图像处理。

图像融合已成为人类社会的很重要的一项技术。

本文将介绍图像融合技术研究的背景,描述了图像融合的基本概念、层次、应用及国内外研究动态。

图像预处理、创建融合图像和对融合图像进行质量评价是这次研究的主要内容。

图像预处理包括图像的复原和图像的变换,通过预处理提高图片的融合质量。

创建融合图像建融合图像是对至少两幅源图像,在空域或频域根据一定的规则加以组合,创建一个全新的图像;最后就是对融合图像的质量进行评价。

图象融合是指将自不同类型传感器获取的同一地区的各图像数据进行空间配准,然后采用一定的算法将配准后的各图像数据中所含的显著信息或互补信息有机地结合起来,产生新的图像数据,并对新数据进行解译。

融合后图像对场景的描述比任何单一源图像都更全面、更精确。

融合图像更符合人和机器的视觉特性,更有利于诸如目标识别、特性提取等进一步的图像处理。

再具体一些。

关键词:

C++,链接库,图像处理,图像的配准,图像融合

ABSTRACT

Inrecentyears,imagefusionhasbecometheimageunderstandingandcomputervisionfieldsisanimportantandusefultechnique.Fusionimagesaremoresuitableforhumanandmachinevision,moreconducivetosuchastargetrecognition,featureextraction,furtherimageprocessing.Imagefusionhasbecomehumansocietyoneoftheimportanttechnology.

Thispaperintroducestheimagefusiontechnologyresearchbackground,describesthebasicconceptofimagefusion,theapplicationlevel,andthedomesticandinternationalresearchtrends.Imagepreprocessing,creatingimagefusionandqualityevaluationoffusedimageisthemaincontentoftheresearch.Imageprocessingincludingimagerestorationandimagetransform,throughpretreatmentimprovesimagefusionquality.Createthefusionimagefusionimageisbuiltonatleasttwosourceimageinspatialdomainandfrequencydomain,accordingtocertainrulestobecombined,createanewimage;finallyistothefusionimagequalityassessment.

Imagefusionreferstothedifferenttypesofsensorstoobtainfromthesameareaoftheimagedatatospatialregistration,andthenusingacertainalgorithmwillbeaftertheregistrationoftheimagedatacontainedinthesignificantorthecomplementaryinformationorganically,generatinganewimagedata,andtonewdatainterpretation.Afterthefusionimagedescriptionofthescenethananyoftheindividualsourceimagesaremorecomprehensive,moreaccurate.Fusionimagesaremoresuitableforhumanandmachinevision,moreconducivetosuchastargetrecognition,featureextraction,furtherimageprocessing.

 

KeyWords:

C++library,ImageProcessing,Imageregistration,ImageFusion

目 录

1.2MFC概述

2.2图像融合基础

2.2.1位图和调色板的概念

2.2.2BMP文件格式

2.2.3BMP文件的读取

3.1.3融合图像的目的

3.2.2图像融合分层

3.2.1融合总流程

3.2.3图像融合算法

3.3VC环境下融合的C++实现

3.3.1融合的程序方案方针

3.3.2VC环境下融合的部分程序的框架

3.3.3VC环境下融合的部分程序源代码

第4章图像融合实例应用

5.1图像融合的现状

5.2图像融合的展望

前 言

图像融合是数据融合一个非常重要的分支,是20世纪70年代后期提出的概念,是综合了传感器、图像处理、信号处理、计算机和人工智能的现代高新技术。

图像融合把工作于不同波长范围、具有不同成像机理的图像传感器对同一个场景的多个成像信息融合成一个新图像,从而使融合的图像可信度更高,模糊较少,可理解性更好,更适合人的视觉及计算机检

测、分类、识别、理解等处理。

图像融合的处理通常可在以下三个不同层次上进行:

像素级、特征级、决策级。

像素级图像融合主要是针对初始图像数据进行的,其目的主要是图像增强、图像分割和图像分类,从而为人工判读图像或进一步的特征级融合提供更佳的输入信息;特征级图像融合是指从各个传感器图像中提取特征信息,并进行综合分析和处理的过程,提取的特征信息是像素信息的充分表示量或充分统计量,典型的特征信息有边缘、形状、轮廓、角、纹理、相似亮度区域等;决策级图像融合是对来自多幅图像的信息进行逻辑推理或统计推理的过程。

国内外在图像融合的不同层次上开展了大量的模型和算法的研究,取得了很多宝贵的研究成果,涌现出大量文献,但由于系统介绍图像融合理论、方法和应用的书籍非常少,使很多刚刚踏入这一研究领域的初学者感到学习起来相当困难,这也不利于图像融合研究和应用的进一步普及和深人发展。

第1章面向对象技术与MFC概述

 

1.1面向对象技术

面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。

它以数据为中心而不是以功能为中心来描述系统,数据相对于功能而言具有更强的稳定性。

它将数据和对数据的操作封装在一起,作为一个整体来处理,采用数据抽象和信息隐蔽技术,将这个整体抽象成一种新的数据类型——类,并且考虑不同类之间的联系和类的重用性。

类的集成度越高,就越适合大型应用程序的开发。

另一方面,面向对象程序的控制流程由运行时各种事件的实际发生来触发,而不再由预定顺序来决定,更符合实际。

事件驱动程序的执行围绕消息的产生与处理,靠消息循环机制来实现。

在实际编程时可以采用搭积木的方式来组织程序,站在“巨人”的肩上实现自己的目标。

面向对象程序的设计方法使得程序结构清晰、简单,提高了代码的重用性,有效减少了程序的维护量,提高了软件的开发效率。

面向对象技术强调在软件开发过程中面向客观世界或问题域中的事物,采用人类在认识客观世界的过程中普遍运用的思维方法,直观、自然地描述客观世界中的有关事物。

面向对象技术的基本特征主要有抽象性、封装性、继承性和多态性。

在结构上,面向对象程序与面向过程程序有很大不同。

面向对象程序由类的定义和类的使用两部分组成:

在主程序中定义各对象并规定他们之间传替消息的规律,程序中的一切操作都通过向对象发送消息来实现;对象接到消息后,启动消息处理函数完成相应的操作。

面向对象程序设计(ObjectOrientedProgramming,OOP)方法出现之前,程序员用面向过程的方法开发程序。

面向过程的方法把密切相关、相互依赖的数据和对数据的操作相互分离这种实质上的依赖与形式上的分离使得大型程序不但难以编写,而且难以调试和修改。

1.2MFC概述

MFC(MicrosoftFoundationClassLibrary)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。

因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。

MicrosoftVisualC++提供了相应的工具来完成这个工作:

AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。

MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。

这些类中,最重要的类是CObject和CCmdTarget。

CObject是MFC的根类,绝大多数MFC类是其派生的,包括CCmdTarget。

CObject实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。

所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。

CCmdTarget通过封装一些属性和方法,提供了消息处理的架构。

MFC中,任何可以处理消息的类都从CCmdTarget派生。

针对每种不同的对象,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。

MFC以“C++”为基础,自然支持虚拟函数和动态约束。

但是作为一个编程框架,有一个问题必须解决:

如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟函数表过于臃肿,消耗内存,效率低下。

于是,MFC建立了消息映射机制,以一种富有效率、便于使用的手段解决消息处理函数的动态约束问题。

这样,通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。

程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入MFC的编程框架。

MFC编程框架将在适当的时候、适当的地方来调用程序的代码。

第2章VisualC++的简介与图像融合

 

2.1VisualC++发展

2.1.1VisualC++简介

VC++是微软公司开发的一个IDE(集成开发环境),换句话说,就是使用c++的一个开发平台.vc++是Windows平台上的C++编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。

VC作为一个主流的开发平台一直深受编程爱好者的喜爱,但是很多人却对它的入门感到难于上青天,究其原因主要是大家对他错误的认识造成的,严格的来说VC++不是门语言,虽然它和C++之间有密切的关系,如果形象点比喻的话,可以C++看作为一种”工业标准”,而VC++则是某种操作系统平台下的”厂商标准”,而”厂商标准”是在遵循”工业标准”的前提下扩展而来的。

从最早期的1.0版本,发展到最新的6.0版本,VisualC++已经有了很大的变化,在界面、功能、库支持方面都有许多的增强。

VisualC++集成开发环境(IDE)

集成开发环境(IDE)是一个将程序编辑器、编译器、调试工具和其他建立应用程序的工具集成在一起的用于开发应用程序的软件系统。

VisualC++软件包中的DeveloperStudio就是一个集成开发环境,它集成了各种开发工具和VC编译器。

程序员可以在不离开该环境的情况下编辑、编译、调试和运行一个应用程序。

IDE中还提供大量在线帮助信息协助程序员做好开发工作。

DeveloperStudio中除了程序编辑器、资源编辑器、编译器、调试器外,还有各种工具和向导(如AppWizard和ClassWizard),以及MFC类库,这些都可以帮助程序员快速而正确地开发出应用程序。

一个通过一步步的帮助引导你工作的工具。

DeveloperStudio中包含三个向导,用来帮助程序员开发简单的Windows程序,它们是:

AppWizard:

用来创建一个Windows程序的基本框架结构。

AppWizard向导会一步步向程序员提出问题,询问他所创建的项目的特征,然后AppWizard会根据这些特征自动生成一个可以执行的程序框架,程序员然后可以在这个框架下进一步填充内容。

AppWizard支持三类程序:

基于视图/文档结构的单文档应用、基于视图/文档结构的多文档应用程序和基于对话框的应用程序。

也可以利用AppWizard生成最简单的控制台应用程序(类似于DOS下用字符输入输出的程序)。

ClassWizard:

用来定义AppWizard所创建的程序中的类。

可以利用ClassWizard在项目中增加类、为类增加处理消息的函数等。

ClassWizard也可以管理包含在对话框中的控件,它可以将MFC对象或者类的成员变量与对话框中的控件联系起来。

ActiveXControlWizard:

用于创建一个ActiveX控件的基本框架结构。

ActiveX控件是用户自定义的控件,它支持一系列定义的接口,可以作为一个可再利用的组件。

MFC库

库(library)是可以重复使用的源代码和目标代码的集合。

MFC(MicrosoftFundamentalCasses)是VisualC++开发环境所带的类库,在该类库中提供了大量的类,可以帮助开发人员快速建立应用程序。

这些类可以提供程序框架、进行文件和数据库操作、建立网络连接、进行绘图和打印等各种通用的应用程序操作。

使用MFC库开发应用程序可以减少很多工作量。

2.1.2VisualC++特点

VisualC++是一个功能强大的可视化软件开发工具。

自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。

VisualC++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。

VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。

这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。

  VisualC++它大概可以分成三个主要的部分:

  1.DeveloperStudio,这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“MicrosoftVisualC++”,所以很多人理所当然的认为,那就是VisualC++了。

其实不然,虽然DeveloperStudio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。

我们也知道,DeveloperStudio并不是专门用于VC的,它也同样用于VB,VJ,VID等VisualStudio家族的其他同胞兄弟。

所以不要把DeveloperStudio当成VisualC++,它充其量只是VisualC++的一个壳子而已。

这一点请切记!

  2.MFC。

从理论上来讲,MFC也不是专用于VisualC++,BorlandC++,C++Builder和SymantecC++同样可以处理MFC。

同时,用VisualC++编写代码也并不意味着一定要用MFC,只要愿意,用VisualC++来编写SDK程序,或者使用STL,ATL,一样没有限制。

不过,VisualC++本来就是为MFC打造的,VisualC++中的许多特征和语言扩展也是为MFC而设计的,所以用VisualC++而不用MFC就等于抛弃了VisualC++中很大的一部分功能。

但是,VisualC++也不等于MFC。

  3.PlatformSDK。

这才是VisualC++和整个VisualStudio的精华和灵魂,虽然我们很少能直接接触到它。

大致说来,PlatformSDK是以MicrosoftC/C++编译器为核心(不是VisualC++,看清楚了),配合MASM,辅以其他一些工具和文档资料。

上面说到DeveloperStudio没有编译程序的功能,那么这项工作是由谁来完成的呢?

是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成VisualStudio的基石。

2.2图像融合

2.2.1位图和调色板的概念

如今Windows(3.x以及95,98,NT)系列已经成为绝大多数用户使用的操作系统,它比DOS成功的一个重要因素是它可视化的漂亮界面。

那么Windows是如何显示图象的呢?

这就要谈到位图(bitmap

普通的显示器屏幕是由许许多多点构成的,我们称之为象素。

显示时采用扫描的方法:

电子枪每次从左到右扫描一行,为每个象素着色,然后从上到下这样扫描若干行,就扫过了一屏。

为了防止闪烁,每秒要重复上述过程几十次。

例如我们常说的屏幕分辨率为640×480,刷新频率为70Hz,意思是说每行要扫描640个象素,一共有480行,每秒重复扫描屏幕70次。

我们称这种显示器为位映象设备。

所谓位映象,就是指一个二维的象素矩阵,而位图就是采用位映象方法显示和存储的图象。

有一个长宽各为200个象素,颜色数为16色的彩色图,每一个象素都用R、G、B三个分量表示。

因为每个分量有256个级别,要用8位(bit),即一个字节(byte)来表示,所以每个象素需要用3个字节。

整个图象要用200×200×3,约120k字节,可不是一个小数目呀!

如果我们用下面的方法,就能省的多。

因为是一个16色图,也就是说这幅图中最多只有16种颜色,我们可以用一个表:

表中的每一行记录一种颜色的R、G、B值。

这样当我们表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。

举个例子,如果表的第0行为255,0,0(红色),那么当某个象素为红色时,只需要标明0即可。

让我们再来计算一下:

16种状态可以用4位(bit)表示,所以一个象素要用半个字节。

整个图象要用200×200×0.5,约20k字节,再加上表占用的字节为3×16=48字节.整个占用的字节数约为前面的1/6,省很多吧?

这张R、G、B的表,就是我们常说的调色板(Palette)。

既然用R,G,B的量化值就可以直接记录一张位图的所有像素,那我们需要调色板干什么呢?

首先,我们可以计算完全利用(R,G,B)组合来存储一个800×600的位图所需要的空间为:

800×600×3=1440000(字节)=1.37M(字节),3是记录每个像素RGB值所用的字节数,这里说的是24位图,RGB值就用来描述一个像素,,位图是由像素组成的,,因此用一张位图大小乘它的像素数就可以直接描述一张位图,惊人的大!

因此,调色板横空出世了,它的功能在于缓解位图文件存储空间(显存或系统内存)过大的问题。

在winos中存在三种调色板,,硬件调色板,逻辑调色板,系统调色板,,winos用"调色板管理器"机制来管理调色板,,调色板存在于一个位图文件中,一个窗体的DC中,,或OS中,,硬件调色板就是显卡适配器所能实际表达的颜色深度,,逻辑调色板就是winos通过调色板管理机制为每个窗体应用程序DC分配的调色板(系统调色板只有一个,而逻辑调色板可以有多个,,它的本质就是一块内存中的区域用于描述当前应用使用到的调色板,我们都知道调色板是一个结构),,所以逻辑调色板的用途在于模拟硬件调色板,,以使windows作为一个os可以为界面显示,图像显示等应用提供它们各自专用的活动的调色板,,当逻辑调色板色深小于或大小硬件调色板时,,winos通过调色板管理机制自动让二者谐和,,系统调色板就是winos当前正在使用到的调色板,逻辑调色板可以通过调色板管理机制转变为当前系统调色板,,,但是不管winos的调色板管理机制如何,,最终的调色板都要靠硬件调色板来实现。

2.2.2bmp文件格式

BMP(全称Bitmap)是Window操作系统中的标准图像文件格式,可以分成两类:

设备相关位图(DDB)和设备无关位图(DIB),使用非常广。

它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。

BMP文件的图像深度可选lbit、4bit、8bit及24bit。

BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。

由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。

BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。

文件头主要包含文件的大小、文件类型、图像数据偏离文件头的长度等信息;位图信息头包含图象的尺寸信息、图像用几个比特数值来表示一个像素、图像是否压缩、图像所用的颜色数等信息。

颜色信息包含图像所用到的颜色表,显示图像时需用到这个颜色表来生成调色板,但如果图像为真彩色,既图像的每个像素用24个比特来表示,文件中就没有这一块信息,也就不需要操作调色板。

文件中的数据块表示图像的相应的像素值,需要注意的是:

图像的像素值在文件中的存放顺序为从左到右,从下到上,也就是说,在BMP文件中首先存放的是图像的最后一行像素,最后才存储图像的第一行像素,但对与同一行的像素,则是按照先左边后右边的的顺序存储的;文件存储图像的每一行像素值时,如果存储该行像素值所占的字节数为4的倍数,则正常存储,否则,需要在后端补0,凑足4的倍数。

2.2.3bmp文件的读取

BMP文件的读取与显示系统需要处理对文件的格式的辨别、对文件的组成和结构进行分析等方面,具体包括对以下五个方面进行处理:

BMP文件组成,BMP文件头,位图信息头,颜色表,位图数据。

系统的处理功能主要包括在指定的设备环境上显示指定的位图、从指定的位图文件中读取位图信息及数据并显示在客户区上、将客户区显示的图像保存到指定的位图文件中、保存位图文件等。

BMP文件的读取与显示系统功能模块层次图,如图2-1所示。

在应用程序中加入具体的函数和变量。

(1)在CdipView.h中加入如入变量:

public:

intm_x;

HBITMAPm_Bmp;

LPVOIDm_ColorList;

LPBYTEm_Image;

LPBITMAPINFOHEADERm_DibHead;

enumallocate{None,crtallocate,heapal

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1