一种基于OpenCL的移动立方体方法

文档序号:6541910阅读:218来源:国知局
一种基于OpenCL的移动立方体方法
【专利摘要】一种基于OpenCL的移动立方体方法,属于三维重建【技术领域】,运行于装有OpenCL计算设备的计算机上;读取三维图像,初始化OpenCL环境;并行地扫描三维图像中所有体素的边,判断是否存在等值面顶点;并行地计算等值面顶点的坐标和法向量;并行地扫描所有体素,计算体素索引,并行地查询体素中存在的三角形数量;并行地查询体素中三角形顶点所在边,生成三维模型。基于OpenCL技术对算法进行并行加速;先遍历体素中的边生成顶点,再遍历体素生成三维模型,消除内存冗余。
【专利说明】—种基于OpenCL的移动立方体方法
【技术领域】
[0001]本发明属于三维重建【技术领域】,具体涉及一种基于OpenCL的移动立方体方法。
【背景技术】
[0002]在三维重建技术,可以分为多视角三维重建和三维图像重建两大类。多视角三维重建是指对一个场景不同视角的图像进行重建,而三维图像重建是指对三维图像进行处理,从图像中提取有效的信息并加以显示的过程。三维图像重建又分为两类方法,体绘制和面绘制。其中,面绘制是指从图像中提取感兴趣区域的三维表面模型,再用传统图形学的方法加以显示;而体绘制则是直接对图像进行投影,生成绘制结果图像。
[0003]移动立方体方法,是一种从三维图像中重建出等值面三维模型的方法,属于面绘制。该方法的原理是假设三维图像是在空间中均匀分布的数据场,遍历所有体素,在每个体素内独立生成等值面,所有等值面的集合即构成等值面三维模型。体素是指三维图像中,某一层中相邻的构成一个正方形的四个像素与相邻层中对应的四个像素总计八个像素所构成的正方体。
[0004]OpenCL (Open Computing Language)技术为异构平台提供了一个编写程序,尤其是并行程序的开放框架标准。异构平台所指由CPU、GPU及其他处理器组成的体系结构。OpenCL由编写内核程序的语言和控制平台的API组成。目前与OpenGL同样由KhronosGroup开发和维护。OpenCL的代码即可以在GPU上执行,也可以在CPU上执行,大大提高了代码的可移植性。OpenCL标准的制定由相应的标准委员会完成,因此能够实现跨厂商、跨平台的异构计算。GPU由于其高并发性,在并行计算中效率优于CPU,因此被认为是OpenCL计算设备的首选。
[0005]NVIDIA在其OpenCL示例代码中给出了一个移动立方体方法的OpenCL实现,该实现可以代表现有的基于OpenCL的移动立方体方法。该实现首先扫描体素,查询体素内存在的三角形数量;为顶点坐标和法向量分配内存;再次扫描体素,生成顶点和三角形。这种方式的缺点在于,体素的边是被相邻的体素所共享的,因此边上存在的等值面顶点会被重复生成,产生数据冗余。
[0006]本发明基于OpenCL技术对算法进行并行加速;先遍历体素中的边生成顶点,再遍历体素生成三维模型,消除内存冗余。

【发明内容】

