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

上传人:哈尼dd 文档编号:3923868 上传时间:2019-10-10 格式:DOC 页数:22 大小:162.52KB
返回 下载 相关 举报
基于多边形图形绘制的医学图像交互式分割方法的研究与实现 毕业论文.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 GRAPHICS ABSTRACT With the development of computer aided diagnosis technology , medical image processing technique has

3、 been concerned by more and more 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

4、artificial way of dividing not only 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 segmenta

5、tion results. Therefore the advantages 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 章 绪 论 .1 1.1 数字图像处理技术的发展现状 .1 1.2 数字图像处理技术在医学领域中的应用 .1 第 2 章 图像分割技术3

6、 2.1 图像分割的基本概念 .3 2.2 图像分割的常用方式及特点.3 2.3 交互式分割的优点及研究意义 .3 第 3 章 基于 VC+的数字图像处理技术 .5 3.1 C+面向对象程序设计的技术优点5 3.2 MFC 编程介绍 .6 3.3 MFC 编程在本研究中的应用 .6 3.4 BMP 图像格式介绍 .7 3.5 CDIB 类的封装介绍 9 第 4 章 基于多边形绘制的交互感兴趣区域的选择和分割.12 4.1 C+图形绘制的技术要点.12 4.2 多边形图形绘制技术 12 4.3 使用 C+打开 BMP 图像介绍.12 4.4 使用 C+显示 BMP 图像介绍.13 4.5 感兴趣

7、区域图像的分割 14 4.6 感兴趣区域图像的保存 14 第 5 章 实验结果及总结.15 5.1 实验方案15 5.2 实验结果15 第 6 章 总结及展望16 致 谢.17 参 考 文 献18 1 第 1 章 绪 论 1.1 数字图像处理技术的发展现状 数字图像处理又称为计算机图像处理,它是指将图像信号转换成数字信号 并利用 计算机对其进行处理的过程。数字图像处理的产生和迅速发展主要受三 个因素的影响:一是计算机的发展;二是数学的发展(特别是离散数学理论的 创立和完善);三是广泛的农牧业、林业、环境、军事、工业和医学等方面的应 用需求的增长。 数字图像处理最早出现于 20 世纪 50 年代

8、,当时的电子计算机已经发展到 一定水平,人们开始利用计算机来处理图形和图像信息。数字图像处理作为一 门学科大约形成于 20 世纪 60 年代初期。早期的图像处理的目的是改善图像的 质量,它以人为对象,以改善人的视觉效果为目的。 图像处理中,输入的是质量低的图像,输出的是改善质量后的图像,常用 的图像处理方法有图像增强、复原、编码、压缩等。首次获得实际成功应用的 是美国喷气推进实验室(JPL) 。他们对航天探测器徘徊者 7 号在 1964 年发回的 几千张月球照片使用了图像处理技术,如几何校正、灰度变换、去除噪声等方 法进行处理,并考虑了太阳位置和月球环境的影响,由计算机成功地绘制出月 球表面地

9、图,获得了巨大的成功。随后又对探测飞船发回的近十万张照片进行 更为复杂的图像处理,以致获得了月球的地形图、彩色图及全景镶嵌图,获得 了非凡的成果,为人类登月创举奠定了坚实的基础,也推动了数字图像处理这 门学科的诞生。在以后的数字图像处理技术宇航空间技术,如对火星、土星等 星球的探测研究中,数字图像处理技术都发挥了巨大的作用。数字图像处理取 得的另一个巨大成就是在医学上获得的成果。与此同时,图像处理技术在许多 应用领域受到广泛重视并取得了重大的开拓性成就,属于这些领域的有航空航 天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术 等,使图像处理成为一门引人注目、前景远大的新型学

10、科。 随着图像处理技术的深入发展,从 70 年代中期开始,随着计算机技术和人 工智能、思维科学研究的迅速发展,数字图像处理向更高、更深层次发展。人 们已开始研究如何用计算机系统解释图像,实现类似人类视觉系统理解外部世 界,这被称为图像理解或计算机视觉。图像理解虽然在理论方法研究上已取得 不小的进展,但它本身是一个比较难的研究领域,存在不少困难,因人类本身 对自己的视觉过程还了解甚少,因此计算机视觉是一个有待人们进一步探索的 新领域。 1.2 数字图像处理技术在医学领域中的应用 随着计算机技术的不断推广和应用,计算机在医学领域的应用也越来越普遍, 基于多边形图形绘制的医学图像交互式分割方法的研究

