基于多边形图形绘制的医学图像交互式分割方法的研究与实现毕业论文.doc

上传人:文库蛋蛋多 文档编号:3940467 上传时间:2023-03-28 格式:DOC 页数:22 大小:139KB
返回 下载 相关 举报
基于多边形图形绘制的医学图像交互式分割方法的研究与实现毕业论文.doc_第1页
第1页 / 共22页
基于多边形图形绘制的医学图像交互式分割方法的研究与实现毕业论文.doc_第2页
第2页 / 共22页
基于多边形图形绘制的医学图像交互式分割方法的研究与实现毕业论文.doc_第3页
第3页 / 共22页
基于多边形图形绘制的医学图像交互式分割方法的研究与实现毕业论文.doc_第4页
第4页 / 共22页
基于多边形图形绘制的医学图像交互式分割方法的研究与实现毕业论文.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《基于多边形图形绘制的医学图像交互式分割方法的研究与实现毕业论文.doc》由会员分享,可在线阅读,更多相关《基于多边形图形绘制的医学图像交互式分割方法的研究与实现毕业论文.doc(22页珍藏版)》请在三一办公上搜索。

1、本科毕业论文基于多边形图形绘制的医学图像交互式分割方法的研究与实现 姓 名 学 院 医疗器械与食品学院 专 业 医学影像工程 指导教师 完成日期 2012年05月 基于多边形图形绘制的医学图像交互式分割方法的研究与实现摘 要随着计算机辅助诊断技术的不断发展,医学图像处理技术也越来越被人们所关注。医学图像由于其携带大量信息使得其一直是临床诊断的一个难题。如果对医学影像进行分割,提取感兴趣区域进行研究,将会大大增加诊断效率。而传统的人工方式分割不仅需要大量时间和精力,也已无法满足目前在一些先进领域的分割要求。计算机自动分割虽然可以大大提高分割效率,但很难得到令人满意的分割结果。因此将两者优势相结合

2、的方法,交互式分割方式成为如今的研究热点。关键词:多边形图形绘制 交互式分割 医学图像 RESEARCH AND REALIZATION ON AN INTERACTIVE SEGMENTATION METHOD OF PULMONARY NODULES BASED ON THE POLYGONAL GRAPHICSABSTRACTWith the development of computer aided diagnosis technology , medical image processing technique has been concerned by more and more

3、people. Medical image carry a lot of information so it has been a difficult problem in clinical diagnosis. If the image can be segmented and region of interest can be extracted for research, this will greatly increase the efficiency of diagnosis. But the traditional artificial way of dividing not on

4、ly needs a lot of time and energy, but also has been unable to meet the requirements in some advanced fields of segmentation. Computer automatic segmentation although can greatly improve the efficiency of segmentation, but it is difficult to get satisfactory segmentation results. Therefore the advan

5、tages of combining the two method of interactive segmentation method, has becomes the hot spot in research.KEYWORDS:medical imaging polygonal graphics interactive segmentation目 录中文摘要ABSTRACT第1 章 绪 论11.1数字图像处理技术的发展现状11.2数字图像处理技术在医学领域中的应用1第2章 图像分割技术32.1图像分割的基本概念32.2 图像分割的常用方式及特点32.3交互式分割的优点及研究意义3第3章 基

6、于VC+的数字图像处理技术53.1 C+面向对象程序设计的技术优点53.2 MFC编程介绍63.3 MFC编程在本研究中的应用63.4 BMP图像格式介绍73.5 CDIB类的封装介绍9第4章 基于多边形绘制的交互感兴趣区域的选择和分割124.1 C+图形绘制的技术要点124.2多边形图形绘制技术124.3使用C+打开BMP图像介绍124.4使用C+显示BMP图像介绍134.5感兴趣区域图像的分割144.6感兴趣区域图像的保存14第5章 实验结果及总结155.1 实验方案155.2 实验结果15第6章 总结及展望16致 谢17参 考 文 献18第1 章 绪 论1.1数字图像处理技术的发展现状数

