一种基于CUDA的医学图像的三维重建方法技术

技术编号:19060909 阅读:27 留言:0更新日期:2018-09-29 12:59
本发明专利技术提供一种基于CUDA的医学图像的三维重建方法,光线投射算法在CUDA上实现的关键是能够利用GPU完成对体数据的遍历、采样和计算,并将得到的采样值进行混合,以产生最终的重建结果。本发明专利技术的技术方案,在保证了较满意的重建效果的前提下,提高了算法的效率,使得实时绘制更加流畅。

【技术实现步骤摘要】
一种基于CUDA的医学图像的三维重建方法
本专利技术属于图像处理领域,尤其涉及一种基于CUDA的医学图像的三维重建方法。
技术介绍
三维医学数据的体绘制技术在可视化中具有十分重要的意义,由于医学图像数据大多数属于规则的结构化体数据(StructuredRegularVolumeData),分布在正方体或长方体组成的三维网格点上,因此本文研究的内容都是围绕规则结构化体数据展开的。对于规则数据场的体绘制本文采用体绘制算法中比较典型的光线投射算法(RayCasting)。由于光线投射算法只与投射光线的数量密切相关,因此特别适合于数据场规模大、数据集比较规则的三维数据场的体绘制。光线投射法的原理相对简单,过程易于实现,并且可以很容易地实现透视投影,绘制的图像质量也相对较高,因此适合作为医学图像三维重建的算法。虽然光线投射算法在规则数据场中有很多的优点,但是也存在着一些不尽完善的地方,如:因为运算量比较大导致绘制速度比较慢,难以满足实时性要求。由于光线投射算法的实现与光线数量有关,处理速度一直是一个难点,单纯在算法上进行的优化很难保证三维重建的实时性。近年来,随着图形技术的发展,很多研究人员都对医学数据的体绘制进行了探索。随着GPU的发展,出现了一些基于GPU的加速算法。Kruger和Westermann等人在传统的光线投射算法基础上基于GPU并行计算特点对算法进行重构,它使用顶点着色程序计算投射光线参数、通过利用深度测试与阻塞询问模拟循环实现光线积分。Christof和Kolb等人提出了不透明度剥离的体绘制算法。尽管上述基于GPU的光线投射算法加快了体绘制速度,大大超过了只在CPU上运行的算法,但是为了达到理想的绘制速度而放弃了编程的灵活性。2006年11月,NVIDIA公司推出了CUDA(通用并行计算)体系构架,该构架是一种新的并行编程模型和指令集的通用计算构架,它是基于高速图像处理单元GPU的,在GPU上高速并发执行,极大的提高了程序算法的运行速度,该体系构架为GPU编程提供了一种全新的软硬件构架。利用NVIDIAGPU的并行计算引擎,线程、线程块和网格可以进行比CPU更高效的复杂计算任务。CUDA集成了CPU和GPU各自的优势,内核部分在GPU上执行,其余部分则继续在CPU上完成。L.Marsalek最早在CUDA构架中对体绘制进行了加速尝试,并且证明了CUDA能有效提高体绘制的速度。以上的研究表明了对医学图像的三维重建用CUDA对光线投射算法进行优化加速,可以极大提高运算的效率和算法的执行速度。在CUDA编程环境中,主要包括CPU和GPU两个部分。CPU作为主机,即Host端,GPU作为设备,即Device端。Host端与Device端有专用的通道进行数据通信,Host端负责对逻辑性事务进行处理,以及对串行化运算的控制;Device端负责执行大规模的并行化处理任务。将运行在图像处理单元GPU上的CUDA并行计算函数称为核函数,即kernel函数。
技术实现思路
本专利技术提供一种基于CUDA的医学图像的三维重建方法,在保证了较满意的重建效果的前提下,提高了算法的效率,使得实时绘制更加流畅。为实现上述目的,本专利技术采用如下的技术方案:一种基于CUDA的医学图像的三维重建方法,包括以下步骤:步骤1、体数据映射成三维纹理将unsignedchar类型的体数据映射成可以被GPU读入的三维纹理,在体数据到三维纹理的映射过程中,可现实多种传递函数,进行灰度绘制时,直接使用体数据值作为三维纹理的灰度值;而进行光照绘制时,将每一个体数据点的梯度值作为三维纹理的RGB颜色值,使用中心差分公式计算梯度值,而将原始的体数据值作为透明度值;步骤2、确定光线的起始位置和方向在世界坐标系中计算从视点发出的光线,确定光线的起始位置和起始方向,将体数据视为放置在视空间中的一个立方体,记Boxmin={Xmin,Ymin,Zmin}为该立方体在视空间下所有定点的X,Y,Z坐标的最小值,Boxmax={Xmax,Ymax,Zmax}为最大值,把视点设为光线的起始点,在OpenGL中,视点固定在原点,在计算光线方向时,把光线在体数据立方体上的进入坐标值作为光线方向的值;步骤3、图像合成采用从前向后的图像合成算法,在内核函数中循环对一条光线上的体数据进行遍历、采样、赋色并用改进的Blinn-Phong光照模型进行光照计算,得出颜色值和不透明度;首先计算出光线在体数据立方体上的离开点;并遍历循环进入点到离开点的光线步进,计算每次步进后所在体数据点的颜色值;最后混合相同光线上所有采样点的值作为该像素点的颜色值输出。步骤4、绘制计算结果将最后得到的颜色值与不透明度写入像素缓冲对象(PBO)中,这样就从CUDA的内核传入到CPU端,然后用OpenGL绘制到屏幕即可。作为优选,步骤4具体为:在写入像素缓冲对象(PBO)过程中,先建立用来当做输出结果的PBO,然后CUDA部分注册PBO这个缓冲对象;在kernel程序中通过就可以取得体位置;使用完成后,先把缓冲对象删除,然后再取消缓冲对象的注册;最后在OpenGL中通过相关函数来显示到屏幕,显示部分的内容分为三方面:处理摄像机的位置矩阵、调用绘制函数进行绘制和绘制PBO。作为优选,步骤3具体为:1)计算离开点判断一条射线与包围盒体是否相交,并计算出相交点。射线方向为(XdYdZd),射线出发点为(XoYoZo),射线方程为包围盒体在空间中坐标的最小值为Boxmin={Xmin,Ymin,Zmin},最大值为Boxmax={Xmax,Ymax,Zmax};2)计算采样点的颜色值将同一条光线上的采样点的颜色进行混合,求得最终的颜色值为了实现最前面的效果,使用从前往后的混合,其混合算法使用本文优化后的算法,算法方程如公式(4)所示:光线终止条件:当光线穿越体数据的距离大于光线与体数据的最大交点的最小值时,或者不透明度接近阈值时,光线结束,得到最终的颜色值与不透明度;实现灰度效果绘制时,直接把体数据值作为灰度颜色和不透明度,可设定不同的阈值来获得不同的重建图像;实现光照效果效果时,首先计算出梯度,并以此作为体数据的法向量,然后在根据改进的Blinn-Phong光照模型计算出光照模型处理后的颜色值,改进的光照模型如公式(9)所示:附图说明图1为从前到后的图像合成算法原理示意图。图2为光线投射算法的核函数处理流程。图3为视点光线与包围盒相交示意图。图4为分辨率为128*128*53的头部渲染效果图。具体实施方式本专利技术公开一种基于CUDA的医学图像的三维重建方法,在保证了较满意的重建效果的前提下,提高了算法的效率,使得实时绘制更加流畅。1、基于光线投射算法的改进。虽然光线投射算法是有效的三维重建方法,但渲染速度慢。本专利技术针对体绘制的具体处理过程:重采样、图像分类及渲染、图像合成等进行研究,对传统的光线投射算法进行了以下改进。1)对图像合成算法进行优化。图像合成就是将所有计算出来的采样点的光线按照某种特定的规则累积到一起,最终求得像素点的颜色值与不透明度。这里采用从前到后的图像合成方法,从前向后合成算法的好处是,从i到n时趋近1,这时候的图像基本是不透明状态的,这样就不用计算后面的体素。目前的从前到后的合成公式如(1)本文档来自技高网
...

