基于 gpu 的医学图像算法研究与应用

上传人:E**** 文档编号:113813241 上传时间:2019-11-09 格式:PDF 页数:60 大小:861.12KB
返回 下载 相关 举报
基于 gpu 的医学图像算法研究与应用_第1页
第1页 / 共60页
基于 gpu 的医学图像算法研究与应用_第2页
第2页 / 共60页
基于 gpu 的医学图像算法研究与应用_第3页
第3页 / 共60页
基于 gpu 的医学图像算法研究与应用_第4页
第4页 / 共60页
基于 gpu 的医学图像算法研究与应用_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《基于 gpu 的医学图像算法研究与应用》由会员分享,可在线阅读,更多相关《基于 gpu 的医学图像算法研究与应用(60页珍藏版)》请在金锄头文库上搜索。

1、 题题(中、英文)(中、英文)目目基于基于 GPU 的医学图像算法研究与应用的医学图像算法研究与应用 Research 而对于显存,则调用 CUDA API 中的存储器管理函数才能操作它。这些存储器管理函数包括开辟、初始化和释放 显存空间,以及在设备端和主机端之间进行数据传输等等。在 CUDA 编程环境中 注意 Host、Device 函数之间的区别,Host 函数是由 CPU 来执行,Device 函数是由 GPU 来执行;Host 变量是在主机内存上分配的变量,GPU 不能访问,而 Device 变量是在设备内存上分配,CPU 不能直接访问。 如果确定了程序中的并行部分,就可以开始考虑如何

2、在 GPU 上实现这部分并 行计算。运行在 GPU 上的 CUDA 并行计算函数称为内核函数(kernel) 。而一个内 核函数不是一个完整地程序, 而是一个可以并行执行的步骤17。 一个完整的 CUDA 程序包括设备端的内核函数并行步骤和主机端的串行处理代码。这些代码会按照 相应语句的顺序依序执行12,满足顺序一致性。 在一个内核函数中存在两个层次的并行,即 Grid(网格)中的 block(块)间 并行和 block 中的 thread(线程)间并行。不同的 grid 可执行不同的程序,一个 Grid 中包括数个 Block,同一 grid 中的 block 执行相同的程序,每个 bloc

3、k 中又包 含数个 thread,GPU 执行时的最小单位就是 thread, 同一个 block 中的 thread 能同时 存取同一块共享内存,而不同 block 中的 thread 不能互相通信或者同步,因为他们 不能存取同一块共享内存13。 GPU 执行的最小单位是 thread,每一个 thread 都有自己的 register 和 local memory,同一个块内的各个 thread 共享一个 share memory,而所有的不同块内的 thread共享global memory、 Constant memory和texture memory。 而网格之间的global me

4、mory、Constant memory 和 texture memory 则是独立的。 (2)内核函数的定义与调用 CUDA 允许程序员们定义自己的称为内核(kernel)的 C 语言函数,内核函 数是在设备端执行的函数,且在主机端代码中被调用,在调用此类函数时,它将 由 N 个不同的 CUDA 线程并行执行 N 次, 这与普通的 C 语言函数只执行一次 基于 GPU 的医学图像算法研究与应用 12 的方式是不同的。 在定义内核时,需要使用 _global_ 函数类型限定符,并使用一种全新的 语法指定每次调用的内核函数的执行参数, 这些参数说明函数执行时的 线程数量和线程的组织方式。运行在设

5、备端的线程之间是并行地执行的,其中的 每个线程是按照指令的顺序串行执行一次内核函数。每一个线程都有自己的 blockID 和 thread ID 用于标志每个线程。 而 blockID 和 thread ID 是内建变量, 它是 只读的,况且只能在 GPU 端的内核函数中使用14,不能自己定义,是由设备专用 的寄存器提供的,只能在设备端的内核函数中使用3。 (3)存储器存储结构 每个线程都拥有自己的寄存器和局部存储器,每个线程块又拥有一块共享存 储器,该存储器对于块内的所有线程都是可见的,并且与块具有相同的生命周期。 另外,网格中所有的线程都可以访问同一块全局存储器、常数存储器和纹理存储 器。

