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

文档序号:15519348发布日期:2018-09-25 19:03阅读:342来源:国知局
本发明涉及一种基于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函数定义中完成其对于windows窗口消息的处理工作,并针对用户交互时产生的消息刷新场景,以完成对交互的响应。进一步地,步骤s52具体为,s521、当用户按住鼠标左键拖拽时产生鼠标滑动消息,将二维屏幕坐标的变化映射到三维坐标系中,实现了虚拟trackball,完成了场景中物体的旋转、移动;s522、当用户转动鼠标中间的滚轮时,会产生鼠标滚轮移动消息,将鼠标滚轮正向与逆向转动角度映射到三维坐标系中,产生场景中物体沿着z轴方向的平移,完成了场景中物体的缩放;s523、当用户按下键盘相应按键时,产生对应的按键消息,针对所产生的不同的按键消息,完成参数的实时调节与场景的重绘。本发明的有益效果是:该种基于cuda并行计算框架的实时交互式裸眼3d显示方法,针对倾斜式柱状透镜自由立体显示系统开发,能够针对医用三维ct数据进行立体绘制。本发明基于cuda并行计算框架,实现了实时交互式自由立体显示,能够根据用户的指令,对显示目标数据进行平移、旋转、缩放等操作,并能够完成实时渲染绘制。本发明利用渲染到纹理技术,将多视点场景目标输入到纹理显存;利用cuda并行计算技术,对多视点渲染结果融合进行快速计算,以达到实时渲染的目的。附图说明图1是本发明实施例基于cuda并行计算框架的实时交互式裸眼3d显示方法的流程示意图。图2是本发明实施例中mc算法等值面交点在边上分布情况示意图。图3是实施例中柱状透镜光栅自由立体显示器分光原理示意图。图4是实施例中多视点显示器子像素映射关系示意图。具体实施方式下面结合附图详细说明本发明的优选实施例。实施例实施例的一种基于cuda并行计算框架的实时交互式裸眼3d显示方法,通过读取ct序列图像,设置绘制阈值,利用marchingcube算法生成表面三角面片数据,根据使用场景设置视点个数、虚拟摄像机位;设置渲染窗口分辨率、目标表面材质、光源类型和位置,利用openinventor开源库,分别针对每个不同视点的场景,实施场景渲染;利用绘制到纹理显存接口,将场景渲染输出至纹理显存;利用cuda框架,根据实现视点融合的并行计算算法;实现交互接口。该方法能够针对医用三维ct数据进行立体绘制。本发明基于cuda并行计算框架,实现了实时交互式自由立体显示,能够根据用户的指令,对显示目标数据进行平移、旋转、缩放等操作,并能够完成实时渲染绘制。一种基于cuda并行计算框架的实时交互式裸眼3d显示方法,如图1,具体包括以下步骤:s1、选择读入数据的格式,调用系统模块中相应的解析部分进行数据解析,完成数据文件的读入操作。设置窗宽与窗位值;设置marchingcube算法生成等值面的阈值,利用marchingcube算法生成三角面片数据,完成模型的渲染,利用marchingcube算法生成三角面片数据的具体步骤如下:s11、根据对称关系构建一个256种相交关系的索引表indextable。该表指明等值面与体素的哪条边相交,具体来说,该表中每一行有16列值,取值为-1时表示与体素的边无交点(最后一列例外,表示结束符号),若存在交点,则取值为交点所在边的索引值,这样将体素中等值面三角化的每个三角形的交点所在边索引值存入,最多会形成5个三角形,最后一位取-1表示结束标志,故表的每行有16列。s12、提取相邻两层图片中相邻的8个像素,构成一个体素并把这8个像素编号,取值从0至7,作为它们所在的位。s13、根据每个像素与阈值的比较确定该像素是1还是0,具体来说,我们指定像素值大于阈值的像素点取值为1,像素值小于阈值的像素点取值为0。s14、把这8个像素构成的01串组成一个8位的索引值,具体来说就是将二进制位串转换为十进制的整数作为索引。s15、用索引值在上边的索引表里查找对应关系,并求出与立方体每条边的交点。s16、用交点构成三角形面片或者多边形面片,如图2所示。s17、遍历三维图像的所有体素,重复执行步骤s12到步骤s16。s2、设置融合图像的视点个数参数n,视点间隔角度delta,其中delta是根据最佳观看距离dis为参数的公式计算得出。如图3所示,观看到三维效果的本质是观察者左右眼接收到来自不同视点的具有视角差的图像,具体公式为:delta=sin(0.2/dis),其中dis的单位为米,0.2表示平均左右眼距离。调用openglapiglulookat和gluperspective在以原点为中心点,半径为r的弧上根据视点个数n每相隔delta角度摆放n个虚拟摄像机,且保证相机阵列以xoz面对称,其中每个虚拟摄像机的光轴为该位置到原点确定的方向向量,虚拟摄像机的法线方向为坐标轴z的正方向,将之前marchingcube算法生成的三角面片数据作为场景中需要被渲染的模型,加上之前设置的每个虚拟摄像机构成一个单独的场景,使用opengl固定管线渲染生成单角度渲染场景图,记为i1,i2,…in。s3、调用openglapi,使用glgenbuffers、glbindbuffer和glbufferdata三个函数在显存中开辟数据空间pixbufferi(纹理数组),记屏幕横向像素个数为xw,纵向像素个数为yw,则其中每块区域所占大小为xw×yw×3比特(每一个像素具有红绿蓝三个分量,占据3比特空间),利用渲染到纹理接口,将单角度渲染场景图以纹理对象的形式保存到纹理显存中;记为场景纹理t1,t2,…tn。s4、实现cuda并行化像素融合算法,具体为:根据步骤s2所述屏幕横向像素个数xw和纵向像素个数yw,如图4所示,每个像素具有红绿蓝三个通道,根据硬件参数,每个像素通道应当分别从属不同视点。配置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为当前子像素所对应的场景纹理编号。遍历整个屏幕区域,对于每个像素通道,根据s41所述计算方式得到的场景纹理编号nk,从第nk个场景纹理,即s3所述中对应像素位置取出对应通道值,填充至屏幕缓冲区对象中,完成所有像素通道填充后将屏幕缓冲区对象输出至屏幕显示。s5、自定义消息回调函数,针对交互时键盘鼠标发出的消息,进行相应的处理,以响应来自用户的交互请求。比如旋转、平移、放大、缩小等等。具体如何完成用户交互功能步骤如下:s51、首先声明并定义回调函数inventormotioncallback,作为sowinexaminerviewer组件的消息回调函数,调用seteventcallback函数完成回调函数在sowinexaminerviewer类中的注册。s52、在inventormotioncallback函数定义中完成其对于windows窗口消息的处理工作,并针对用户交互时产生的消息刷新场景,以完成对交互的响应。具体的交互操作及其响应下面具体说明:s53、当用户按住鼠标左键拖拽时产生鼠标滑动消息,这时候跳转到相应处理模块,将二维屏幕坐标的变化映射到三维坐标系中,实现了虚拟trackball,完成了场景中物体的旋转,移动。s54、当用户转动鼠标中间的滚轮时,会产生鼠标滚轮移动消息,这时候跳转到相应处理模块。将鼠标滚轮正向与逆向转动角度映射到三维坐标系中,产生场景中物体沿着z轴方向的平移,完成了场景中物体的缩放。s55、当用户按下键盘相应按键时,产生对应的按键消息,这时候跳转到相应处理模块。针对不同的按键消息,完成参数的实时调节与场景的重绘。实施例采用成熟的倾斜柱状透镜技术,通过给观看者左右两眼分别送去不同的画面,从而达到立体的视觉效果。实施例需要完成用户交互及实时渲染等功能,这对于渲染速度以及大数据量分析与处理速度有很高的要求。要做到实时交互,对于每次刷新后显示新的一帧图像的响应时间有较高的要求。实施例中的技术由于充分利用了显卡运算硬件上本身具有的高并发特性,而且数据的处理全过程都在显卡端完成,没有了数据传输的时延,因此可以做到实时交互。该种基于cuda并行计算框架的实时交互式裸眼3d显示方法,针对倾斜式柱状透镜自由立体显示系统开发,能够针对医用三维ct数据进行立体绘制。实施例基于cuda并行计算框架,实现了实时交互式自由立体显示,能够根据用户的指令,对显示目标数据进行平移、旋转、缩放等操作,并能够完成实时渲染绘制。实施例利用渲染到纹理技术,将多视点场景目标输入到纹理显存;利用cuda并行计算技术,对多视点渲染结果融合进行快速计算,以达到实时渲染的目的。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1