7、字图像处理又称为计算机图像处理,它是指将图像信号转换成数字信号并利用 计算机对其进行处理的过程。数字图像处理的产生和迅速发展主要受三个因素的影响:一是计算机的发展;二是数学的发展(特别是离散数学理论的创立和完善);三是广泛的农牧业、林业、环境、军事、工业和医学等方面的应用需求的增长。数字图像处理最早出现于20世纪50年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息。数字图像处理作为一门学科大约形成于20世纪60年代初期。早期的图像处理的目的是改善图像的质量,它以人为对象,以改善人的视觉效果为目的。图像处理中,输入的是质量低的图像,输出的是改善质量后的图像,常用的

8、图像处理方法有图像增强、复原、编码、压缩等。首次获得实际成功应用的是美国喷气推进实验室(JPL)。他们对航天探测器徘徊者7号在1964年发回的几千张月球照片使用了图像处理技术,如几何校正、灰度变换、去除噪声等方法进行处理,并考虑了太阳位置和月球环境的影响,由计算机成功地绘制出月球表面地图,获得了巨大的成功。随后又对探测飞船发回的近十万张照片进行更为复杂的图像处理,以致获得了月球的地形图、彩色图及全景镶嵌图,获得了非凡的成果,为人类登月创举奠定了坚实的基础,也推动了数字图像处理这门学科的诞生。在以后的数字图像处理技术宇航空间技术,如对火星、土星等星球的探测研究中,数字图像处理技术都发挥了巨大的作

9、用。数字图像处理取得的另一个巨大成就是在医学上获得的成果。与此同时,图像处理技术在许多应用领域受到广泛重视并取得了重大的开拓性成就,属于这些领域的有航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等,使图像处理成为一门引人注目、前景远大的新型学科。随着图像处理技术的深入发展,从70年代中期开始,随着计算机技术和人工智能、思维科学研究的迅速发展,数字图像处理向更高、更深层次发展。人们已开始研究如何用计算机系统解释图像,实现类似人类视觉系统理解外部世界,这被称为图像理解或计算机视觉。图像理解虽然在理论方法研究上已取得不小的进展,但它本身是一个比较难的研究领域,存在不少困难

10、,因人类本身对自己的视觉过程还了解甚少,因此计算机视觉是一个有待人们进一步探索的新领域。1.2数字图像处理技术在医学领域中的应用随着计算机技术的不断推广和应用,计算机在医学领域的应用也越来越普遍, 数字图像处理也随着计算机技术的发展越来越广泛的应用于各个领域,在医学领域也不例外,尤其是医学影像方面体现的更为突出。从根本上说医学影像离不开计算机现代医学影像成像,依据电离辐射和非电离辐射的自身性质和它们与物质相互作用的规律,用现代技术手段来采集成像数据,按一定的数学方法用计算机重建数字图像。这也就是说,要深入挖掘图像所蕴藏的生物信息和很好地控制图像质量,仅有雄厚的医学知识是不够的,还需要计算机、数

11、学等理工基础知识作保障。计算机处理的是数字图像我们从显示器上可以识别出一条线、一幅照片、一部动画片。但对于计算机而言,却以相同的方式看待它们-把它们当成数据,一堆可操作的二进制数。不同的数据代表不同的信息,给我们以不同的视觉形象,即不同的数字图像。医学影像质量的好坏、分辨率的高低以及对影像图片的读释能力,将影响着诊断的准确性。这就要求人们能对数字图像有更深一层的了解,对数字图像能有选择、有目的的进行各种调整,以便得到更精确的诊断依据。在数字图像处理中通过各种运算变换,可以突出强化出图像特征中需要的部分,提高医生的诊断效率以及诊断准确率。与一般意义上的图像处理比较,医学图像处理有其特殊性和不同的