11、与实现 2 数字图像处理也随着计算机技术的发展越来越广泛的应用于各个领域,在医学领 域也不例外,尤其是医学影像方面体现的更为突出。 从根本上说医学影像离不开计算机现代医学影像成像,依据电离辐射和非 电离辐射的自身性质和它们与物质相互作用的规律,用现代技术手段来采集成像 数据,按一定的数学方法用计算机重建数字图像。这也就是说,要深入挖掘图像所 蕴藏的生物信息和很好地控制图像质量,仅有雄厚的医学知识是不够的,还需要计 算机、数学等理工基础知识作保障。计算机处理的是数字图像我们从显示器上 可以识别出一条线、一幅照片、一部动画片。但对于计算机而言,却以相同的方 式看待它们-把它们当成数据,一堆可操作的

12、二进制数。不同的数据代表不同的 信息,给我们以不同的视觉形象,即不同的数字图像。 医学影像质量的好坏、分辨率的高低以及对影像图片的读释能力,将影响着 诊断的准确性。这就要求人们能对数字图像有更深一层的了解,对数字图像能有 选择、有目的的进行各种调整,以便得到更精确的诊断依据。在数字图像处理中 通过各种运算变换,可以突出强化出图像特征中需要的部分,提高医生的诊断效率 以及诊断准确率。 与一般意义上的图像处理比较,医学图像处理有其特殊性和不同的侧重点。 自从显微镜问世以来,对医学图像的处理及分析就已成为医学研究中的重要方 法,特别是 X- CT、MRI、PET、SPECT 等新型成像技术和设备的问

13、世,使得 医学图像处理技术对医学研究及临床诊断的影响与日俱增,其结果使临床医生 对人体内部病变部位的观察更直接、更清晰,确诊率也更高。计算机和医学图 像处理技术作为这些成像技术的发展基础,带动着现代医学诊断正产生着深刻 的变革。数字医学图像的计算机辅助诊断目前主要应用在乳腺癌的早期诊断、 肺部疾病的诊断、心脏疾病和肝癌的诊断。各种新的医学成像方法在临床的应 用,使医学诊断技术取得了巨大的进展。医学图像处理的基本步骤如图 1.1: 图 1.1 医学图像处理的基本步骤 原始 图像 打开 图像 图像 分割 图像 处理 保存 图像 3 第 2 章 图像分割技术 2.1 图像分割的基本概念 图像分割是指

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

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

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

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

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

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

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

21、对象的辨别、划分可以将软件系统分割为若干相对为独立的部分, 在一定程度上更便于控制软件复杂度; 5)以对象为中心的设计可以帮助开发人员从静态(属性)和动态(方法) 两个方面把握问题,从而更好地实现系统; 6)通过对象的聚合、联合可以在保证封装与抽象的原则下实现对象在内在 结构以及外在功能上的扩充,从而实现对象由低到高的升级。 基于多边形图形绘制的医学图像交互式分割方法的研究与实现 6 3.2 MFC 编程介绍 MFC(Microsoft Foundation Classes)库是 Microsoft 为利用 VC+开发 windows 应用程序而提供的应用程序框架。在这个框架的支持下,对于不同

22、的 应用程序,编程的主要任务是填写各自特殊部分的代码。MFC 类库由 130 多个 类组成,封装了 2000 多个 API 函数。 MFC 不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行 界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即 类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些 在 Windows 中实现内部处理的类,如数据库的管理类等. MFC 是微软封装了的 API。也就是说 windows 作为一个提供功能强大的应 用程序接口编程的操作系统,的确方便了许多程序员,传统的 win32 开发(直 接使用 windows

23、 的接口函数 API)对于程序员来说难度很大,因为,API 函数 实在太多了,而且名称很乱。MFC 是面向对象程序设计与 Application framework 的完美结合,它将传统的 API 进行了分类封装,并且创建了程序的 一般框架,大大简化了程序员的工作。 使用 MFC 编程具有很多优点:用类编程,将代码和数据封装在类中,大 大减少了编程的复杂性;通过继承实现了基本的代码重用,在开发应用程序的 过程中,我们可以通过继承来使用 MFC 中已经定义的大量类,在保有他们原 有的特性的同时,可以根据我们的需要来修改他们,使其具有新的特性;在使 用 MFC 进行编程的过程中,可以利用其提供的各

