依据35U.S.C§119(e),本专利文件要求序列号为60/574038、申请日为2004年5月25日的临时美国专利申请的优先权,所述临时申请被通过引用结合于此。
具体实施方式
体数据集合通过移动的窗口被寻址,每次绘制在两幅相邻图像之间的空间(体切片)。两幅相邻的图像从任何存储设备或者网络连接流入本地CPU或者GPU存储器中。在两个相邻图像之间的空间通过光栅化一系列切片多边形来绘制,所述切片多边形被来自所述两幅相邻图像的内插数据加上纹理。在用于特定切片的切片多边形已经被绘制后,接着绘制相邻的切片。附加的图像流入本地存储器去替换不能限制新切片的先前图像中的一幅。这个过程一直被重复,直到所述体积或者阵列的整个系列的图像都已经被处理为止。
利用直接体绘制有效地生成图像,甚至当包含被内插的数据的整个三维阵列非常巨大并且超出了处理设备的存储器存储和/或存储器寻址能力时。所述目标的相邻图像一次一幅地逐渐被穿过并且利用图像对或者其他子集而被内插。用于巨大的体数据的显像的任何设备的存储器存储需求能够被大大地减少,因为在任意时刻仅仅两幅图像需要驻留在存储器中,并且每一幅图像仅仅被加载在存储器中一次。低存储需求容许简单的处理设备,例如具有有限的存储器的计算机或者具有很小的视频存储器的GPU,来计算包含任意巨大数量的图像的非常庞大的三维体积的直接体积显像。所述图像间距离和图像缩放比例可以是任意的,允许具有局部变化的分辨率的体数据集合的显像而不必在笛卡尔网格上对数据重新采样。
图1表示用于生成体绘制的数据和体绘制所生成的数据的***10。所述***10包括数据源12、存储器14、处理器16和显示器18。另外,可以提供不同的或者更少的部件,例如没有数据源12的***。在一个实施例中,所述***10是医学成像或者断层扫描***的一部分,例如,MRI,CT,X射线,PET,超声或者其他的医学成像的形态。在另外的实施例中,所述***10是计算机、工作站、数据库***或者其他独立式或者移动处理***。
数据源12是医学成像***,断层扫描器,网络,数据库,存储设备,计算机或者其他的可用来获得和/或存储表示体积的数据集的设备。例如,数据源12同时或者按顺序提供数十、数百或者甚至数千个二维图像和相关联的空间关系信息。图像包括用于生成图像的即使不是成像格式的数据或者先前是成像格式的数据或者尚未被用于显示图像的数据。二维图像的阵列表示通过病人或者结构的平行或者不平行的切片或者平面。所述图像具有相同的或者不同的分辨率,在每一个紧接的图像对之间的间隔相同或者变化。任何现知的或者以后发展的数据源12和相关联的二维纹理(图像)的阵列或者集合都可以被使用。
存储器14是高速缓存存储器,随机存取存储器,CPU存储器,GPU存储器,缓冲器,它们的结合或者其他现知或者以后发展的存储器。存储器14可用来按顺序存储表示体积的数据的不同的子集。例如,存储器14存储两个或者更多个来自于更大数量的二维图像的图像。所存储的图像彼此相邻,例如成为紧接的图像对。或者,存储其间间隔一个或者多个其他图像的相对相邻的图像。
为了利用滑动窗从体数据中选择图像子集的连续存储区来绘制,存储器14可以先进先出形式来工作。也可以使用其他形式。所述滑动纹理方法阻止了为体绘制使用二维纹理的问题的出现。特别地,所述滑动纹理方法不需要存储三份体数据的副本,但是可使用多个副本。体数据能够以原始形式表示为单一系列的二维图像。每一幅图像的数据内容在存储器14之中是连续的,以保证良好的高速缓存相干性,但是也可以使用一幅或者多幅具有处于不连续地址的数据的图像。所述图像可以被存储在不同的存储器中(例如,数据源12和存储器14)并且所述图像可以不具有统一的缩放比例和/或图像间距离。
处理器16是通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列,图形处理单元,中央处理单元,模拟电路,数字电路,它们的组合,多个处理器,网络或者其他已知的或以后发展的处理器。在一个实施例中,所述处理器和存储器14是图形处理单元的一部分,例如,按照OpenGL、DirectX或者其他图形数据绘制语言可操作的图形卡。
处理器16可用来从存储于存储器14中的二维纹理的不同子集来三线性内插数据。例如,处理器16首先双线性内插。处理器16在至少一个表示在每一个不同子集的二维图像之间的区域的片上生成纹理数据。所述纹理数据生成自限制所述区域的二维图像,因此用于每一个不同子集的纹理数据是来自分别不同的子集的二维图像的函数。生成表示所述切片的不同纹理片。对于当前存储于存储器14中的二维图像的每一对或者子集,多个在二维图像之间延伸的实质上平行的非共面的多边形被识别并且在所述多边形上从二维图像对内插纹理数据。
为了从所述纹理片进行绘制,处理器16沿着更为正交而不是平行于所述纹理片的其他维度进行内插,提供三线性内插。通过连续地执行用于体数据的不同子集的三线性内插,处理器16绘制具有被绘制自对应于不同子集的不同片的不同区域的三维表示。
在一个示例GPU实现中,体数据被存储于存储器14中。如果体数据的整个集合安装在GPU存储器14中,切片S1-Sn的整个序列被以2D纹理的堆叠形式存储。作为选择,2D纹理(例如,T1和T2)的另一个子集被放置于GPU存储器14。不论是整个集合还是子集,两幅或者更多幅图像被挑选出来去定义每一个体切片。模板几何图形被预计算或者实时地识别多边形。来自所述模板或者被计算出的多边形被存储在GPU存储器中,其中利用了显示列表,顶点缓冲对象(VBO),顶点阵列(VAR)或者其他任何允许在GPU存储器中存储几何图形的技术。所述子集的图像被限制为多纹理单元(例如,TU1和TU2)以及被用于在替代几何图形(例如,平移的模板几何图形)中纹理化。可编程分段处理器从组成所述切片的两幅图像中取回两个双线性内插的样本。所述分段处理器在Z纹理坐标中用内插因子对两个样本加权以获得三线性内插样本。这个样本能够进一步地被用于分类和明暗处理。
在第一切片已经被绘制后,按切片间距离进行的平移被增加到用于基于模板的实施例的模型图矩阵中。下一个来自所述体积的切片被复制到GPU存储器14中的两种2D纹理之一中。所述下一个切片采用往复式或者先进先出方式被加载到GPU存储器14中的两种2D纹理中。每一个切片仅仅被加载一次,如下面的示例所示:
第一切片:加载图像S1到T1,加载图像S2到T2,
用T1给TU1赋值,用T2给TU2赋值
绘制
第二切片:加载图像S3到T1,
用T2给TU1赋值,用T1给TU2赋值
绘制
第三切片:加载图像S4到T2,
用T1给TU1赋值,用T2给TU2赋值
绘制
第四切片:加载图像S5到T1,
用T2给TU1赋值,用T1给TU2赋值
绘制
第五切片:加载图像S6到T2,
用T1给TU1赋值,用T2给TU2赋值
绘制
…
第(i*2)切片:加载图像S(i*2+1)到T1,
用T2给TU1赋值,用T1给TU2赋值
绘制
第(i*2+1)切片:加载图像S(i*2+2)到T2,
用T1给TU1赋值,用T2给TU2赋值
绘制
在每一个切片之中由后至前的合成使用透明几何图形的由后至前的排序。分别地,由前至后的合成使用透明几何图形的由前至后的排序。为了正投影,所述切片按照z的增序或者降序被排序。为了立体投影,所述切片纹理片根据在模型空间中的照相机的z坐标被排序。因为每一个切片具有沿着z轴(所述轴实质上平行于限定所述切片的二维图像)的特定范围,具有照相机的模型空间z坐标的切片在其范围内首先被绘制以用于由前至后的合成或者最后被绘制以用于由后至前的合成。对于由前至后合成按照与第一切片的渐增的距离的顺序或者对于由后至前合成按照与最后的切片的渐减的距离的顺序对其他切片进行绘制。
显示器18是CRT、LCD、投影仪、等离子显示器或者其他现知的或者以后发展的显示设备。显示器18在所述数据被绘制期间或者之后生成一幅图像或者图像序列。所述图像是三维表示,例如从用户或者处理器选择的观察方向绘制的二维图像。显示器18是本地***10的一部分或者是远程的,例如联网的显示器。
图2表示用于生成体绘制的数据和用于从二维纹理进行体绘制的方法。所述方法是使用图1的***10或者不同的***来实现的。可以使用动作30-38的相同或者不同的顺序。另外,可以使用不同的或者更少的动作。例如,在没有动作38的情况下执行动作36。作为另一个实例,动作34对应于识别区域、片或者切片,未必识别多边形。
在动作30中,获得多个二维纹理。图3表示多个表示体积52的二维图像50。所述二维图像是从经由被扫描的身体的常规的一连串相邻图像50组合的数据的三维体阵列中的纹理。每一幅图像50是数据点的二维图像阵列。二维图像50的每一个网格值都是一个图像元素或者“像素”。所述三维体阵列的每一个网格值被称为体元素,或者“体素”。所述三维体阵列是能够从磁共振(MR)成像***、计算机化X射线分层造影(CT)扫描***、电子发射断层扫描(PET)、x射线、超声扫描或者其他***获得的。可选择地或者附加地,所述体阵列从存储器、数据库、网络、输入连接或者其他资源处获得。
二维图像50通常处于第一方位,例如实质上正交于z轴或者维度。如果沿着x或者y轴或者维度观察体积52,二维图像50实质上看起来为直线。图像50具有统一的或者不统一的间隔。例如,在每一相邻图像50对之间的距离是变化的或者是相同的。如图所示,图像50是处于平行的平面上的。在其他的实施例中,图像50是处于在体积52的内部或者外部相交的相交平面上,例如,与通过绕着一个轴旋转扫描仪来执行的体积52的扫描相关联。图像50具有相同或者不同的缩放比例。例如,以较低的分辨率获得一些图像50,例如在体积52末端的图像50。以较高的分辨率获得其他的图像50,例如与体积52中所关心的区域相交的图像50。
在动作32,所述体阵列的子集被加载到存储器或者处理器中。多个二维图像的不同的子集被依次地选择。每一个子集包括任何数量的所述二维图像,例如紧密相邻对。选择窗逐渐地滑过所述图像数据去选择每一个子集。第一子集包括体积52沿着z轴的最初的或者最后的图像50,但是来自体积52的中心或者其他位置的图像50可以首先被选择。
在一个有效的实施例中,每一个子集通过仅仅加载所述子集的部分而形成。每次仅仅加载单一的图像。在图像1,2,3...N的序列中,图像1和2的第一子集被加载。对于图像2和3的第二子集,由图像3替换图像1。作为选择,使用具有通常相邻的图像(例如,1和3)的子集或者具有三个或者更多个图像的子集。
对于图像的每一个子集,在当前相邻图像(一个切片)之间的空间被扫描。为了对象对准的切片和沿着z轴(参见图3)的主要观察方向,图像50被用于将这个空间光栅化。对象对准的切片和沿着z轴从二维纹理进行的绘制提供了一种三维显示。也同样可以绘制三线性内插的中间切片。对于更多地沿着x或者y轴的观察方向,从二维图像的直接纹理绘制可能导致中断或者不希望有的外观。
为了沿着x或者y轴绘制,在动作34识别作为相邻二维纹理之间的片延伸的多边形或者区域。例如,图4表示对于沿着x轴的观察方向一般定向的两幅图像50。多个多边形56在延伸在相同的相邻二维纹理或图像50之间的实质上平行的平面中被识别。在作为选择的实施例中,仅仅识别单个多边形56。所述多边形56被通过两个图像50的边界限定或定义切片来修剪。多边形56与图像50是不平行的,例如处于基本正交于图像50的平面上。多边形56具有统一的或者变化的间隔且互相之间是平行的或者不平行的。为了沿着x轴或者y轴的主要观察方向,多边形56按照由后至前或者由前至后的顺序被绘制。
基于从对象对准或者观察对准的切片获知的替代几何图形识别多边形56。在一个实施例中,每一个多边形56的顶点根据图像50的空间关系来确定,例如,具有沿着图像50的外部边沿的末端的顶点的第一多边形56。为了对象对准的切片,以许多拉长的矩形或者片为结果。在观察对准的切片中,以具有3到6个顶点的多边形的集合为结果。这些多边形的顶点的xy纹理坐标表示在图像50上的顶点的位置,而对于所有的处于切片的第一图像50的平面上的顶点,z纹理坐标被指定为0,并且对于所有的处于第二图像50的平面上的顶点,z纹理坐标被指定为1。在一个变化中,多边形56正交于图像50,但是与所述图像的外边沿并不对齐,例如,在那里所述图像被弯曲或者不与体积52的边沿平行。在一个备选的实施例中,每一个多边形56的顶点至少部分被标识为观察方向的函数,例如,使得与图像56其中之一或之二不成直角的多边形56的取向更加正交于观察方向。
多个切片和相关的多边形对于图像50的不同的子集被顺序地识别。对于每一个子集,识别多边形56。每一个切片或者子集的多边形56是互相独立的或者被确定为来自不同的切片或者子集的多边形56的函数。例如,计算用于图像50的第一切片或者子集的多边形56的集合。多边形56接着被平移以用于第二个不同的切片或者子集。被平移的多边形56作为用于不同切片的多边形被使用。为了有效的体绘制,预计算切片多边形的替代几何图形。用于使两个相邻图像50之间的空间光栅化的模板几何图形被生成并且存储。对于具有恒定的图像间距离和图像缩放比例的切片,相同的模板几何图形可被重新利用。所述模板几何图形沿着z轴,通过把说明移位的平移矩阵与模型图矩阵相乘,被从一个切片移到另一个切片。为了对象对准的切片,所述模板几何图形是拉长的矩形的堆叠。这样的模板几何图形对于给定的采样率被预计算一次。三个重要的主观察方向的每一个都使用一个单独的模板几何图形。为了观察对准的切片,模板几何图形对于每一个新的观察方向被计算。然而,用于第一切片的切片几何图形可以通过增加平移到模型图矩阵中被再用于随后的切片。计算平移量可能比独立地计算多边形56具有更少的计算负担。
切片之间涉及的多边形56的另一个示例使用切断平面。对应于三个或者更多个相邻二维纹理的实质上平行的非共面的多边形被识别。使用用于观察对准的体切片的替代几何图形。为了限制对在两个或者较少数量的相邻图像50之间的空间的光栅化,建立一个或者多个、例如一对切断平面。每一个切断平面处于两幅定义切片的图像50之一的平面上,每一个具有不同的切离切片之外的空间的方位。在绘制期间,从传统的观察对准的切片获得的相同的替代几何图形为了每一个切片被反复地绘制。所述切断平面为了切片的每一个被调整以保证仅仅使所述切片光栅化。
在动作36,生成用于多边形56的纹理数据。所述纹理数据表示比所述二维纹理或者图像50更加正交于观察方向的区域或片。所述纹理数据表示一个区域,多边形56,在二维纹理之间。不同的纹理数据为了不同的多边形56中每一个和相关的切片或者子集而被生成。通过在不平行于图像50的多边形56上生成纹理数据,提供了用于绘制的纹理数据。
对于给定多边形56通过内插生成纹理数据。所述纹理数据是从多边形56相交的二维纹理的数据来内插的。来自体积52的相邻二维纹理的数据被用于提供多边形56的纹理。内插在相交处的数据。例如,为了具有如图4所示的图像50的边沿上的顶点的多边形56内插纹理数据。选择沿着所述边沿的图像数据。为了在多边形56上的每一个位置具有数据,来自在图像50的边沿上的两个最接近位置(多边形56与图像50的相交点)的数据值被加权后进行内插。权值表示每一幅图像50对内插的相对贡献,例如是与多边形56上的数据位置之间的距离的函数。以任何所需分辨率为纹理数据提供内插,例如与缩放量相关联。为了在多边形56中的每一个空间位置执行内插以生成用于片的具有所需分辨率的纹理数据。可能提供附加的内插,在那里从沿着相交处的两个值内插用于给定图像50的值。
在一个实施例中,用于所述片的纹理数据被实质上同时或者作为一个函数的一部分从两个图像50双线性内插。在光栅化期间,纹理坐标被内插到替代几何图形内部,并且x-和y-坐标被用于获得体数据,生成所述体数据的双线性内插样本。在另一个实施例中,形成纹理数据的两个不同的集合。一个集合对应于仅仅从其中一幅图像50内插到多边形56,例如,将值0混合到来自图像50的值。另一个使用另一幅图像50的纹理数据的集合也被生成。接着所述两个集合被结合,例如取平均值。纹理数据的平均值集合表示自两幅图像50混合的多边形56。
对于一个切片的每一个多边形56生成纹理数据。例如,对于在两个纹理之间的多个片中的每一个生成独立的纹理。内插的纹理数据表示不同的实质上平行的相交于图像50的平面。
在动作38,从用于多边形56的纹理数据绘制图像。为了对所述切片三线性内插体数据,来自所述体积的两幅相邻的图像50被加载到CPU或者GPU存储器中。用于所述切片的每一个多边形的纹理数据是使用xy纹理坐标从所述体积被双线性内插的。那两个双线性内插的值被使用内插的z纹理坐标来加权。这得到三线性内插或者绘制的体样本。多边形56的纹理数据被用于绘制体积52的三维显示的一部分。纹理绘制被提供二维图像而无需用于每一维度的数据的副本。
所述绘制是用于任何观察方向且无需生成在与第一方向、例如图3所示的z轴方向不同的方向表示体积的数据副本。为了面向观察方向的绘制,沿着观察方向或者线路的数据被组合。在所述观察线路通过不止一片切片的地方,提供局部的组合。当为连续切片生成纹理数据时,相应的局部组合被组合。
可以使用任何使用纹理数据的绘制技术,例如,间接或者直接体绘制技术。例如,执行最大值、最小值、平均值或者其他强度的投影绘制。色彩和/或不透明值可以为了绘制沿着所需方向被内插。当间接方法生成和绘制体数据的中间显示的时候,直接方法通过估计描述所述体积如何发射、反射、散射、吸收和封闭光线的光学模型来显示体素数据。所述体素值被映射到描述在3D空间中的各个点上的光线交互的物理量。在图像合成期间,通过基于所述光学模型沿着观察射线结合光线交互影响来计算光传播。
基于纹理的体绘制方法包括依据替代几何图形的方向的观察对准或者对象对准的方法。为了观察对准的切片,替代几何图形被定向为正交于虚拟照相机的观察方向。使用体素数据(3D纹理)块表示体数据。为了对象对准的切片,替代几何图形被定向为正交于体积的三个主轴。大量的通过体素数据的体积的观察或者对象对准的切片在绘制期间使用替代几何图形来重构。
对象顺序光栅化绘制算法的基本方法,例如在消费者图形硬件中实现的那些方法,是基于图元(多边形,直线,点)的扫描转换。在扫描转换(片段)期间生成的数据值被混合到帧缓冲器中。由于体数据不是由这样的图元本身组成的,替代几何图形被定义以用于通过体数据的每一个独立的切片。每一个切片由来自所述体积的相应的数据进行纹理化。在切片多边形上光栅化期间通过把滤波器核应用于体数据的旋转重构所述体积。能够通过这样的切片的堆叠表示整个体积。
可以在没有重新采样二维纹理或者图像50的阵列的情况下执行所述纹理绘制。传统的算法使用在均匀的笛卡尔网格上的体数据,要求所述体数据被重新采样。当重新采样可以被使用的时候,由于在两幅相邻的图像50之间的空间被能够具有沿着z轴的任意缩放比例的多边形填充,重新采样可以被避免。沿着z轴通过绘制填充在两个相邻图像之间的空间的切片多边形来自动地缩放所述体数据。为z纹理坐标分配的内插因子保证沿着z轴的体数据的正确的缩放比例。
具有不统一的图像缩放比例的体数据可以被用于纹理绘制。在两幅相邻的图像50之间的空间被能具有沿着x和y轴的任意缩放比例的多边形所填充。在纹理中的简单的缩放比例因子和模型图矩阵保证切片的正确的缩放比例。如果两幅图像50不具备统一的缩放比例,多边形被缩放以使两幅图像50的最大范围光栅化。用于一幅或者另一幅图像50上的顶点的纹理坐标被指定以用于说明两幅图像的不同缩放比例。相邻图像50的边沿策略被设置为0(即,从图像边界外部取回的值被赋予值0)。
每一个切片被绘制。切片的绘制对应于绘制三维显示的一个区域。所述区域对应于在定义所述切片的图像50之间的体积。多边形56定义所述切片的范围和被绘制的结果区域。在使用切断的地方,切断所述多边形以对应于所需区域或者切片。所述切断导致多边形56被限制为比没有切断时更小数量的相邻二维纹理。
图2表示从动作38到动作32的反馈回路。动作32的获得子集,动作34的识别多边形,动作36的生成纹理数据和动作38的纹理绘制被重复用于多个对中的每一对或者二维纹理的其他子集。每一次重复对应于绘制三维显示的不同的片或者区域。所述图像的不同部分作为不同子集的函数被连续地绘制。表示体积的二维图像的不同区域作为对应于相邻二维纹理的不同集合的片中不同的几个的函数而被绘制。通过连续地加载图像的不同子集,可以使用比一次绘制整个体积时更少的存储空间来纹理化绘制三维显示。
当通过参考不同的实施例已经对本发明进行了描述的时候,应当理解能够做出许多改变和修改而并不脱离本发明的范围。因此意味着前述详细的描述只被认为是说明性的而不是限制,并且能够理解接下来的权利要求,包括所有等效物,被用来定义本发明的精神和范围。