当前位置: 首页 > 专利查询>东南大学专利>正文

基于CUDA并行计算框架的实时交互式裸眼3D显示方法技术

技术编号:19024507 阅读:39 留言:0更新日期:2018-09-26 19:20
本发明专利技术提供一种基于CUDA并行计算框架的实时交互式裸眼3D显示方法,通过读取CT序列图像,设置绘制阈值,利用MarchingCube算法生成表面三角面片数据;根据使用场景设置视点个数、虚拟摄像机位,生成单角度渲染场景;利用OpenInventor开源库,分别针对每个不同视点的场景,实施场景渲染;实现CUDA并行化像素融合算法;实现交互接口。该方法能够针对医用三维CT数据进行立体绘制。本发明专利技术基于CUDA并行计算框架,实现了实时交互式自由立体显示,能够根据用户的指令,对显示目标数据进行平移、旋转、缩放等操作,并能够完成实时渲染绘制。

【技术实现步骤摘要】
基于CUDA并行计算框架的实时交互式裸眼3D显示方法
本专利技术涉及一种基于CUDA并行计算框架的实时交互式裸眼3D显示方法。
技术介绍
医学图像三维可视化作为体数据场可视化的过程,是科学可视化领域研究的重点,同时也是其目前研究与应用最成功的领域。经过近些年的发展,已经从辅助诊断发展为辅助治疗的重要手段,并将深入到医学的各个领域。当前医生在对患者进行诊断的过程中,需要借助医学影像学来进行判断。与此同时,现阶段所获得的二维图像,本身并无法直观表示组织器官的情况,需要医生借助想象力的还原,具有极大的主观性,其中更是有些信息是医生无法准确获取的,这本身不仅给医生造成了负担,而且增大了错误判断的可能。而与此相对,三维可视化则直观、真实、全面地表现了区域的信息,有利于医生对病情的深入理解,以及在此基础上的分析与判断。目前三维可视化一般都是通过电子显示屏幕等二维平面显示,相比于传统的二维平面显示,立体显示能够提供给观看者更接近于真实世界的视觉感受,而自由立体显示摆脱了助视设备的束缚,成为了当前立体显示领域的研究热点。随着立体显示技术的不断发展,已经有多种技术可用于实现立体显示,它们可以不通过任何工具就能让左右眼睛从视屏幕上看到两幅具有视差的,有所区别的画面,将它们反射到大脑,人就会产生立体感。当前存在的解决方案中,主要采用了以下方案。即离线制作好的视频素材,也就是预先处理每帧图像,将选取像素并融合的多帧图像最终合成视频,最终在自由立体显示设备上播放。这样的方案存在操作繁琐,播放内容不能实时更改等局限。
技术实现思路
本专利技术的目的是提供一种基于CUDA并行计算框架的实时交互式裸眼3D显示方法,基于医学图像三维可视化技术和CUDA并行计算技术,针对倾斜柱状透镜自由立体显示系统开发,通过多视角融合实现医学图像自由立体显示;利用多纹理映射技术完成渲染,本专利技术能够对三维医学CT图像进行自由立体显示,同时根据用户操作进行实时刷新渲染,满足使用者对观察对象进行实时交互式观察的需求,解决现有技术中存在的操作繁琐,播放内容不能实时更改等问题。本专利技术的技术解决方案是:一种基于CUDA并行计算框架的实时交互式裸眼3D显示方法,包括以下步骤,S1、读取CT序列图像,设置绘制阈值,利用MarchingCube算法生成三角面片数据;具体为,选择读入数据的格式,并对读入的数据进行数据解析,完成数据文件的读入操作,设置窗宽与窗位值;设置MarchingCube算法生成等值面的阈值,利用MarchingCube算法生成三角面片数据;S2、根据使用场景设置视点个数、虚拟摄像机位;具体为,设置融合图像的视点个数参数N、视点间隔角度delta,调用OpenGLAPIgluLookAt函数和gluPerspective函数,在以原点为中心点,半径为R的弧上根据视点个数N且每相隔角度delta摆放N个虚拟摄像机,且使虚拟摄像机阵列以xoz面对称,其中每个虚拟摄像机的光轴为该位置到原点确定的方向向量,虚拟摄像机的法线方向为坐标轴z的正方向,设置渲染窗口分辨率、目标表面材质、光源类型和位置,针对每个虚拟摄像机,对步骤S1中得到的三角面片数据使用OpenGL固定管线渲染生成单角度渲染场景图,记为I1,I2,…IN;S3、利用OpenInventor开源库,分别针对每个不同视点的场景,实施纹理渲染;具体为,调用OpenGLAPI,使用glGenBuffers、glBindBuffer和glBufferData三个函数在显存中开辟数据空间PixBufferi即纹理数组,记屏幕横向像素个数为Xw,纵向像素个数为Yw,则其中每块区域所占大小为Xw×Yw×3比特,利用渲染到纹理接口,将单角度渲染场景图以纹理对象的形式保存到纹理显存中;记为场景纹理T1,T2,…TN。S4、实现CUDA并行化像素融合算法,具体为:根据步骤S3中所述屏幕像素个数设置CUDA线程块大小,线程块中的每一个线程,用于计算对应像素颜色通道所属场景纹理编号,根据编号从步骤S3所述场景纹理中提取对应颜色通道值,填充至屏幕缓冲区对象中,完成所有像素通道填充后将屏幕缓冲区对象输出至屏幕显示;S5、实现交互接口;具体为,自定义消息回调函数,针对交互时键盘鼠标发出的消息,进行相应的处理,以响应来自用户的交互请求。进一步地,步骤S1中利用MarchingCube算法生成三角面片数据具体为,S11、根据对称关系构建一个具有256种相交关系的索引表IndexTable,该索引表IndexTable指明等值面与体素的边的相交关系,具体来说,该索引表IndexTable中每一行有16列值,取值为-1时表示与体素的边无交点,其中最后一列例外,取值为-1时表示结束符号;若存在交点,则取值为交点所在边的索引值,这样将体素中等值面三角化的每个三角形的交点所在边索引值存入,最多会形成5个三角形,最后一位取-1表示结束标志,故索引表IndexTable的每行有16列;S12、提取相邻两层图片中相邻的8个像素,构成一个体素并把这8个像素编号,取值从0至7,作为它们所在的位;S13、根据每个像素与阈值的比较确定该像素是1还是0,具体来说,指定像素值大于阈值的像素点取值为1,像素值小于阈值的像素点取值为0;S14、把这8个像素构成的01串组成一个8位的索引值,具体来说就是将二进制位串转换为十进制的整数作为索引;S15、由步骤S14得到的索引值在步骤S11构建的索引表里查找对应关系,并求出与立方体每条边的交点;S16、由步骤S15得到的交点构成三角形面片;S17、遍历三维图像的所有体素,重复执行步骤S12到步骤S16,直至生成所有三角面片,记录三角面片顶点坐标和法向量,作为三角面片数据。进一步地,步骤S2中视点间隔角度delta是根据最佳观看距离dis为参数的公式计算得出,具体公式为:delta=sin(0.2/dis)。进一步地,步骤S4具体为,S41根据步骤S3所述屏幕横向像素个数Xw和纵向像素个数Yw,每个像素具有红绿蓝三个通道,配置CUDA环境的线程块宽度为Xw×3,高度为Yw,线程块内每个线程对应计算一个像素通道的所属,具体计算公式为:其中,i/3的商表示像素横坐标,其范围为0至Xw-1;j表示像素的纵坐标,其范围为0至Yw-1;i/3的余数为0、1、2时分别对应像素(i/3,j)的蓝、绿、红通道,X为液晶显示屏上单个柱状透镜宽度下所能覆盖的子像素个数,ɑ为倾斜透镜与竖直方向的夹角弧度,N为步骤S2所述视点个数,计算结果Nk为当前子像素所对应的场景纹理编号;S42、遍历整个屏幕区域,对于每个像素通道,根据步骤S41所述计算方式得到的场景纹理编号Nk,从第Nk个场景纹理,即步骤S3所述中对应像素位置取出对应通道值,填充至屏幕缓冲区对象中,完成所有像素通道填充后将屏幕缓冲区对象输出至屏幕显示。进一步地,步骤S5具体为,S51、首先声明并定义回调函数InventorMotionCallback,作为SoWinExaminerViewer组件的消息回调函数,调用setEventCallback函数完成回调函数在SoWinExaminerViewer类中的注册;S52、在InventorMotionCallback函数定义中完成其对于W本文档来自技高网...