24、种工具,提高编程的效率; 借助 MFC 类库中设计良好的类资源可以减少代码规模。使用 MFC 类库,编程 者只需要注意应用程序与通用的 Windows 程序所不同的特性,而几乎所有的应 用程序与 Windows 之间的接口都是由应用程序框架来实现的,这大大降低了编 程的难度。 Windows 区别于 DOS 的一个重要特性就是它的图形界面,所以,在 Windows 的程序中绘图就成为了 Windows 编程的一个非常重要的内容。为了满 足编程者在程序中绘图的需要,MFC 提供了许多与绘图相关的函数和类,用户 可以使用它们绘制出各种理想的图形。 3.3 MFC 编程在本研究中的应用 本研究使用的

25、语言工具是 Microsoft Studio VC+ 6.0,基本思想是利用 MFC 设计一个程序,使其能够打开并显示 BMP 图像,将图像数据保存到动态 数组中,然后人工在图像中选取一些点作为感兴趣区域基准点,以这些点为顶 点绘制不规则多边形,最后将感兴趣区域存储。此功能跟一般的画图工具很相 似,不同的是由于 MFC 的特殊性,它可以动态地保存图像的数据并且可以随 时调用。也就是说操作者可以对数组中的数据做任何需要的处理,如中值滤波, 7 灰度化等等,但是在本研究中的重点是在图像中绘制图形。 同时利用 MFC 框架编程可以对自己程序的界面进行设计,包括菜单项的 关联,工具条的制定,按钮的设计

26、等等。另外,在本研究中,笔者将很多基本 函数和变量封装在了一个基类中,很多类都是由这个基类派生而来的,这样不 仅让程序变得逻辑清楚,而且易于修改。也就是说,如果操作者需要再添加某 些功能,或者说修改某一部分的代码,这都不会影响到程序本身。笔者后续的 研究也将会在此基础上进行。 3.4 BMP 图像格式介绍 在对图像进行数字处理之前,通常要先弄清楚图像的内部结构,从而可以 调用图像中的数据进行相应的处理。这里主要介绍 BMP 图像,BMP 是一种与 硬件设备无关的图像文件格式,BMP 文件由文件头、位图信息头、颜色信息和 图形数据四部分组成。 1)BMPBMP 文件头文件头: 主要包含 BMP

27、文件的大小、文件类型、图像数据偏离文件头的长度等信 息;其结构定义如下: typedef struct tagBITMAPFILEHEADER WORD bfType; / 位图文件的类型,必须为 BM DWORD bfSize; / 位图文件的大小,以字节为单位 WORD bfReserved1; / 位图文件保留字,必须为 0 WORD bfReserved2; / 位图文件保留字,必须为 0 DWORD bfOffBits; / 位图数据的起始位置,以相对于位图文件头的偏移量表示, 以字节为单位 BITMAPFILEHEADER;该结构占据 14 个字节。 2)位图信息头位图信息头: 位

28、图信息头包含图象的尺寸信息、图像用几个比特数值来表示一个像素、 图像是否压缩、图像所用的颜色数等信息。 其结构定义如下: typedef struct tagBITMAPINFOHEADER DWORD biSize; / 本结构所占用字节数 LONG biWidth; / 位图的宽度,以像素为单位 LONG biHeight; / 位图的高度,以像素为单位 WORD biPlanes; / 目标设备的平面数不清,必须为 1 WORD biBitCount/ 每个像素所需的位数,必须是 1(双色), 4(16 色),8(256 色) 或 24(真彩色)之一 基于多边形图形绘制的医学图像交互式分