12、侧重点。自从显微镜问世以来,对医学图像的处理及分析就已成为医学研究中的重要方法,特别是X- CT、MRI、PET、SPECT 等新型成像技术和设备的问世,使得医学图像处理技术对医学研究及临床诊断的影响与日俱增,其结果使临床医生对人体内部病变部位的观察更直接、更清晰,确诊率也更高。计算机和医学图像处理技术作为这些成像技术的发展基础,带动着现代医学诊断正产生着深刻的变革。数字医学图像的计算机辅助诊断目前主要应用在乳腺癌的早期诊断、肺部疾病的诊断、心脏疾病和肝癌的诊断。各种新的医学成像方法在临床的应用,使医学诊断技术取得了巨大的进展。医学图像处理的基本步骤如图1.1:原始图像打开图像保存图像图像处理

13、图像分割图1.1 医学图像处理的基本步骤第2章 图像分割技术2.1图像分割的基本概念图像分割是指将图像中的信息,根据某一特性将符合此特性的区域提取出来,从而进一步进行相关研究和处理的过程。医学图像分割就是按照解剖结构及医学治疗的意图,把医学图像的不同区域进行聚类,并提取出感兴趣的目标区域的技术和过程。通过对分割结果的定量分析和测量(如对人体器官、组织或病灶的体积测量等),可以为医师确定病情,制定相应的治疗计划和方案提供依据。2.2 图像分割的常用方式及特点图像分割的方法有很多,主要可以分为三大类:人工分割,自动分割和交互式分割。人工分割是指完全由操作者利用鼠标等工具在图像中勾勒出感兴趣区域的轮

14、廓,人工分割耗时、枯燥、工作量大,而且对医生的经验和技术的要求也非常高。自动分割是指:利用计算机根据特定某种算法提取出相应的区域。特点是:不需要人机交互,适应性差,很难实现对一批图像同时获得满意的分割效果。交互式分割也可以称为半自动分割,是由用户给出图像中感兴趣区域的大致范围,并标记出目标区域中的典型像素,从而提供部分先验信息,然后分割算法再根据这些信息对图像进行分割。交互式分割的特点在于只要人工提供少量信息,就能适应不同的图像特性和需求,提高分割准确率,同时可以有效降低计算复杂度。事实上,交互式分割与非交互式分割绝大多数在原理上没有本质区别,交互式操作往往在分割过程由人工参与,决定一些参数或

15、者容许条件,而非交互式的算法则依照某种规律有算法自己确定。目前交互式分割算法由于其具有高精度、实用性较强等特点成为医学分割的重点。2.3交互式分割的优点及研究意义由于人体组织结构复杂、几何形态不规则,所以医学图像相比较其他图像而言,其携带的信息量大,并且对噪声非常敏感。正是由于这个特殊性,医学图像分割也就具有了其特殊的复杂性,从而成为近年图像分析中的热点和难点问题。早期的图像分割完全是靠手工完成的,完全人工分割费时费力,不能适应现代医学的发展要求,随着计算机技术的普及,自动分割方法被广泛应用,但是自动分割方法往往不能达到理想的分割效果,因此研究能尽可能降低人的工作量又能很好的融入人的主观经验的

16、交互式分割算法成为近年来医学分割领域的研究重点。也就说明了在医学图像的分割过程中能够适时融入医师的主观经验的交互式分割方法在医学图像分割领域中具有不可替代的优势。采用交互式图像分割方法与其他分割方法的不同之处在于:对图像实施分割的过程中,操作者可对图像分割过程进行干预和控制,也就是说操作者和计算机协同完成图像的分割。这样,操作者的主观经验和知识与计算机的快速数据处理能力有机地结合起来。可以说医学图像分割技术在医学临床诊断、病理分析、以及治疗计划制定等各个环节都起到重要作用。事实上,分割后的图像数据也为机体或组织器官的三维重建、医学治疗体系可视化、病情跟踪、医学教学及手术仿真,尤其为放射技术的发