[0007]本发明针对移动立方体方法重建时间长,现有并行实现存在冗余数据的缺陷,提出了一种基于OpenCL的移动立方体方法。
[0008]一种基于OpenCL的移动立方体方法,运行于装有OpenCL计算设备的计算机上,包括以下步骤:
步骤1:读取三维图像,初始化OpenCL环境;
步骤2:并行地扫描三维图像中所有体素的边,判断是否存在等值面顶点; 步骤3:并行地计算等值面顶点的坐标和法向量;
步骤4:并行地扫描所有体素,计算体素索引,查询体素中存在的三角形数量;
步骤5:并行地查询体素中三角形顶点所在边,生成三维模型。
[0009]所述步骤I读取三维图像,初始化OpenCL环境,具体步骤如下:
步骤1.1:将三维图像读取至内存中;
步骤1.2:查询OpenCL平台,创建OpenCL上下文环境,创建OpenCL消息队列,编译OpenCL程序,创建OpenCL核函数;
步骤1.3:创建OpenCL缓冲对象,与读入的三维图像绑定。
[0010]所述步骤2并行地扫描三维图像中所有体素的边,判断是否存在等值面顶点,具体步骤如下:
步骤2.1:设定等值面阈值V ;
步骤2.2:为顶点标识位分配内存,创建OpenCL缓冲对象与该数据绑定;
步骤2.3:执行边扫描核函数,并行地扫描所有体素的边,如果体素中一条边的两个端点灰度值均大于或均小于V,将这条边对应的顶点标识位设为0,否则设为I ;
步骤2.4:为顶点标识位前缀分配内存,采用前缀和算法计算顶点标识位前缀;
步骤2.5:为顶点标识位压缩数据分配内存,遍历顶点标识位,计算顶点标识位压缩数据。
[0011]所述步骤3并行地计算等值面顶点的坐标和法向量,具体步骤如下:
步骤3.1:为顶点坐标与法向量分配内存,创建OpenCL缓冲对象与两项数据绑定; 步骤3.2:执行计算顶点核函数,并行地计算顶点的坐标与法向量;
步骤3.3:将顶点坐标与法向量从OpenCL缓冲对象读回内存。
[0012]所述步骤4并行地扫描所有体素,计算体素索引,查询体素中存在的三角形数量,具体步骤如下:
步骤4.1:为体素索引、三角形数量和三角形标识位分配内存,创建OpenCL缓冲对象与两项数据绑定;
步骤4.2:执行计算体素索引核函数,并行地计算体素索引;
步骤4.3:为三角形数量前缀和三角形标志位前缀分配内存,创建OpenCL缓冲对象与两项数据绑定,采用步骤2.4中的前缀和算法计算三角形数量前缀和三角形标志位前缀;步骤4.4:为三角形标识位压缩数据分配内存,采用步骤2.5的方法对三角形标识位进行压缩,得到三角形标识位压缩数据。
[0013]所述步骤5并行地查询体素中三角形顶点所在边,生成三维模型,具体步骤如下: 步骤5.1:为三角形索引分配内存,创建OpenCL缓冲对象与其绑定;
步骤5.2:执行生成三维模型核函数,并行地计算三角形索引;
步骤5.3:将三角形索引从OpenCL缓冲对象读回内存。
[0014]所述的步骤3.2执行计算顶点核函数,并行地计算顶点的坐标与法向量,具体步骤如下:
步骤3.2.1:并行地扫描顶点标识位压缩数据,顶点标识位压缩数据中每个值对应一条存在顶点的边,计算顶点坐标;
步骤3.2.2:计算顶点法向量; 步骤3.2.3:对N进行单位化运算,将C与N写入对应的顶点坐标与法向量OpenCL缓冲对象中,写入位置为EOSi。
[0015]所述的步骤4.2执行计算体素索引核函数,并行地计算体素索引,具体步骤如下: 步骤4.2.1:并行地扫描所有体素,计算体素索引;
步骤4.2.2:根据体素索引查询三角形数量表,获取三角形数量;
步骤4.2.3:如果三角形数量为0,将三角形标识位设为0,否则设为I。
[0016]所述的步骤5.2执行生成三维模型核函数,并行地计算三角形索引,具体步骤如下:
步骤5.2.1:并行地扫描三角形标识位压缩数据,三角形标识位压缩数据中每一个值对应一个存在三角形的体素,根据对应的体素索引,查询三角形位置表,获取三角形顶点所在边;
步骤5.2.2:将顶点所在边对应的顶点标识位前缀写入对应的三角形索引OpenCL缓冲对象中,写入位置为当前体素对应的三角形数量前缀。
【专利附图】