29、割方法的研究与实现 8 DWORD biCompression; / 位图压缩类型,必须是 0(不压缩),1(BI_RLE8 压缩类 型)或 2(BI_RLE4 压缩类型)之一 DWORD biSizeImage; / 位图的大小,以字节为单位 LONG biXPelsPerMeter; / 位图水平分辨率,每米像素数 LONG biYPelsPerMeter; / 位图垂直分辨率,每米像素数 DWORD biClrUsed;/ 位图实际使用的颜色表中的颜色数 DWORD biClrImportant;/ 位图显示过程中重要的颜色数 BITMAPINFOHEADER;该结构占据 40 个字节。

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

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

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

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

34、色时,每一个像素用三个字节表示图像相应像素点彩色 值,每个字节分别对应 R、G、B 分量的值,这时候图像文件中没有颜色表。需 要注意的是:图像的像素值在文件中的存放顺序为从左到右,从下到上,也就 是说,在 BMP 文件中首先存放的是图像的最后一行像素,最后才存储图像的 第一行像素,但对与同一行的像素,则是按照先左边后右边的的顺序存储的; 另外一个需要关注的细节是:文件存储图像的每一行像素值时,如果存储该行 像素值所占的字节数为 4 的倍数,则正常存储,否则,需要在后端补 0,凑足 4 的倍数。 图像文件中一个扫描行所占的字节数计算方法: DataSizePerLine= (biWidth* b

35、iBitCount+31)/8;/ 一个扫描行所占的字节数 位图数据的大小按下式计算(不压缩情况下): DataSize= DataSizePerLine* biHeight。 了解了 BMP 内部的文件结构之后,就可以对 BMP 文件做任何需要的处理了。 3.5 CDIB 类的封装介绍 在 MFC 中不提供对于 DIB 的支持,为了方便复用,这里设计了一个 DIB 类。这个类的主要作用有:构造 DIB:包括从文件中和从 DDB 中构造 DIB;处 理 DIB:包括得到像素组、图像尺寸及取得调色板等功能;显示 DIB:包括将 DIB 在相应的 DC 上等尺寸输出或缩放输出。基于上述功能,设计并

36、完成了这 个类,下面是这个类的声明,它位于 Dib.h 中。 / Dib.h: interface for the CDib class. #if !defined(AFX_DIB_H_D5E53EE7_EBE9_4223_AC5B_E216AF8B8560_INCLU DED_) 基于多边形图形绘制的医学图像交互式分割方法的研究与实现 10 #define AFX_DIB_H_D5E53EE7_EBE9_4223_AC5B_E216AF8B8560_INCLUDED_ #if _MSC_VER 1000 #pragma once #endif / _MSC_VER 1000 #ifndef

37、_CDIB_H #define _CDIB_H class CDib : public CObject DECLEARE_DYNAMIC(CDib);/DIB 句柄 public: void CDib:Save(const char *pszDibFileName, CPoint Origin, CPoint End); int CDib:Draw(HDC hdc, CPoint origin, CSize size); BYTE GetBitCount();/获取颜色位数 void ClearMemory();/释放内存 CDib();/构造函数 CDib(const char *pszDi

38、bFileName);/重载构造函数 virtual CDib();/析构函数 DWORD GetDibWidthBytes(int nWidth,BYTE byBitCount);/获取每行的宽度, 以字节为单位 DWORD GetSize();/获取图像数据缓冲区的字节数 LONG GetWidth();/获取位图宽度 LONG GetHeight();/获取位图高度 UINT GetColorNumber();/获取颜色总数 char* GetFileName();/获取文件名 BOOL IsValid();/判断装载是否成功 RGBQUAD* GetRGBQuad();/获取颜色表项

39、RGBQUAD BYTE* GetDibData();/获取图像数据 BITMAPINFO* GetBmpInfo();/获取 BITMAPINFO 信息 BYTE m_nBitCount;/颜色位数 LPBITMAPINFOHEADER m_lpBMIH; DWORD m_dwSizeImage; LPVOID m_lpvColorTable; 11 int m_nColorTableEntries; /这张图像实际使用的色彩数 LPBYTE m_lpImage;/指向 DIB 位的指针,这些位的值按字节类型数组存储 protected: HPALETTE CreateBitmapPalat