6、而全局存储器、常数存储器和纹理存储器的值将在一个内核函数执行结束后 将被继续保持,可被同一程序的其他内核函数调用3。 (4)nvcc 编译器 Nvcc 是 CUDA 编译器驱动,它根据配置编译 CUDA 的代码,可生成 PTX、 标准 C 和 CUDA 二进制序列。 Nvcc 的基本工作流程是: 首先是从源文件中分离出 设备端代码和主机端代码,这是通过 CUDAfe 实现的,然后在分别调用不同的处 理器分别编译文件。Nvcc 讲设备端代码编译成二进制代码或者 ptx 代码。主机端 的代码将以 C 文件形式输出,由其他编译器编译,也可以在编译的最后阶段,将 主机端代码交给其他编译器生成.o 或者

7、.obj 文件16。 在编译的时候, 也可以将设备 端代码链接到所生成的主机端代码。此时,内核的执行配置也要被转换为 CUDA 运行启动代码,以加载和启动编译后的内核函数3。 2.4.2 CUDA 与 OpenGL 互操作 通过运行时 API 和驱动 API 可实现 CUDA 与 OpenGL 的互操作。OpenGLshi SGI 公司推出的开放式图形程序库(API),现已成为广泛接受的图形应用程序开发 标准。 通过 CUDA 与 OpenGL 的互操作可将 OpenGL 缓冲对象映射至 CUDA 的地 址空间,这可在 CUDA 中读取 OpenGL 写入缓冲的数据,也可以用 CUDA 写入数

8、 据供 OpenGL 使用2。在实现与 OpenGL 的互操作之前,必须要在调用 CUDA 函 数之前调用 cudaGLSetGLDevice()来对设备进行配置15,并在进行映射时需要将 OpenGL 的缓冲对象注册到 CUDA 中,通过函数 cudaGLRegisterBufferObject (bufferObj)来完成 OpenGL 缓冲对象的注册。在注册完成后,就能在内核函数中使 用函数 cudaGLMapBufferObject()返回返回设备的内存地址,来读写 OpenGL 缓冲 对象。另外,需通过函数 cudaGLUnmapBufferObject()来解除映射,并需要通过函

9、第二章 相关技术概述 13 数 cudaGLUnregisterBufferObject()注销 OpenGL 的缓冲对象。 2.5 本章小结 本章是相关技术概述,首先介绍了体绘制的基本原理、体绘制的光学模型以 及体绘制的常用方法,然后介绍了图象处理的相关技术,最后介绍了 GPU 的相关 技术、CUDA 的介绍以及 CUDA 与 OpenGL 的互操作。三维重建和图象处理是两 个重大的研究领域,而本课题是属于三维医学图像的重建和处理,它是计算可视 化的一个重要应用领域,结合了计算机可视化技术和图像处理技术,是一个多学 科的交叉应用课题。 基于 GPU 的医学图像算法研究与应用 14 第三章 基

10、于 GPU 的体绘制算法 15 第三章 基于 GPU 的体绘制算法 本章主要对课题进行进一步分析,首先是描述医学图像的特征,然后是实现 医学图像的重建中基于 GPU 实现时选择算法的依据以及对选择的算法的改进。 3.1 医学图像的特征 当前医学影像技术正迅猛发展,这些技术使结果更精确、高效、实用、便捷, 况且二维的平面图像已经不能完全满足临床诊断和科学研究的需要,由于三维的 医学图像更直观、包含的信息更多更丰富,三维的医学图像已经越来越多的替代 二维的医学图像的应用。三维的医学图像的重建主要是用来根据如 MRI、CT 等医 疗设备输出的二维图像数据来构造人体组织结构的三维的模型,最后在屏幕上显

11、 示这些图像。医疗设备也在随着各类相关技术的进步在飞速发展22,现在的医学 的图像数据集也变得越来越大,这给传统的图像的绘制方法也带来了比较大的挑 战,但是由于图像的绘制速度比较慢还有昂贵的设备价格,这使得三维的可视化 技术不太容易推广到大众的医院。医学图像的特征有如下几点: 1) 图像显示需要速度快,实时性要求很高 2) 图像要求真实逼真,人体组织内涵丰富,边界复杂,并且相互联系 3) 如 CT、MRI 以及超声数据等本身反映了扫描对象内部的结构,不能用简 单的表面来表示的,而只能用体绘制技术绘制这些数据。 4) 医学图像的数据一般都表现为标量灰度值,这样在图像处理中可以通过 同时操作多个标