【技术保护点】
1.一种基于CUDA的医学图像的三维重建方法,其特征在于,包括以下步骤:步骤1、体数据映射成三维纹理将unsigned char类型的体数据映射成可以被GPU读入的三维纹理,在体数据到三维纹理的映射过程中,可现实多种传递函数,进行灰度绘制时,直接使用体数据值作为三维纹理的灰度值;而进行光照绘制时,将每一个体数据点的梯度值作为三维纹理的RGB颜色值,使用中心差分公式计算梯度值,而将原始的体数据值作为透明度值;步骤2、确定光线的起始位置和方向在世界坐标系中计算从视点发出的光线,确定光线的起始位置和起始方向,将体数据视为放置在视空间中的一个立方体,记Boxmin={Xmin,Ymin,Zmin}为该立方体在视空间下所有定点的X,Y,Z坐标的最小值,Boxmax={Xmax,Ymax,Zmax}为最大值,把视点设为光线的起始点,在OpenGL中,视点固定在原点,在计算光线方向时,把光线在体数据立方体上的进入坐标值作为光线方向的值;步骤3、图像合成采用从前向后的图像合成算法,在内核函数中循环对一条光线上的体数据进行遍历、采样、赋色并用改进的Blinn‑Phong光照模型进行光照计算,得出颜色值和不透明度;首先计算出光线在体数据立方体上的离开点;并遍历循环进入点到离开点的光线步进,计算每次步进后所在体数据点的颜色值;最后混合相同光线上所有采样点的值作为该像素点的颜色值输出。步骤4、绘制计算结果将最后得到的颜色值与不透明度写入像素缓冲对象(PBO)中,这样就从CUDA的内核传入到CPU端,然后用OpenGL绘制到屏幕即可。...