40、te();/创建位图调色盘 void LoadFile(const char *pszDibFileName);/将位图文件的数据从硬盘载入内 存中 BOOL m_bValid;/表示装载位图的过程是否成功 RGBQUAD *m_pRGBQuad;/为指向颜色表项的指针 BYTE *m_pDibData;/指向位数据的指针 LONG m_nWidth;/图像宽度 LONG m_nHeight;/图像高度 UINT m_nTotalColors;/颜色总数 char *m_pszFileName;/文件名(含路径) BITMAPFILEHEADER *m_pBitmapFileHeader;/指

41、向位图头文件的指针 BITMAPINFOHEADER *m_pBitmapInfoHeader;/指向信息头的指针 BITMAPINFO *m_pBitmapInfo;/指向 BITMAPINFO 的指针 HGLOBAL m_hDIB;/内存管理句柄 private: void ComputePaletteSize(int nBitCount); void ComputeMetrics(); void Init();/成员变量初始化 ; #endif #endif / !defined(AFX_DIB_H_D5E53EE7_EBE9_4223_AC5B_E216AF8B8560_INCLU D

42、ED_) 在定义好这些函数之后,再写入相应的构造函数,就完成了这个类的封装。 有了这个类,再处理 DIB 相关的问题就简单多了。 基于多边形图形绘制的医学图像交互式分割方法的研究与实现 12 第 4 章 基于多边形绘制的交互感兴趣区域的选择和分割 4.1 C+图形绘制的技术要点 图形与图像两个概念间的区别很容易被混淆,图像纯指计算机内以位图形 式存在的灰度信息,而图形含有几何属性,或者说更强调场景的几何表示,是 由场景的几何模型和景物的物理属性共同组成的。研究计算机图形学主要的目 的就是要利用计算机产生令人赏心悦目的真实感图形。事实上,图形学也把可 以表示几何场景的曲线曲面造型技术和实体造型技

43、术作为其主要的研究内容。 同时,真实感图形计算的结果是以数字图像的方式提供的,也就是说计算机图 形学和图像处理有着密切的关系。 4.2 多边形图形绘制技术 在对医学图像进行交互式分割时,由于医学图像的特殊性,往往感兴趣区 域是不规则的,所以多边形图形的绘制技术成为了一个关键点。多边形的实质 就是一个由多条边组成的有一定规则的图形,比如三角形就是由三条边组成, 我们要画多边形就需要知道多边形几个顶点的坐标值,然后逐个从一个顶点到 下一个顶点话一条直线,直到形成一个封闭曲线。要想对这个多边形进行处理, 则需要将这些顶点的坐标值储存在一个动态数组中,以便程序随时调用。 4.3 使用 C+打开 BMP

44、 图像介绍 使用 C+处理 BMP 图像的第一步则是打开并显示 BMP 图像。根据 C+的 消息处理机制,可以将打开显示文件流程总结如图 4.1: 图 4.1 打开并显示 BMP 图像流程 该流程可以解释为:首先需要利用 Class Wizard 建立打开文件的消息处理 函数,本研究中采用的是与“打开”菜单项相关联;然后需要建立类 CFileDialog 的对象,以获取该 bmp 的文件路径;接着建立类 CFile 对象,读取 bmp 文件内容,即获得文件头,信息头,调色板数据及图像数据组。当然本程 序也添加了判断是否为 bmp 文件等查错程序。最后通过 CDC 类从图像数据数 组中取图像数据

45、显示。则完成了 BMP 数据的打开与显示。 Message handler Open BMP File Read BMP File Display BMP ClassWiz ad CFileDia log CFileCDC 13 4.4 使用 C+显示 BMP 图像介绍 将源设备环境区域中的像素传送到目标设备环境的过程叫做显示。在 MFC 中,具有显示功能的函数有很多。了解了函数的功能和参数,便能按照需求调 用函数了。本研究使用的是 StretchDIBits。此函数原型为: int StretchDIBits(HDC hdc, int XDest , int YDest , int nDes

46、tWidth, 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:指定

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

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

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

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1