17、展也具有重要的意义。第3章 基于VC+的数字图像处理技术3.1 C+面向对象程序设计的技术优点面向对象编程是一种计算机编程架构。面向对象程序设计可以被视作一种在程序中包含各种独立而又互相调用的单位和对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,或者说是负有责任的角色。其基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。面向对象程序设计达到了软件工程的三个主要目标:重用性、灵活性和扩展性

18、。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。面向对象出现以前,结构化程序设计是程序设计的主流,结构化程序设计又称为面向过程的程序设计。在面向过程程序设计中,问题被看作一系列需要完成的任务,函数(在此泛指例程、函数、过程)用于完成这些任务,解决问题的焦点集中于函数。其中函数是面向过程的,即它关注如何根据规定的条件完成指定的任务。在多函数程序中,许多重要的数据被放置在全局数据区,这样它们可以被所有的函数访问。每个函数都可以具有它们自己的局部数据。这种结构很容易造成全局数据在无意中被其他函数改动,因而程序的正确性不易保证。面向对象程序设计的出发点之一就是弥补面向过程程序

19、设计中的一些缺点:对象是程序的基本元素,它将数据和操作紧密地连结在一起,并保护数据不会被外界的函数意外地改变。比较面向过程程序设计,面向对象程序设计有如下其他优点:1)数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰2)通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度;3)结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程;4)通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软件复杂度; 5)以对象为中心的设

20、计可以帮助开发人员从静态(属性)和动态(方法)两个方面把握问题,从而更好地实现系统;6)通过对象的聚合、联合可以在保证封装与抽象的原则下实现对象在内在结构以及外在功能上的扩充,从而实现对象由低到高的升级。3.2 MFC编程介绍MFC(MicrosoftFoundationClasses)库是Microsoft为利用VC+开发windows应用程序而提供的应用程序框架。在这个框架的支持下,对于不同的应用程序,编程的主要任务是填写各自特殊部分的代码。MFC类库由130多个类组成,封装了2000多个API函数。MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的

21、动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在Windows中实现内部处理的类,如数据库的管理类等.MFC是微软封装了的API。也就是说windows作为一个提供功能强大的应用程序接口编程的操作系统,的确方便了许多程序员,传统的win32开发(直接使用windows的接口函数API)对于程序员来说难度很大,因为,API函数实在太多了,而且名称很乱。MFC是面向对象程序设计与Application framework的完美结合,它将传统的API进行了分类封装,并且创建了程序的一般框架,大大简化了程序员的工作。使用MF

22、C编程具有很多优点:用类编程,将代码和数据封装在类中,大大减少了编程的复杂性;通过继承实现了基本的代码重用,在开发应用程序的过程中,我们可以通过继承来使用MFC中已经定义的大量类,在保有他们原有的特性的同时,可以根据我们的需要来修改他们,使其具有新的特性;在使用MFC进行编程的过程中,可以利用其提供的各种工具,提高编程的效率;借助MFC类库中设计良好的类资源可以减少代码规模。使用MFC类库,编程者只需要注意应用程序与通用的Windows程序所不同的特性,而几乎所有的应用程序与Windows之间的接口都是由应用程序框架来实现的,这大大降低了编程的难度。Windows区别于DOS的一个重要特性就是

23、它的图形界面,所以,在Windows的程序中绘图就成为了Windows编程的一个非常重要的内容。为了满足编程者在程序中绘图的需要,MFC提供了许多与绘图相关的函数和类,用户可以使用它们绘制出各种理想的图形。 3.3 MFC编程在本研究中的应用本研究使用的语言工具是Microsoft Studio VC+ 6.0,基本思想是利用MFC设计一个程序,使其能够打开并显示BMP图像,将图像数据保存到动态数组中,然后人工在图像中选取一些点作为感兴趣区域基准点,以这些点为顶点绘制不规则多边形,最后将感兴趣区域存储。此功能跟一般的画图工具很相似,不同的是由于MFC的特殊性,它可以动态地保存图像的数据并且可以

