背景技术
医学超声成像是一种基于超声波的医学影像诊断技术,通过超声换能器向人体发出超声波并接收组织回波,利用超声波的物理特性和人体组织器官声学性质上的差异,显示人体内部的形态学信息,借以进行疾病诊断。其具有无创伤、无辐射、成本低和成像速度快等优点,且具有便携性,能够实时获取图像,故在一般的医疗诊断中,超声成像占有很大比例。特别地,对于胎儿检查,超声成像是四大医学影像中(CT\核磁\PET\超声)唯一能够使用的成像手段。
传统的二维超声成像系统只能提供人体组织器官某一切面的图像,医生需要根据二维图像在自己的大脑中合成相应的三维结构。这就对医生的熟练程度提出了很高的要求,并在一定程度上影响了临床诊断的准确性,使其在应用上存在一定局限性。尤其对于胎儿检测来说,三维超声成像具有成像直观、定位准确、确诊速度快等优点。因此,在超声诊断系统中研究三维超声成像方法具有重要意义。
目前广泛使用的3D体绘制成像算法是光线投射算法,它是一种基于图像空间的成像方法,其假设从图像空间的每一个像素向物体空间发出一条光线,在光线穿过物体空间的过程中,对相交体素的光学属性与吸收属性按照一定的方法进行累积,从而形成最后的图像。与其他体绘制算法相比,其成像质量高,且可以设置不同的阈值以显示内部特征;但是光线投射算法计算量较大,在角度变换以及人机交互的时候难以达到实时效果。
OpenGL是一个跨编程语言、跨平台的2D/3D图形处理库,开发人员可以利用其所提供的顶点着色器与片段着色器自定义渲染算法,实现通用计算。光线投射算法同时包含图形处理和通用计算两个方面,物体的顶点、光栅化、片段处理以及旋转视点变换等属于图形学范畴,沿光线上的积分过程属于通用计算范畴。OpenGL能很好地兼顾这两个方面,直接利用OpenGL的图形管线能够简洁高效的实现图形处理部分,利用OpenGL顶点着色器与片段着色器的可编程能力能实现复杂的算法设计。将OpenGL与GPU相结合,可以很方便地对光线投射算法进行实现。
随着超声成像设备的便携性、小型化和专科化要求,同时考虑到产品的体积、功耗和性价比,超声诊断系统所选用的处理器的通用计算能力逐渐下降,逐渐以嵌入式处理器替代X86架构的处理器核心。随着技术发展,ARM的计算能力有了巨大的提升,逐渐成为便携设备的主流体系结构。硬件平台计算能力的降低会对超声数据处理模块的实现提出挑战。尤其对于超声系统中的三维成像算法,相比于二维成像算法,数据的吞吐量和计算量通常大两个数量级。如果仅仅依靠ARM处理器难以实现三维超声成像功能,即使采用针对并行处理的单指令多数据(Single Instruction Multiple Data,SIMD)技术,仍然无法达到要求。
从目前处理器的发展来看,对于嵌入式处理器,通常会携带可用于通用计算的图形处理单元(Graphic Processing Unit,GPU),组合起来形成异构架构,更有利于提高嵌入式处理器的计算能力。以ARM核心为主控的多核SOC芯片通常集成有GPU内核作为三维加速引擎。
但是,对于ARM+GPU的异构架构,嵌入式GPU存在两个明显的限制:1)并行运算单元少,计算能力弱;2)ARM与GPU共用系统内存,没有专门的高速显存。同时,在嵌入式体系下,专用的开放图形库接口也从OpenGL变成了OpenGL ES,因此,在OpenGL下开发的成熟的光线投射算法并不能直接应用到嵌入式系统中。
发明内容
本发明针对目前超声设备发展专用性趋势的要求以及成像算法庞大的计算量和数据吞吐,提出了以ARM+GPU异构架构对三维超声成像光线投射算法的实现。ARM核心作为主控芯片负责整个过程中所有的任务调度及预处理工作,GPU核心作为加速引擎,实现并行计算的算法核心,通过OpenGL ES被应用程序调用,实现光线投射算法。本发明将传统的基于显卡和Intel处理器的光线投射算法在嵌入式平台下实现,降低了系统开发成本。
本发明的目的是通过以下技术方案实现的:
一种ARM+GPU异构架构下的光线投射算法的OpenGL ES实现方法,包括如下步骤:
步骤一:在ARM中建立显示窗口系统;
步骤二:在ARM中获取原始体数据,并将原始体数据重建到三维笛卡尔坐标系下;
步骤三:ARM对二维纹理进行排布,并利用OpenGL ES接口以二维纹理方式导入三维超声体数据;
步骤四:GPU接收人机交互指令,计算从物体坐标系到投影坐标系的变换矩阵,完成三维成像中的人机交互功能;
步骤五:GPU进行光线投射算法的OpenGL ES实现,并对计算量进行控制;
步骤六:GPU绘制显示平面。
本发明所述的步骤三中,考虑到嵌入式系统不支持三维纹理导入的情况,给出了二维纹理的排布导入方案。考虑到硬件平台对于二维纹理尺寸的限制,以及在二维纹理中查询体数据时不能精确索的问题,在ARM中给出了数据的具体排布方案,该方案能够解决嵌入式平台数据导入受限问题,具有良好的兼容性。
本发明所述的步骤四中,针对OpenGL ES的坐标系统定义设计人机交互矩阵,其中包括绕屏幕上两个轴的旋转、放大缩小以及上下左右前后六个观测方向的选择,可以简洁清晰地完成各种人机交互命令,使系统具备人机交互功能。
本发明所述的步骤五中,运用光线投射算法进行体绘制,针对弱计算能力与大计算量的矛盾,提出了两种计算量控制的方法,包括增大采样步长与减少光线数量;该方法有效的降低了计算量,提高了绘制速度,使人机交互可以满足实时性要求。
本发明所述系统采用ARM+GPU异构架构实现光线投射算法,ARM核心作为主控芯片负责整个过程中所有的任务调度及预处理工作,GPU核心作为加速引擎,实现并行计算的算法核心,通过OpenGLES被应用程序调用,实现光线投射算法。该实现方案能够显著降低系统开发成本。本发明与现有技术相比,具有如下优点:
1)系统开发成本低。本发明提出基于ARM+GPU异构SOC芯片的硬件解决方案,该方案的硬件成本远低于基于显卡和Intel处理器的硬件解决方案,适合低端便携产品。SOC芯片中GPU作为加速引擎直接集成在芯片内部,GPU厂商和SOC芯片厂商提供GPU驱动,应用程序通过OpenGL接口直接调用GPU,ARM和操作系统会自动完成两个核心间的任务调度。
2)良好的兼容性。本发明考虑到一些嵌入式GPU并不支持三维纹理,提出了通过导入二维纹理的方式将三维体数据导入到GPU中,使该实现方法能够解决平台受限问题,具有良好的兼容性。
3)简洁有效的人机交互方式。本发明针对OpenGL ES的坐标系统定义设计了三种基本三维人机交互操作对应的矩阵变换方法,且三种变换对应到三维观测的不同阶段,相互独立,能够简单清晰地完成人机交互指令。
4)良好的实时性。嵌入式系统较弱的处理能力,使光线投射算法的经典GPU实现方法在嵌入式设备上难以取得良好的性能,本发明改进了经典实现方法,提出通过计算量控制提高处理速度,又根据实际三维系统的用户操作流提出了速度和质量的折中方式,通过这两方面的改进能够解决嵌入式系统的处理瓶颈,满足用户的需求。
具体实施方式
下面结合附图对本发明的技术方案作进一步的说明,但并不局限于此,凡是对本发明技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的保护范围中。
本发明的流程图如图1所示,具体步骤如下:
一、显示窗口系统建立
OpenGL ES的计算功能虽独立于窗口系统,但是其显示调用过程依赖于窗口系统,需要继承显示系统的上下文环境,所以在应用OpenGL ES的系统中必须首先建立起窗口系统。窗口系统不局限于单一种类,只要支持OpenGL的窗口系统都适用本发明。
本实施例是基于Android的显示系统建立的。在管理系统界面的XML文件中创建用于输出OpenGL ES渲染结果的显示控件,利用操作系统提供的视图类建立起显示控件和计算之间的联系,通过重载视图的绘制方法来实现窗口建立功能。
二、数据获取及体数据重建
超声成像一般通过总线方式进行前后端数据的传输,常用的有CPU的内部总线、PCI总线或USB通用串行总线等。数据按照扫查的先后顺序进行传输,对于三维成像功能来说,先扫查同一位置,形成二维切片数据,再扫查不同的切片位置,从而构成三维成像所要使用的原始体数据。对于超声成像特有的扇形扫查或线形扫查方式来说,原始体数据的各个体素并不直接与三维笛卡尔坐标系的坐标点一一对应,因此在体数据渲染之前,需要进行三维体数据重建。
重建方法是将原始体数据经坐标变换,利用三线性插值将原始体数据重建到三维笛卡尔坐标系下。由于受限于声波的衰减和穿透力,超声成像质量较低,且存在固有的斑点和噪声,故还需要对超声数据进行滤波处理。本发明针对超声图像数据,采用最近邻域插值算法将数据的重建和滤波同步进行。
在其他应用中,如果原始体数据获取均匀,即与三维笛卡尔坐标点一一对应的话,可以越过此步骤。
三、OpenGL ES下体数据的纹理导入
依赖于OpenGL ES的数据传输机制,重建后的体数据需要通过纹理的方式传递给GPU,纹理有二维纹理和三维纹理两种。由于重建之后的体数据本身就是三维的,故采用三维纹理的导入相对简单和直观。
但是,三维纹理是OpenGL ES标准的可选实现,一些半导体厂商的GPU核心并不支持三维纹理,作为OpenGL ES标准的必要实现,只支持二维纹理载入。因此,在该情况下,就需要研究三维体数据的二维纹理载入方法。
将三维体数据作为二维纹理载入时,有两个限制条件,一是硬件平台对于二维纹理尺寸的限制;二是在二维纹理中查询体数据时不能精确索引。这决定了不能将三维笛卡尔坐标系下对应的体数据按照切片的方式简单排列,而是要精心设计其纹理的排布方式,使其最终既不会超出硬件平台所支持的最大纹理尺寸,又不会因为纹理查询的不精确而造成较大的偏差。
本发明提出如图2所示的纹理排布方式:先按照GPU对于纹理的宽度和高度要求,并结合每一张切片的宽度大小,设计纹理的宽度和高度。然后将笛卡尔坐标系下的切片数据按照线数关系排布到纹理中,即先沿纹理宽度方向顺序排布切片的第0条线形成一行,排布满后再沿纹理高度方向向下排布第1条线形成一行,依此类推,当切片数据填满后,从新切片的第0条线开始继续,直到将数据填满纹理。整个纹理的排布操作主要涉及数据在内存中的排布,因此该部分工作由ARM完成。
数据按照二维纹理排布好后,通过OpenGL ES的二维纹理导入接口,便可以把CPU的内存数据加载到GPU的存储空间中,供GPU后续处理管线使用。
这种纹理导入的方式决定了纹理查询的准确性。假设要查询(x,y,z)点处的纹理值,先根据z坐标确定其前后切片的索引;确定切片位置后,按照(x,y)的坐标确定待查询体数据在切片内的位置。最终GPU查找出来的体数据是由两个切片内(x,y)位置的像素分别按照双线性插值,再对两个计算结果进行线性插值得到。由于二维纹理的排布关系,能够保证切片内的相邻数据和切片间的相邻数据与体数据真实的空间位置是对应的,因此保证了数据查询的准确性。需要注意的是,二维纹理支持切片内数据的双线性插值,即硬件可以自动计算;切片间的线性插值需要由GPU自行编程计算。
四、接收人机交互指令,计算坐标变换矩阵
三维成像系统中基本的三种人机交互包括:绕屏幕上两个轴的旋转、放大缩小和上下左右前后六个观测方向的选择。OpenGL ES的图形处理管线中的角度变换功能是通过坐标变换矩阵实现的。人机交互方法是:首先建立基本人机交互指令与空间变换矩阵间的对应关系,然后根据OpenGL ES的坐标定义设计空间变换矩阵。
系统运行时,人机交互系统每下达一个指令,ARM就按照事先设计的方式修改空间变换矩阵,导入到OpenGL ES的顶点着色器中,在顶点着色器中用顶点的坐标向量乘以空间变换阵就可以得到顶点在空间变换后的坐标。
本发明设计的人机交互与空间变换矩阵之间的关系是:在世界坐标系中进行将绕屏幕上两个轴的旋转操作,将其对应到物体绕世界坐标系的两个轴的旋转;利用观察坐标系相对世界坐标系的位置关系进行六个观测方向的视角(前后上下左右)选择操作;在投影坐标系中进行放大缩小的操作,将其对应到透射投影阶段近平面位置的改变。实时更新三种操作所对应的矩阵,便可以完成人机交互功能。本发明设计的人机交互的实现方式,使三种人机交互过程就相互独立,任何一个的操作不会对另外两个操作造成影响。
设计的空间变换矩阵如下:
物体绕世界坐标系的X轴旋转θ角对应的旋转矩阵如式(1)所示:
物体绕世界坐标系的Y轴旋转角对应的旋转矩阵如式(2)所示:
根据人机交互系统送达下来的指令角度θ和更新物体坐标系到世界坐标系的坐标变换矩阵为:
MatrixM odel=KnKn-1…Ki…K2K1K0;
其中,Ki代表第i次转动物体,Kn代表最近一次的转动。
观察方向的视角变换矩阵设计主要考虑观察坐标系与世界坐标系的位置关系。我们以前视角为例,即观察点在世界坐标系的Z轴正半轴上,看向Z轴负半轴,视觉上方为Y轴正半轴,世界坐标系到观察坐标系的变换矩阵如下:
其中,d是观察点在世界坐标系Z轴正半轴上的坐标。
对于物体缩放操作,对应对到透射投影矩阵的设计上,投射投影矩阵为:
其中,dn是近平面离观察点的距离,df是远平面离观察点的距离,W和H分别是近平面的半宽和半高,需要注意的是在OpenGL的定义中透射过程的近平面和成像平面重合。
根据人机交互系统送达下来的放大缩小指令,修改近平面的位置(即公式(4)中的dn值):放大时,增大dn值,使近平面原理观察点靠近物体,物体在近平面上所成的像变大,缩小时反之。公式(4)中df的取值涉及到透射裁剪,为了保证物体处于可视空间内,应当将远平面放置于物体距离观察点最远点后方,同时近平面也不能太靠近物体距离观察点最近点。
故人机交互所对应的总的变换矩阵,即从物体坐标系到投影坐标系的变换矩阵MatrixPr ojection ViewModel为:
MatrixPr ojection WorldModel=MatrixPr ojection·MatrixView·MatrixModel。
实时更新该矩阵,并将其导入到顶点着色器中,用齐次的四维顶点坐标向量乘以该矩阵即可得到顶点在成像平面上的二维坐标,实现基本的人机交互。
五、光线投射算法的GPU实现及计算量控制
图3给出了光线投射算法的原理:通过绘制数据包围盒的前后表面,分别获得光线的起始点和终止点,利用这两点的空间坐标即可确定每一条光线的方向。在光线穿过物体空间的过程中,按照预先设定的采样步长对体素值进行重采样,然后对重采样的体素值进行传递函数的映射,得到其所对应的颜色及不透明度值,并沿光线方向进行积分。其中颜色及不透明度的积分公式如下:
C′i=C′i-1+(1-A′i-1)Ci;
A′i=A′i-1+(1-A′i-1)Ai。
其中,C′、A′分别代表当前积分得到的颜色及不透明度的值;C′i-1、A′i-1分别代表上一步颜色及不透明度的累计值;Ci、Ai分别代表当前重采样体素值经过传递函数映射所对应的颜色及不透明度的值。
在光线投射算法中,影响成像速度与成像质量的主要因素有两个:
1)光线数量:光线数量越多计算量越大,成像速度越低,成像效果越好;
2)采样步长:采样步长越小计算量越大,成像速度越低,成像效果越好。
ARM+GPU异构架构模式下,嵌入式GPU的计算能力弱,同时没有高速显存,需要与ARM共享内存。计算能力和带宽的双重限制,导致已有的算法实现方式在嵌入式GPU上不能获得好的性能。本发明采用如下方法进行绘制速度与绘制质量的控制:当用户做拖拽缩放等交互操作的时候,着重考虑实时性要求,因此降低成像质量以提高成像速度;当用户停止交互操作的时候,着重考虑成像质量,因此降低成像速度以提高成像质量。本发明通过对光线数量和采样步长进行控制,从而实现成像质量与速度的折中。
对于光线数量控制的具体方法如图4所示,在GPU中,由于每一条光线对应着一个片段,最终的片段数量对应着光线数量,因此本发明采用通过控制光栅化阶段生成的片段数量来间接控制光线数量。当屏幕的分辨率一定时,片段数量与最终显示的视口的大小成正比,视口越小生成的片段越少,则对应的光线数目越少。本发明在绘制前表面和后表面时通过ARM核心控制视口的大小,在需要快速绘制时,将视口缩小,降低绘制质量增加绘制速度。反之,则增大视口。实际测试结果是算法单帧耗时和视口面积近似成正比。
对于采样步长的控制,由ARM核心实时监听用户是否进行交互操作,在绘制实时性要求较高时,增大采样步长,并由ARM核心将改变后的采样步长传入着色器,用于光线投射算法的计算中。在对采样步长进行控制时,如果只简单的改变采样步长,会导致渲染出的三维图像稀疏采样区域变亮,密集采样区域变暗,带来明显的视觉差异。针对此现象,本发明运用以下公式对重采样得到的不透明度值进行修正,以保证视觉上没有明显差异。
其中,αcorrtct为修正后的不透明度,αstored为原始不透明度,Δx、Δx0分别为改变后的采样步长与原采样步长。在不同采样步长下的渲染效果如图5-7所示,从图中可以看出,在采样步长发生变化的时候,成像的明暗效果并无明显差异。
通过光线数量和采样步长的双重控制,光线投射算法的计算量能够被有效控制,可以在成像质量和成像速度上进行折中,帧频可以在几帧到几十帧之间不等,保证用户操作的实时性要求。这种结合三维系统操作流的折中方法,能够很好的在嵌入式系统较弱的计算性能前提下满足用户的实际需求。
六、绘制显示平面
由于本发明在计算量控制中为了减小光线数量,在绘制过程中将视口的尺寸设置的较小,如果直接将该绘制结果输出,不便于观察,故本发明增加了本步骤:将光线投射算法生成的图像作为纹理贴到一个合适大小的矩形表面上。具体的实现方法是:由ARM核心给出指令,在显示窗口上绘制一个尺寸和显示窗口同样大小的矩形平面,铺满整个显示窗口,然后把前表面绘制阶段生成的输出纹理作为矩形平面的纹理贴到整个矩形平面上。这样便可以使图像铺满整个窗口,便于观察。