【技术保护点】
1.一种基于CUDA并行计算框架的实时交互式裸眼3D显示方法,其特征在于:包括以下步骤,S1、读取CT序列图像,设置绘制阈值,利用MarchingCube算法生成三角面片数据;具体为,选择读入数据的格式,并对读入的数据进行数据解析,完成数据文件的读入操作,设置窗宽与窗位值;设置MarchingCube算法生成等值面的阈值,利用MarchingCube算法生成三角面片数据;S2、根据使用场景设置视点个数、虚拟摄像机位;具体为,设置融合图像的视点个数参数N、视点间隔角度delta,调用OpenGL API gluLookAt函数和gluPerspective函数,在以原点为中心点,半径为R的弧上根据视点个数N且每相隔角度delta摆放N个虚拟摄像机,且使虚拟摄像机阵列以xoz面对称,其中每个虚拟摄像机的光轴为该位置到原点确定的方向向量,虚拟摄像机的法线方向为坐标轴z的正方向,设置渲染窗口分辨率、目标表面材质、光源类型和位置,针对每个虚拟摄像机,对步骤S1中得到的三角面片数据使用OpenGL固定管线渲染生成单角度渲染场景图,记为I1,I2,…IN;S3、利用OpenInventor开源库,分别针对每个不同视点的场景,实施纹理渲染;具体为,调用OpenGL API,使用glGenBuffers、glBindBuffer和glBufferData三个函数在显存中开辟数据空间PixBufferi即纹理数组,记屏幕横向像素个数为Xω,纵向像素个数为Yω,则其中每块区域所占大小为Xω×Yω×3比特,利用渲染到纹理接口,将单角度渲染场景图以纹理对象的形式保存到纹理显存中;记为场景纹理T1,T2,…TN;S4、实现CUDA并行化像素融合算法,具体为:根据步骤S3中所述屏幕像素个数设置CUDA线程块大小,线程块中的每一个线程,用于计算对应像素颜色通道所属场景纹理编号,根据编号从步骤S3所述场景纹理中提取对应颜色通道值,填充至屏幕缓冲区对象中,完成所有像素通道填充后将屏幕缓冲区对象输出至屏幕显示;S5、实现交互接口;具体为,自定义消息回调函数,针对交互时键盘鼠标发出的消息,进行相应的处理,以响应来自用户的交互请求。...