【技术特征摘要】
1.一种基于CUDA的医学图像的三维重建方法,其特征在于,包括以下步骤:步骤1、体数据映射成三维纹理将unsignedchar类型的体数据映射成可以被GPU读入的三维纹理,在体数据到三维纹理的映射过程中,可现实多种传递函数,进行灰度绘制时,直接使用体数据值作为三维纹理的灰度值;而进行光照绘制时,将每一个体数据点的梯度值作为三维纹理的RGB颜色值,使用中心差分公式计算梯度值,而将原始的体数据值作为透明度值;步骤2、确定光线的起始位置和方向在世界坐标系中计算从视点发出的光线,确定光线的起始位置和起始方向,将体数据视为放置在视空间中的一个立方体,记Boxmin={Xmin,Ymin,Zmin}为该立方体在视空间下所有定点的X,Y,Z坐标的最小值,Boxmax={Xmax,Ymax,Zmax}为最大值,把视点设为光线的起始点,在OpenGL中,视点固定在原点,在计算光线方向时,把光线在体数据立方体上的进入坐标值作为光线方向的值;步骤3、图像合成采用从前向后的图像合成算法,在内核函数中循环对一条光线上的体数据进行遍历、采样、赋色并用改进的Blinn-Phong光照模型进行光照计算,得出颜色值和不透明度;首先计算出光线在体数据立方体上的离开点;并遍历循环进入点到离开点的光线步进,计算每次步进后所在体数据点的颜色值;最后混合相同光线上所有采样点的值作为该像素点的颜色值输出。步骤4、绘制计算结果将最后得到的颜色值与不透明度写入像素缓冲对象(PBO)中,这样就从CUDA的内核传入到CPU端,然后用OpenGL绘制到屏幕即可。2.如权...

【专利技术属性】
技术研发人员:杜金莲张鹏苏航金雪云
申请(专利权)人:北京工业大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1