12、量值元素,实现最大程度地发挥 GPU 并行计算的能力。 5) 对于三维的医学图像,数据量大,比如 256*256*256 的三维的图像所包 含的数据量是分辨率为 256*256 的二维图像的 256 倍。这也直接导致处 理图像的算法的复杂度相对较高。 综合上述医学图像的特点,实现快速且高质量的且价格低廉的医学图像绘制, 是非常必要的。体绘制方法能将 MRI 或者 CT 等医学图像数据更加形象的方式表现 出来,反应体数据的内部的各类信息的综合分布情况,对进行的科学研究和临床 诊断等均能更好的提供更有用的信息。而 GPU 的并行计算能力是 CPU 无法比拟的, 更是实现这类大数据量的首选。 基于

13、GPU 的医学图像算法研究与应用 16 3.2 基于 GPU 的医学图像重建算法选择 3.2.1 体绘制算法 三维重构算法分为面绘制和体绘制,因为体绘制效果更好,能够呈现体内的 信息,因而具有更好的临床意义,适合做医学成像,但其计算量很大。基于体会 制的算法,常用的有抛雪球法、光线投射算法、基于纹理的体绘制、剪切变形法、 频域体绘制以及体元投射法等,其中光线投射型直观并且便于任务并行分割,适 合 GPU 实现。这几种常用的体绘制算法的比较如下: (1)光线投射算法 这种算法是对每一个体数据分别分配不透明度值和颜色值23,合成最终的图 像。它可以很好的表现出图像的细节信息,故图像的绘制质量比较高

14、。它也有直 观且便于任务并行分割的特点。因为要查询每个体数据,一旦观察方向发生了变 化,采样点之间的空间关系也会发生变化,所以需重新采样,而它的计算量是很 大的。这种算法的缺点是不可以按照存储的物理顺序进行体数据的存取,因为射 线的方向可以是任意的,所以射线和体数据可以任意的相交。如果参数发生一点 变化,将会使图像进行重新的绘制,又会去重新计算采样点位置,并计算对颜色 和不透明度的影响。另外,它的另一个缺点是在 CPU 上实现时,要求内存比较大, 算法对数据的存取是任意的,这使得不能应用上有空间数据结构特性的体数据阵 列。这种算法直观,并且便于任务的分割,很容易用 GPU 实现,且效果比较好。

15、 (2)足迹表法 这个算法是对每个数据点逐个地进行计算其对最终图像像素的影响,合成最 终的图像。足迹表法的最大优势就是仅对与成像有关的体数据进行投射和光栅化, 这样便很好地减少了需处理和存储的体数据的容量,所以它的成像速度是比较快 的,这个算法有它的缺陷,它不能完全的隐藏背景物体的属性,背景物体的属性 可能会影响到最终图像的属性24,这样在最终的图像上会有发光震荡的现象。而 另一个缺点是当视线方向改变的时候,需要对在平面上的投影域上的每一个体数 据计算比例和旋转的变换,它的计算量是很可观的。 (3)错切变形法 错切变形法对体数据进行中间转换,该算法包含三个步骤,首先是把体数据 换算到剪切以后的

16、物体空间,且重新采样每层数据;第二步是按从前向后的顺序, 把体数据投影到中间图像(二维的) ;第三步是变形变换,把第二步中的二维图像 投射至图像空间,生成最终的图像。由于对错切体数据的重新采样的效率要远远 高于直接对体数据重新采样,这为实现快速的体绘制算法奠定了很好的基础。但 是该算法也有它的缺点,它的图像的重新采样与扫描线的重新采样仅限制在二维, 第三章 基于 GPU 的体绘制算法 17 所以比较容易有变形和走样的现象。另外这个算法对内存空间也是有一定的要求, 因为它保留了三个方向上体数据副本,这是为保证可从任意角度都能访问到体数 据,这样即便是采用压缩存储,对内存的需求量也是不小的。 (4)基于纹理的体绘制算法 计算机的硬件也在飞速的发展,于是出现了一种利用当前的图形卡的硬件特 性进行的体绘制,这个算法就是应用图形处理器的处理数据的能力和简单易用的 编程特性,来对采用的体绘制算法进行加速25。基于硬件的体绘制也即是基于纹 理的体绘制,这类方法也是在不断地发展,它已经能在对中、小数据场进行实时 的显示。 这类的绘制方法最早是由

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号