24、随时调用。也就是说操作者可以对数组中的数据做任何需要的处理,如中值滤波,灰度化等等,但是在本研究中的重点是在图像中绘制图形。同时利用 MFC框架编程可以对自己程序的界面进行设计,包括菜单项的关联,工具条的制定,按钮的设计等等。另外,在本研究中,笔者将很多基本函数和变量封装在了一个基类中,很多类都是由这个基类派生而来的,这样不仅让程序变得逻辑清楚,而且易于修改。也就是说,如果操作者需要再添加某些功能,或者说修改某一部分的代码,这都不会影响到程序本身。笔者后续的研究也将会在此基础上进行。3.4 BMP图像格式介绍在对图像进行数字处理之前,通常要先弄清楚图像的内部结构,从而可以调用图像中的数据进行相

25、应的处理。这里主要介绍BMP图像,BMP是一种与硬件设备无关的图像文件格式,BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。1) BMP文件头: 主要包含BMP文件的大小、文件类型、图像数据偏离文件头的长度等信息;其结构定义如下: typedef struct tagBITMAPFILEHEADER WORD bfType; / 位图文件的类型,必须为BM DWORD bfSize; / 位图文件的大小,以字节为单位 WORD bfReserved1; / 位图文件保留字,必须为0 WORD bfReserved2; / 位图文件保留字,必须为0 DWORD bfOffBits;

26、 / 位图数据的起始位置,以相对于位图文件头的偏移量表示,以字节为单位 BITMAPFILEHEADER;该结构占据14个字节。 2) 位图信息头:位图信息头包含图象的尺寸信息、图像用几个比特数值来表示一个像素、图像是否压缩、图像所用的颜色数等信息。其结构定义如下: typedef struct tagBITMAPINFOHEADER DWORD biSize; / 本结构所占用字节数 LONG biWidth; / 位图的宽度,以像素为单位 LONG biHeight; / 位图的高度,以像素为单位 WORD biPlanes; / 目标设备的平面数不清,必须为1 WORD biBitCou

27、nt/ 每个像素所需的位数,必须是1(双色), 4(16色),8(256色)或24(真彩色)之一 DWORD biCompression; / 位图压缩类型,必须是 0(不压缩),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一 DWORD biSizeImage; / 位图的大小,以字节为单位 LONG biXPelsPerMeter; / 位图水平分辨率,每米像素数 LONG biYPelsPerMeter; / 位图垂直分辨率,每米像素数 DWORD biClrUsed;/ 位图实际使用的颜色表中的颜色数 DWORD biClrImportant;/ 位图显示过程中重要的颜

28、色数 BITMAPINFOHEADER;该结构占据40个字节。需要注意的是:对于BMP文件格式,在处理单色图像和真彩色图像的时候,无论图象数据多么庞大,都不对图象数据进行任何压缩处理,一般情况下,如果位图采用压缩格式,那么16色图像采用RLE4压缩算法,256色图像采用RLE8压缩算法。 3) 颜色表: 颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下: typedef struct tagRGBQUAD BYTErgbBlue;/ 蓝色的亮度(值范围为0-255) BYTErgbGreen; / 绿色的亮度(值范

29、围为0-255) BYTErgbRed; / 红色的亮度(值范围为0-255) BYTErgbReserved;/ 保留,必须为0 RGBQUAD; 颜色表中RGBQUAD结构数据的个数由BITMAPINFOHEADER 中的biBitCount项来确定,当biBitCount=1,4,8时,分别有2,16,256个颜色表项,当biBitCount=24时,图像为真彩色,图像中每个像素的颜色用三个字节表示,分别对应R、G、B值,图像文件没有颜色表项。位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下: typedef struct tagBITMAPINFO BITMAPINFO