【技术特征摘要】
1.一种基于CUDA并行计算框架的实时交互式裸眼3D显示方法,其特征在于:包括以下步骤,S1、读取CT序列图像,设置绘制阈值,利用MarchingCube算法生成三角面片数据;具体为,选择读入数据的格式,并对读入的数据进行数据解析,完成数据文件的读入操作,设置窗宽与窗位值;设置MarchingCube算法生成等值面的阈值,利用MarchingCube算法生成三角面片数据;S2、根据使用场景设置视点个数、虚拟摄像机位;具体为,设置融合图像的视点个数参数N、视点间隔角度delta,调用OpenGLAPIgluLookAt函数和gluPerspective函数,在以原点为中心点,半径为R的弧上根据视点个数N且每相隔角度delta摆放N个虚拟摄像机,且使虚拟摄像机阵列以xoz面对称,其中每个虚拟摄像机的光轴为该位置到原点确定的方向向量,虚拟摄像机的法线方向为坐标轴z的正方向,设置渲染窗口分辨率、目标表面材质、光源类型和位置,针对每个虚拟摄像机,对步骤S1中得到的三角面片数据使用OpenGL固定管线渲染生成单角度渲染场景图,记为I1,I2,…IN;S3、利用OpenInventor开源库,分别针对每个不同视点的场景,实施纹理渲染;具体为,调用OpenGLAPI,使用glGenBuffers、glBindBuffer和glBufferData三个函数在显存中开辟数据空间PixBufferi即纹理数组,记屏幕横向像素个数为Xω,纵向像素个数为Yω,则其中每块区域所占大小为Xω×Yω×3比特,利用渲染到纹理接口,将单角度渲染场景图以纹理对象的形式保存到纹理显存中;记为场景纹理T1,T2,…TN;S4、实现CUDA并行化像素融合算法,具体为:根据步骤S3中所述屏幕像素个数设置CUDA线程块大小,线程块中的每一个线程,用于计算对应像素颜色通道所属场景纹理编号,根据编号从步骤S3所述场景纹理中提取对应颜色通道值,填充至屏幕缓冲区对象中,完成所有像素通道填充后将屏幕缓冲区对象输出至屏幕显示;S5、实现交互接口;具体为,自定义消息回调函数,针对交互时键盘鼠标发出的消息,进行相应的处理,以响应来自用户的交互请求。2.如权利要求1所述的基于CUDA并行计算框架的实时交互式裸眼3D显示方法,其特征在于:步骤S1中利用MarchingCube算法生成三角面片数据具体为,S11、根据对称关系构建一个具有256种相交关系的索引表IndexTable,该索引表IndexTable指明等值面与体素的边的相交关系,具体来说,该索引表IndexTable中每一行有16列值,取值为-1时表示与体素的边无交点,其中最后一列例外,取值为-1时表示结束符号;若存在交点,则取值为交点所在边的索引值,这样将体素中等值面三角化的每个三角形的交点所在边索引值存入,最多会形成5个三角形,最后一位取-1表示结束标志,故索引表IndexTable的每行有16列;S12、提取相邻两层图片中相邻的8个像素,构成一个体素并把这8个像素编号,取值从0至7,作为它们所在的位;S13、根据每个像素与阈值的比较确定该像素是1还是0,具...

【专利技术属性】
技术研发人员:胡轶宁谢理哲郑涛张宇宁王征
申请(专利权)人:东南大学
类型:发明
国别省市:江苏,32

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

1