【附图说明】
[0017]图1是本发明一种基于OpenCL的移动立方体方法的流程图;
图2是三维图像中体素间共享边的示意图。
【具体实施方式】
[0018]下面结合附图与实施例对本发明做进一步的详细说明。
[0019]基于OpenCL技术实现移动立方体方法,并选用AMD Raedon HD 6850 GPU作为OpenCL移动设备。在移动立方体方法中,体素间在生成三维模型时彼此独立,因此可以利用GPU的高并发性有效缩短运行时间。三维图像中的体素的边,实际是被相邻的多个体素共享,如图2所示。而在现有的基于OpenCL的移动立方体方法中,并行地扫描体素会重复生成共享边上存在的顶点,造成数据冗余。本发明首先扫描体素的边,生成等值面顶点,再扫描体素生成等值面,在保持算法高效的前提下消除冗余数据。
[0020]如图1所示,一种基于OpenCL的移动立方体方法,运行于装有OpenCL计算设备的计算机上,包括以下步骤:
步骤1:读取头部CT三维图像,初始化OpenCL环境。
[0021]步骤1.1:将三维图像读取至内存中;
步骤1.2:调用clGetPlatformIDs O查询OpenCL平台,调用ClCreateContextFromType ()创建 OpenCL 上下文环境,调用 clCreateCommandQueue O 创建OpenCL 消息队列,调用 clCreateProgramWithSource O 和 clBuiIdProgramO 编译 OpenCL程序,调用clCreateKernel O创建OpenCL核函数;
步骤1.3:调用clCreateImage3D()创建OpenCL缓冲对象,与读入的三维图像绑定。
[0022]步骤2:并行地扫描三维图像中所有体素的边,判断是否存在等值面顶点。
[0023]步骤2.1:设定等值面阈值V为1150,该值为CT图像中骨骼对应的灰度;
步骤2.2:为顶点标识位分配内存,内存空间大小为图像中边的数量,调用clCreateBuffer O创建OpenCL缓冲对象与该数据绑定;步骤2.3:调用ClEnqueueNDRangeKernel O执行边扫描核函数,并行地扫描所有体素的边,如果体素中一条边的两个端点灰度值均大于或均小于V,将这条边对应的顶点标识位设为O,否则设为I ;
步骤2.4:为顶点标识位前缀分配内存,内存空间大小为图像中边的数量,采用前缀和算法计算顶点标识位前缀,公式如下:
EOSi 二 EOSh + EOh
其中EOS为顶点标识位前缀,EO为顶点标识位,i表示三维图像中边的序号,EOStl取O ;步骤2.5:为顶点标识位压缩数据分配内存,内存空间大小为图像中边的数量,遍历顶点标识位,如果一个顶点标识位为1,那么对应的顶点标识位压缩数据计算公式如下:EOCeosj=J
其中EOC为顶点标识位压缩数据,j表示顶点标识位的第j个元素为I。
[0024]步骤3:并行地计算等值面顶点的坐标和法向量。
[0025]步骤3.1:为顶点坐标与法向量分配内存,内存空间大小为顶点标识位前缀最后一个数值,调用clCreateBuffer O创建OpenCL缓冲对象与两项数据绑定;
步骤3.2:调用ClEnqueueNDRangeKernelO执行计算顶点核函数,并行地计算顶点的坐标与法向量;
步骤3.2.1:并行地扫描顶点标识位压缩数据,顶点标识位压缩数据中每个值对应一条存在顶点的边,顶点坐标计算公式如下:
【权利要求】
1.一种基于OpenCL的移动立方体方法,运行于装有OpenCL计算设备的计算机上,其特征在于,包括以下步骤: 步骤1:读取三维图像,初始化OpenCL环境; 步骤2:并行地扫描三维图像中所有体素的边,判断是否存在等值面顶点; 步骤3:并行地计算等值面顶点的坐标和法向量; 步骤4:并行地扫描所有体素,计算体素索引,查询体素中存在的三角形数量; 步骤5:并行地查询体素中三角形顶点所在边,生成三维模型。
2.根据权利要求1所述的基于OpenCL的移动立方体方法,其特征在于,所述步骤I读取三维图像,初始化OpenCL环境,具体步骤如下: 步骤1.1:将三维图像读取至内存中; 步骤1.2:查询OpenCL平台,创建OpenCL上下文环境,创建OpenCL消息队列,编译OpenCL程序,创建OpenCL核函数; 步骤1.3:创建OpenCL缓冲对象,与读入的三维图像绑定。
3.根据权利要求1所述的基于OpenCL的移动立方体方法,其特征在于,所述步骤2并行地扫描三维图像中所有体素 的边,判断是否存在等值面顶点,具体步骤如下: 步骤2.1:设定等值面阈值V; 步骤2.2:为顶点标识位分配内存,创建OpenCL缓冲对象与该数据绑定; 步骤2.3:执行边扫描核函数,并行地扫描所有体素的边,如果体素中一条边的两个端点灰度值均大于或均小于V,将这条边对应的顶点标识位设为0,否则设为I ; 步骤2.4:为顶点标识位前缀分配内存,采用前缀和算法计算顶点标识位前缀,公式如下: EOSi 二 EOSh + EOh 其中EOS为顶点标识位前缀,EO为顶点标识位,i表示三维图像中边的序号,EOStl取O ;步骤2.5:为顶点标识位压缩数据分配内存,遍历顶点标识位,如果一个顶点标识位为I,那么对应的顶点标识位压缩数据计算公式如下:
EOCeosj=J 其中EOC为顶点标识位压缩数据,j表示顶点标识位的第j个元素为I。
4.根据权利要求1所述的基于OpenCL的移动立方体方法,其特征在于,所述步骤3并行地计算等值面顶点的坐标和法向量,具体步骤如下: 步骤3.1:为顶点坐标与法向量分配内存,创建OpenCL缓冲对象与两项数据绑定; 步骤3.2:执行计算顶点核函数,并行地计算顶点的坐标与法向量; 步骤3.3:将顶点坐标与法向量从OpenCL缓冲对象读回内存。
5.根据权利要求1所述的基于OpenCL的移动立方体方法,其特征在于,所述步骤4并行地扫描所有体素,计算体素索引,查询体素中存在的三角形数量,具体步骤如下: 步骤4.1:为体素索引、三角形数量和三角形标识位分配内存,创建OpenCL缓冲对象与两项数据绑定; 步骤4.2:执行计算体素索引核函数,并行地计算体素索引; 步骤4.3:为三角形数量前缀和三角形标志位前缀分配内存,创建OpenCL缓冲对象与两项数据绑定,采用步骤2.4中的前缀和算法计算三角形数量前缀和三角形标志位前缀;步骤4.4:为三角形标识位压缩数据分配内存,采用步骤2.5的方法对三角形标识位进行压缩,得到三角形标识位压缩数据。
6.根据权利要求1所述的基于OpenCL的移动立方体方法,其特征在于,所述步骤5并行地查询体素中三角形顶点所在边,生成三维模型,具体步骤如下: 步骤5.1:为三角形索引分配内存,创建OpenCL缓冲对象与其绑定; 步骤5.2:执行生成三维模型核函数,并行地计算三角形索引; 步骤5.3:将三角形索引从OpenCL缓冲对象读回内存。
7.根据权利要求4所述的步骤3.2,执行计算顶点核函数,并行地计算顶点的坐标与法向量,其特征在于,具体步骤如下: 步骤3.2.1:并行地扫描顶点标识位压缩数据,顶点标识位压缩数据中每个值对应一条存在顶点的边,顶点坐标计算公式如下:
8.根据权利要求5所述的步骤4.2,执行计算体素索引核函数,并行地计算体素索引,其特征在于,具体步骤如下: 步骤4.2.1:并行地扫描所有体素,计算体素索引,公式如下:
9.根据权利要求6所述的步骤5.2,执行生成三维模型核函数,并行地计算三角形索弓丨,其特征在于,具体步骤如下: 步骤5.2.1:并行地扫描三角形标识位压缩数据,三角形标识位压缩数据中每一个值对应一个存在三角形的体素,根据对应的体素索引,查询三角形位置表,获取三角形顶点所在边; 步骤5.2.2:将顶点所在边对应的顶点标识位前缀写入对应的三角形索引OpenCL缓冲对象中,写入位置为当前体素对应的三角形数量前缀。
【文档编号】G06T17/00GK103824328SQ201410116588
【公开日】2014年5月28日 申请日期:2014年3月27日 优先权日:2014年3月27日
【发明者】姜慧研, 于超, 项飞 申请人:东北大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1