30、HEADER bmiHeader; / 位图信息头 RGBQUAD bmiColors1; / 颜色表 BITMAPINFO; 需要注意的是:RGBQUAD数据结构中,增加了一个保留字段rgbReserved,它不代表任何颜色,必须取固定的值为0,同时, RGBQUAD结构中定义的颜色值中,红色、绿色和蓝色的排列顺序与一般真彩色图像文件的颜色数据排列顺序恰好相反,即:若某个位图中的一个像素点的颜色的描述为00,00,ff,00,则表示该点为红色,而不是蓝色。 4) 位图数据 位图数据记录了位图的每一个像素值或该对应像素的颜色表的索引值,图像记录顺序在扫描行内是从左到右,扫描行之间是从下到上。这

31、种格式我们又称为Bottom_Up位图,当然与之相对的还有Up_Down形式的位图,它的记录顺序是从上到下的,对于这种形式的位图,也不存在压缩形式。位图的一个像素值所占的字节数:当biBitCount=1时,8个像素占1个字节;当biBitCount=4时,2个像素占1个字节;当 biBitCount=8时,1个像素占1个字节;当biBitCount=24时,1个像素占3个字节,此时图像为真彩色图像。当图像不是为真彩色时,图像文件中包含颜色表,位图的数据表示对应像素点在颜色表中相应的索引值,当为真彩色时,每一个像素用三个字节表示图像相应像素点彩色值,每个字节分别对应R、G、B分量的值,这时候图

32、像文件中没有颜色表。需要注意的是:图像的像素值在文件中的存放顺序为从左到右,从下到上,也就是说,在BMP文件中首先存放的是图像的最后一行像素,最后才存储图像的第一行像素,但对与同一行的像素,则是按照先左边后右边的的顺序存储的;另外一个需要关注的细节是:文件存储图像的每一行像素值时,如果存储该行像素值所占的字节数为4的倍数,则正常存储,否则,需要在后端补0,凑足4的倍数。 图像文件中一个扫描行所占的字节数计算方法: DataSizePerLine= (biWidth* biBitCount+31)/8;/ 一个扫描行所占的字节数 位图数据的大小按下式计算(不压缩情况下): DataSize= D

33、ataSizePerLine* biHeight。 了解了BMP内部的文件结构之后,就可以对BMP文件做任何需要的处理了。3.5 CDIB类的封装介绍在MFC中不提供对于DIB的支持,为了方便复用,这里设计了一个DIB类。这个类的主要作用有:构造DIB:包括从文件中和从DDB中构造DIB;处理DIB:包括得到像素组、图像尺寸及取得调色板等功能;显示DIB:包括将DIB在相应的DC上等尺寸输出或缩放输出。基于上述功能,设计并完成了这个类,下面是这个类的声明,它位于Dib.h中。/ Dib.h: interface for the CDib class.#if !defined(AFX_DIB_H

34、_D5E53EE7_EBE9_4223_AC5B_E216AF8B8560_INCLUDED_)#define AFX_DIB_H_D5E53EE7_EBE9_4223_AC5B_E216AF8B8560_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000#ifndef _CDIB_H#define _CDIB_H class CDib : public CObject DECLEARE_DYNAMIC(CDib);/DIB句柄public:void CDib:Save(const char *pszDibFileName,

35、 CPoint Origin, CPoint End); int CDib:Draw(HDC hdc, CPoint origin, CSize size);BYTE GetBitCount();/获取颜色位数void ClearMemory();/释放内存CDib();/构造函数CDib(const char *pszDibFileName);/重载构造函数virtual CDib();/析构函数DWORD GetDibWidthBytes(int nWidth,BYTE byBitCount);/获取每行的宽度,以字节为单位DWORD GetSize();/获取图像数据缓冲区的字节数LON

36、G GetWidth();/获取位图宽度LONG GetHeight();/获取位图高度UINT GetColorNumber();/获取颜色总数char* GetFileName();/获取文件名BOOL IsValid();/判断装载是否成功RGBQUAD* GetRGBQuad();/获取颜色表项RGBQUADBYTE* GetDibData();/获取图像数据BITMAPINFO* GetBmpInfo();/获取BITMAPINFO信息 BYTE m_nBitCount;/颜色位数LPBITMAPINFOHEADER m_lpBMIH;DWORD m_dwSizeImage;LPVO

37、ID m_lpvColorTable;int m_nColorTableEntries; /这张图像实际使用的色彩数LPBYTE m_lpImage;/指向DIB位的指针,这些位的值按字节类型数组存储protected:HPALETTE CreateBitmapPalatte();/创建位图调色盘void LoadFile(const char *pszDibFileName);/将位图文件的数据从硬盘载入内存中BOOL m_bValid;/表示装载位图的过程是否成功RGBQUAD *m_pRGBQuad;/为指向颜色表项的指针BYTE *m_pDibData;/指向位数据的指针LONG m_

38、nWidth;/图像宽度LONG m_nHeight;/图像高度UINT m_nTotalColors;/颜色总数char *m_pszFileName;/文件名(含路径)BITMAPFILEHEADER *m_pBitmapFileHeader;/指向位图头文件的指针BITMAPINFOHEADER *m_pBitmapInfoHeader;/指向信息头的指针BITMAPINFO *m_pBitmapInfo;/指向BITMAPINFO的指针HGLOBAL m_hDIB;/内存管理句柄private:void ComputePaletteSize(int nBitCount);void Co

39、mputeMetrics();void Init();/成员变量初始化;#endif#endif / !defined(AFX_DIB_H_D5E53EE7_EBE9_4223_AC5B_E216AF8B8560_INCLUDED_)在定义好这些函数之后,再写入相应的构造函数,就完成了这个类的封装。有了这个类,再处理DIB相关的问题就简单多了。第4章 基于多边形绘制的交互感兴趣区域的选择和分割4.1 C+图形绘制的技术要点图形与图像两个概念间的区别很容易被混淆,图像纯指计算机内以位图形式存在的灰度信息,而图形含有几何属性,或者说更强调场景的几何表示,是由场景的几何模型和景物的物理属性共同组成的

40、。研究计算机图形学主要的目的就是要利用计算机产生令人赏心悦目的真实感图形。事实上,图形学也把可以表示几何场景的曲线曲面造型技术和实体造型技术作为其主要的研究内容。同时,真实感图形计算的结果是以数字图像的方式提供的,也就是说计算机图形学和图像处理有着密切的关系。4.2多边形图形绘制技术在对医学图像进行交互式分割时,由于医学图像的特殊性,往往感兴趣区域是不规则的,所以多边形图形的绘制技术成为了一个关键点。多边形的实质就是一个由多条边组成的有一定规则的图形,比如三角形就是由三条边组成,我们要画多边形就需要知道多边形几个顶点的坐标值,然后逐个从一个顶点到下一个顶点话一条直线,直到形成一个封闭曲线。要想

41、对这个多边形进行处理,则需要将这些顶点的坐标值储存在一个动态数组中,以便程序随时调用。4.3使用C+打开BMP图像介绍使用C+处理BMP图像的第一步则是打开并显示BMP图像。根据C+的消息处理机制,可以将打开显示文件流程总结如图4.1:Display BMPMessage handlerRead BMP FileOpen BMP FileClassWizadCDCCFileCFileDialog图4.1 打开并显示BMP图像流程该流程可以解释为:首先需要利用Class Wizard建立打开文件的消息处理函数,本研究中采用的是与“打开”菜单项相关联;然后需要建立类CFileDialog的对象,以

42、获取该bmp的文件路径;接着建立类CFile对象,读取bmp文件内容,即获得文件头,信息头,调色板数据及图像数据组。当然本程序也添加了判断是否为bmp文件等查错程序。最后通过CDC类从图像数据数组中取图像数据显示。则完成了BMP数据的打开与显示。4.4使用C+显示BMP图像介绍将源设备环境区域中的像素传送到目标设备环境的过程叫做显示。在MFC中,具有显示功能的函数有很多。了解了函数的功能和参数,便能按照需求调用函数了。本研究使用的是StretchDIBits。此函数原型为:int StretchDIBits(HDC hdc, int XDest , int YDest , int nDestW

43、idth, int nDestHeight, int XSrc, int Ysrc, int nSrcWidth, int nSrcHeight, CONST VOID *lpBits, CONST BITMAPINFO * lpBitsInfo, UINT iUsage, DWORD dwRop);参数为:hdc:指向目标设备环境的句柄。 XDest:指定目标矩形左上角位置的X轴坐标,按逻辑单位来表示坐标。 YDest:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。 nDestWidth:指定目标矩形的宽度。 nDestHeight:指定目标矩形的高度。 XSrc:指定DIB中源矩形(左

44、上角)的X轴坐标,坐标以像素点表示。 YSrc:指定DIB中源矩形(左上角)的Y轴坐标,坐标以像素点表示。 nSrcWidth:按像素点指定DIB中源矩形的宽度。 nSrcHeight:按像素点指定DIB中源矩形的高度。 lpBits:指向DIB位的指针,这些位的值按字节类型数组存储,有关更多的信息,参考下面的备注一节。 lpBitsInfo:指向BITMAPINFO结构的指针,该结构包含有关DIB方面的信息。 iUsage:表示是否提供了BITMAPINFO结构中的成员bmiColors,如果提供了,那么该bmiColors是否包含了明确的RGB值或索引。参数iUsage必须取下列值,这些值

45、的含义如下: DIBPALCOLOR:表示该数组包含对源设备环境的逻辑调色板进行索引的16位索引值。 DIBRGBCOLORS:表示该颜色表包含原义的KGB值,若想了解更多的信息,请参考下面备注一节。 dwRop:指定源像素点、目标设备环境的当前刷子和目标像素点是如何组合形成新的图像。若想了解更多信息,请参考下面的备注一节。 返回值:如果函数执行成功,那么返回值是拷贝的扫描线数目,如果函数执行失败,那么返回值是GDIERROR。 本研究中所使用的代码为:StretchDIBits(pDC-m_hDC,pt.x, pt.y, m_nWidth, m_nHeight,0, 0, m_nWidth,

46、 m_nHeight,pDib-m_lpImage,(LPBITMAPINFO) pDib-m_lpBMIH, DIB_RGB_COLORS, SRCCOPY); 4.5感兴趣区域图像的分割本研究旨在将人工选择的不规则多边形感兴趣区域以BMP格式保存下来,由于时间关系,现在完成了先将不规则多边形的外接矩形找出来,然后将外接矩形保存为BMP位图。这样所保存的区域中也包含了所有感兴趣的区域,同样达到了分割的要求。对于不规则多边形数据的存储,笔者会做进一步的研究。寻找不规则多边形区域的外接矩形的基本思想是,利用排序的方法,找到多边形所有顶点中的横坐标最大、最小的点,纵坐标最大、最小的点,也就是得到了外接矩形的起始点和终止点,就可以绘制出外接矩形了。在本研究中使用的寻找最小点、最大点的核心代码如下:m_MinPoint=m_MaxPoint=m_PointList-GetAt(0);/ 多边形的顶点的坐标保存在m_PointList中 for( i=0;iGetSize();i+)/循环比较各个x、y的值,得到最大、最小的x、y的值 m_MinPoint.x=min(m_MinPoint.x,m_PointList-GetAt(i).x); m_MinPo

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号