用于在3d数据集中辨别表面的方法和系统("划分体元")的制作方法

文档序号:6500643阅读:188来源:国知局
专利名称:用于在3d数据集中辨别表面的方法和系统("划分体元")的制作方法
技术领域
本发明涉及三维(3D)数据集的分析和显示,尤其涉及创建包括3D数据集任意数据段的表面。
有关申请的交叉参照 本申请要求于2003年11月28日提交的序列号为60/525,821的美国临时专利申请的优先权,还要求于2004年11月26日提交的标题为“在三维数据集中辨别表面的方法和系统(划分体元)”、发明人为Chen Tao的序列号为_____________的美国临时专利申请的优先权。申请人保留修改本申请的权力以提供后一个临时专利申请的序列号。

背景技术
“体积位图”包括“体元数值”的矩形三维格子,它们是一些通常用于估计(在物理空间中相应的点处)一个或多个样本物理特性的数字,比如,对其内部组成很感兴趣的病人或工业产品的某一区域。这些数字可以表示各格点处给定特性的数值或者可以表示在其附近一定的区域中给定特性的平均值,该区域被抽象为一个体积元素或体元,体元就是离该格点最近的多个点的集合。通常,当体元数值表示给定体积区域中的平均值时,其特性影响到特定格点的体元数值的实际区域比仅仅离它最近的那些点的集合要复杂得多,但是这种抽象通常作为一种方便的近似加以使用。当三维格子的间距沿着其三个直角坐标轴都是相等时,各格点周围的体元是单位体积的立方体,其中格点位于其中心;结果,术语“立方体”通常与“体元”同义地加以使用,此处也是这样。
其格子步长沿各边缘并且格点位于各隅角处的空间矩形区域在这种情况下也是立方体形的,并且被用在常规的Marching Cubes算法中。在这种意义中的立方体不应该用在此处。我们应该参照由物理测量系统所产生的体元中的数值或相应格点处的数值,而不必断言有物理特性的真实点数值。不过,通过假设该断言来估计该事实有时候是方便的。在格子所占据的空间中的一般的点(x,y,z)与i,j,k都是格子步长整倍数的格点(i,j,k)之间做出区分也是有用的。坐标(x,y,z)是以相同的格子步长单位来测量的(通过这些格子步长单位,体元自动变为立方体),但是坐标(x,y,z)是容许的非整数数值。
不同的物理疗法,比如,计算机X线体层摄影(CT)、磁共振(MR)、超声波(US)、正电子发射型计算机断层扫描(PET)以及地震测验等,都可产生这种用于估计不同特性(比如,X射线或振动波的不透性,放射性微粒的发射)的位图,这些位图还可用于将氢核耦合到它们的分子环境中。同样地,这些数字可以表示在格点(i,j,k)处三维位置的函数f(x,y,z)的计算结果,该结果用于表示抽象兴趣的量值或用于将一个数字与任何三个数值x,y,z相关联,不管这些是指空间位置或像响应时间或投资收益这样的量值。由单个数字组成的体元数值是标量。当由不止一个数字组成的体元数值与各个格点相关联时,通过用彩色模型来模拟,扫描可以被称为摄谱,无论扫描特性的物理性质是否包括在多个波长的混合处的发射或反射强度。通过将红色、绿色和蓝色的强度分配给为一个元素而存储的不同的数字,摄谱数据可以与用于显示的可见颜色相关联,但是使用标量扫描时,通过规则“如果数值大于42则为红色,否则就是透明”,也可以将一种颜色分配给各元素。如果扫描的物理特性是在该阈值之上,则某一元素处的数值(无论可信度有多少)与被扫描的物体中相应点处所感兴趣的样本(该样本可能癌变或含油)相关,看着红色位置的显示器的用户了解到一些关于肿瘤、储油罐或被扫描物体的其它组分的物理排布。可以进行更复杂的测试以便决定颜色,比如介于指定的一对数值之间,使一个数值显著位于附近元素的平均值之上等等,并且使用摄谱数据时,规则可以更复杂,但仍然包括所有的成分。不过,在许多这样的情况下,最终结果是二元的决定,即在某一物理点处的材料可能具有或者可能不具有用户所感兴趣的特定属性。
当显示器使用上述颜色规则时,用户观察物体(比如,肿瘤),但是作为集合的红色位置的表示仅出现在用户的观察之中;计算机没有任何属于该物体的位置集合的清晰表示。当然,使用给出连续颜色范围的规则时,与上述“红色对透明”这样的二元区分相反,观察到的红色物体可能不具有锐利的清晰度因为在模糊逻辑中,这些位置可能或多或少都在该集合之中。这和人类的认识匹配得很好,但是出于许多目的(比如,计算肿瘤的体积),则必须有明晰的可计算的决定过程,针对该过程各元素要被包括到物体之中以及不被包括到物体之中。这种过程(具有一个或多个要与完全扫描的元素相区分的片段(元素子集))被称为体积图像的分段,并且具有很多的研究文献。分段方法是众所周知的,并且此处假定使用某些分段是为了将三维数据集的元素标记为处于所感兴趣的特定种类之内或之外。内部元素集在此被称为一个数据段。根据所牵涉的应用,根据数据来源和扫描方式,它可以对应于头骨、储油罐、制造出的物体中的腔等等。
在数据段中的元素的纯粹列表并不必然是其最有用的代表。例如,与估计边界表面的位置并计算它包含的体积相比,计数元素通常给出不够精确的体积估值。图1示出了在两个维度中估值的相应对比度。圆圈101围着一块等于50个正方形的面积,但只包围了45个单位间隔的“内部”取样元素102,圆圈101将这些取样元素102与外部元素103分开。更佳的估计可以是计算内插边界曲线(在本示例中即为圆圈101中)内部的面积。
清晰的边界表面具有许多其它用处。例如,如果希望计算某一外部点离物体有多远或某一内部点在其内部有多深,则没必要分别计算到所有内部或外部元素的距离并找出最小值。只需要用表面元素就足够了。通常,这样就少了许多。例如,沿各边具有100个格点的立方体包含一百万个点,但只有6万个表面的点(6个表面,每个表面1万个点)。因此,找出到立方体表面(即6个面)的距离,会显著地减小计算量。
特别是,清晰的表面表示可以极大地加速物体的呈现(视觉显示)。不管近来技术上有多么巨大的进步,在每个元素处,直接呈现几百万个点样本的体积(具有平滑程度尚可接受的图像所要求的插值)、透明度的估算等很难做到交互式应用所需要的那么快。针对物体周围的“空”元素和针对内部元素(内部元素无法对最终图像做出贡献,除非物体的一部分被切除)所做的计算是费时费力的。
根据计算环境,最有用的可能是不同的表面表示。许多图形卡针对被指定为三角面(或多边形面,通常它们会分解为多个三角形)集合的表面的快速显示进行了高度优化,但这导致呈现体积会很慢。或者,以体积为导向的环境可以使得使用表面体元而非多边形更为方便。无论是以触觉方式还是以视觉方式,具有非常多的小多边形的网格表面可能不方便呈现,因为必须处理各个三角形(在触觉显示的时间限制以内,这通常是不可能的),并且其视觉显示图像小于一个像素宽的多边形通常会给防图形失真算法(图形系统通过该算法显示更平滑的图像)带来实质上的困难。尽管网格减少技术(比如,在CarnegieMellon大学计算机系1997年出版的P.S Heckbert和M.Garland所著的“Surveyof Surface Simplification Algorithms”技术报告中对此有过描述,并且在http//www.martinb.com/contacts/meshreduction.htm中也有描述,)可以通过使用更少的多边形来近似取代表面,但是这在计算时间方面的花费是相当大的。
用于找出被分成三角形的表面(该表面将分段的“内部”和“外部”元素分开)的标准手段是Marching Cubes算法。在本领域中,也已知一些其它构建分离表面的方法,例如,H.H.Baker的“Building Surfaces of EvolutionTheWeaving Wall”(Int.J Comp Vision3,51-71,1989年)和T.Poston,T-T Wong和P-A Heng的“Multiresolution Isosurface Extraction with Adaptive SkeletonClimbing”(Computer Graphics Forum 173,1998年9月,第137-148页)。不过,所有这些方法的重点在于分离与数值相关的元素,而非分离整个体元。此外,用常规方法(比如,Marching Cubes及其后续)创建的表面在找出真正闭合的表面方面具有困难,通常在这些表面中留有“孔”或未连接的部分。
用体元表示表面的简单手段是列出每一个具有外部相邻体元的内部体元,或列出每一个具有内部相邻体元的外部体元。尽管这种未组织的列表可以有各种应用,但是它对许多目的而言都是不方便的。例如,既然表面将内部元素和外部元素分开,那么应该有可能在不往回参照原始的大体积位图或分段结果(并且不得不从有源存储器中装载)的情况下将元素区分为内部或外部。(这种区分在例如力反馈环境中感觉物体的方面可以是有用的,如果刀尖已刺穿该物体,该环境要求不同的力结果。力反馈要求一毫秒以下的响应时间,从而使长的计算变得不合需要。)使用未组织的边界体元列表(它服从很少的数学假定),这种内部/外部区分是很难的。此外,它并不便利地涉及以任何标准方式产生的被分成三角形的表面。在表面表示之间的切换可以是开发它们的优点的有用方式。(作为一种模拟,测试元素(x,y,z)是否在圆柱x2+y2≤4的体积内部会要求很少的这种形式的计算,而在极坐标系中使用映射(2cosθ,2sinθ,l)表达完全相同的圆柱会产生任何一对(θ,l)所对应的圆柱表面上的(x,y,z)坐标,并且因此在将这种圆柱表面画成多点的网格时更为方便。)

发明内容
提出了一种为三维数据集的任意数据段创建表面的系统和方法。在根据本发明的示例性实施例中,该方法包括首先标识该数据段的一组表面体元。针对该集合中的各个体元,获得了关于它相邻的哪些位于体元内部的信息,并且使用这些结果确定用于划分体元的多边形表面的位置和方向。通过将所有的多边形表面相连,便获得了该表面。在根据本发明的示例性实施例中,多边形表面可以包括三角形。在根据本发明的示例性实施例中,该表面可以以线框模式或固体模式来显示。在根据本发明的示例性实施例中,可以实现网格减少以便减少最终表面中多边形的数目。在本发明的示例性实施例中,可以计算由网格表面所围的体积。另外,如果所产生的网格表面是不闭合的,例如当被分段的物体已经在产生网格表面之前被切削,那么它内部的任何“孔”都可以用网格来闭合,然后便可以计算体积。



图1示出了用圆圈围起来的示例性二维区域,通过简单地数被围住的格点该区域的测量偏差大约在10%左右; 图2示出了根据本发明的示例性实施例在二维表面中的缺口以及相邻体元表面的细分状况; 图3是根据本发明的示例性实施例的示例性流程; 图4A示出了示例性的三维数据集体元及其26个近邻; 图4B示出了图4A的体元的6个直接的近邻; 图5示出了根据本发明示例性实施例的示例性内部体元; 图6示出了点集“内部”的二维概念; 图7描绘了根据本发明的示例性实施例的二维示例性图案,通过这些图案候选的边界元素可以具有在为其构建表面的集合内部和外部的近邻; 图8以二维和三维的形式示出了针对正方形侧面的标记方案及其在指定边界方面的示例性应用,这些边界对应于相邻像素或体元的特定图案; 图9根据本发明的示例性实施例描绘了示例性的表面体元分段,其中体元左边直接的近邻是在数据段的内部; 图10根据本发明的示例性实施例描绘了示例性的表面体元分段,其中体元左边直接的近邻和底部直接的近邻都在数据段的内部; 图11根据本发明的示例性实施例描绘了用于体元的示例性边标记方案; 图12根据本发明的示例性实施例以三维的方式描绘了示例性的体元表面“凹槽”结构; 图13根据本发明的示例性实施例描绘了图12的凹槽结构的示例性再填充; 图14根据本发明的示例性实施例描绘了细分; 图15根据本发明的示例性实施例描绘了插值; 图16-41描绘了根据本发明示例性实施例的方法所产生的各种示例性表面; 图42根据本发明的示例性实施例描绘了在没有减少网格的情况下所产生的示例性固体模式表面; 图43根据本发明的示例性实施例描绘了在表面体元以内的示例性顶点; 图44根据本发明的示例性实施例示出了合并的至高点; 图45根据本发明的示例性实施例描绘了作为提出的顶点合并的结果到三角形的法线向量的反转; 图46根据本发明的示例性实施例描绘了“薄”的三角形; 图47根据本发明的示例性实施例描绘了两个相邻的顶点的合并; 图48根据本发明的示例性实施例描绘了示例性的边界顶点; 图49-50根据本发明的示例性实施例描绘了某一表面的示例性细分区域; 图51-52根据本发明的示例性实施例描绘了从细分过程中产生的除去的顶点; 图53和54示出了根据本发明的示例性实施例要在网格减少的过程中考虑的某些特殊情形; 图55到63根据本发明的示例性实施例示出了孔闭合和体积测量;以及 图64根据本发明的示例性实施例描绘了用于下文提供的示例性的详细伪代码的假定和定向定义。

具体实施例方式 本发明涉及一种构造体元表面完全包住三维数据集的任意数据段的系统和方法。体元表面是一组含表面体元的元素以及一些附加的满足某些数学假定的数据。该体元表面构造的数据结构和属性允许进一步构造网格表面,其三角形或其它多边形严格位于体元表面的单独体元之内(对于内部体元,不同于被体元表面围绕),其三角形计数与Marching Cubes所获得的相似。该构造用相连的且简单相连的表面与各体元交叉为了使这可行,某些体元必须被细分或(通常不太像这样)“被填充”以变为数据段的体元而非表面。
该网格表面与体元表面共享将后者之内的点与其外部的点分开的特性,因为内部点和外部点之间的任何连续路径必须与网格的多个三角形中的至少一个相交。对于任何点(x,y,z),离网格表面的距离和离体元表面的距离(定义为从该点到体元中心的最小距离,该体元是体元表面的一个元素)是在其离网格表面的距离(定义为从该点到网格表面三角形的一点的最小距离)的体元直径的一半以内。由此协调很好地使用这两个表面模型,在方便的时候改变模型。
网格表面可以呈现到用户的视野中,或通过本领域一般技术人员所熟知的手段呈现到力反馈触摸感应中。体元表面可以通过各种手段来呈现,比如,“splatting”(例如,参阅P.Schroeder和J.B.Salem的“Fast Rotation of VolumeData on Data Parallel Architecture”,proceedings of Visualization 91,SanDiego,CA,50-57,1991年10月;K.Mueller和R.Yagel的“Fast Perspective VolumeRendering with Splatting by Utilizing a Ray-Driven Approach”,Proceedings 1996Symposium on Volume Visualization,San Francisco,CA,1996年9月,第65-72页),其计算时间的花费正比于体元造型的数目通常,在这种情况下,比全部扫描少许多。既然表面体元的数目通常小于相应表面网格中三角形的数目的一半,那么这可以产生更快的物体显示。
在示例性实施例中,快速算法可确定点(x,y,z)在体元表面的内部还是外部沿(比方说)x方向步进直到与表面的体元相交(与和三角形相交相比,更快的测试条件),基于此该表面的数据结构给出非常快速的决定,该决定关于到达的步进是来自内部还是外部。修改体积数据的用户相互作用(比如编辑或模拟演练)可以只基于体元表面,从而要求存储器中更少的数据并能够启用更高的性能。
体元表面可以被用于修改来自原始体积位图中的体元数值,从而创建一个使表面在显示器中看起来不同的版本。例如,来自照片的颜色数值可以被投射到这些点,所以呈现出哪一个揭示内部或横截面信息的相同体积(比如,大脑或骨骼结构)可以以自然颜色来显示皮肤,而不必具有单独地显示网格表面的性能成本。当这与形状变化组合起来时,比如在计划好的整容手术中,结果可以被更好地视觉化。
1.假设和术语 为便于说明,假定以三元组(i,j,k)作索引的体元的矩形格子,其中i,j,k都是整数,0≤i≤L,0≤j≤M,0≤k≤N。i=0或L、j=0或M、或k=0或N时的元素被称为格子的边界元素。下面描述中的许多点都是很容易地由模拟的两维情况所促成的,其中相应的结构是由整数对(i,j)标记的像素(或像元)格子。尽管在二维情况下构建边界曲线比在三维情况下构建边界表面要明显简单许多,但是根据本发明示例性实施例的方法的逻辑可以应用于任何维度。由此,本领域一般技术人员可以将边界超曲面的构造延伸到四维或更高的维度。(例如,通过变化的系统的连续扫描可以产生典型的四维数据集,并用整数四元组(i,j,k,t)来标记,该四元组标识了某一数值所指代的位置和时间。)一般讲来,当不管维度而宣称为真时,像素、体元及其更高维度的类似值有时在此被称为元素。
在所有三个维度上等距间隔的格子中,与轴平行的格子步长可以方便地选为长度单位。一个体元具有六个近邻,它们的中心到其自身的距离为1,其周围的体元与该体元共享一个面;12个距离为_的近邻,其周围的体元与它共享一个边;以及8个距离为_的近邻,其周围的体元与它只共享一个隅角。通过用其周围的元素(像素、体元或其更高维度的类似值)识别格点,它们因此可被分别称作格点或元素的面近邻、边近邻和隅角近邻。所有这些都是相邻的。该元素的两个近邻是相对的,如果连接它们的线穿过该元素的话。(由此可以得出,一对相反的近邻必须是相同类型的近邻面、边、或隅角。) 2.细分 当不确定在哪儿放多边形表面以便将其分段为物体的大概边界时,便有必要对体元进行细分。参照图2,内部体元的暗灰区域231因其内部的凹槽结构使得很难用多边形表面(因此是非曲形的分段表面)分段各个位于凹槽“内部”的外部体元并保护物体表面的缺口。如下文更为全面的展开,这是因为在其附近的元素集合230内凹槽内两个所描述的体元在y方向的两侧各自具有内部体元近邻,从而导致模糊的结果。这是因为,在分段系统(其中安置物体边界以便在相邻的内部体元(231)和相邻的外部体元(图2中白色的体元)之间切割体元表面(灰色体元230)一半)中,对于物体231的“凹槽”中的体元表面体元,没有任何地方可放置物体边界。没有任何体元是一个相邻面为内部体元而另一个为外部体元。
在根据本发明的示例性实施例中,各种应对这种困难的手段都是可以获得的。一种手段是将各个n维元素细分为2n个较小的元素(四个更小的像素对应一个像素,八个更小的体元对应一个体元,等等)。通过这种技术使体元路径241成为可能。(注意到,“相邻面”的定义现在必须包括大小不等的元素的情形。)此处,各新的体元具有内部和外部的近邻。内部近邻是暗物体231的元素并且外部近邻是被细分的凹槽体元之一。边沿可以横跨各凹槽体元241,由此保护了物体的实际边界。通过细分各个模糊的凹槽体元,细分过程有效地将表面体元230的情况转变为220的情况。或者,产生困难的元素可以被例如“填充”,并且这可以简单地消除模糊。体元路径250围绕着区域231的放大版本251,并可以很容易被分段。注意到,如果某一元素没有位于数据段中则该元素会产生困难,并且在数据段中的近邻的集合在两个不接触的区域中接触该元素(和具有一个体元宽的“凹槽”和“腔”的物体的情况相类似,比如图2中的231)。将这种模糊的元素移到数据段中可以使之前简单的元素具有该问题属性,所以“填充”必须是递归的。下面描述的构造通过使用体元数值进行插值从而沿立方体边放置表面最高点,这些体元数值只有在当所有的内部体元具有阈值T以上的数值时才能正确地发挥其作用,所以填充必须分配新数值给体元同时对它们重新归类。在根据本发明的示例性实施例中,数值T+ε(其中ε是小增量)给出很好的结果。或者,例如,如果相邻的内部元素的平均值在T+ε之上,则可以使用例如该平均值。
既然数据段的填充可以导致令人不可接受的结构细节损耗(像通过阻挡一个元素宽的通道那样,成像物体中的流质可以沿该通道流动),那么在根据本发明的示例性实施例中便可以使用细分过程。在大于一维的任何维度中,任意元素集的相邻集合可能无法构成通过使用标准几何计算方法而很容易创建的表面,所以这些修改中的一个或其它是可以应用的。
如图3所示,可以以不止一种方式来执行细分。在301(其中导入了扫描数据)和302(其中将元素归类为输入或输出)之后,为构建路径(比如,参照图2的241)或其n维的模拟值(像参照图2的260中的那样),在303处,例如,所有的元素都可以被细分,并且在304处,例如,根据它们细分的那些元素可以将新的一些标记为输出或输入即,通过整除(忽略余数)每一个新的(i,j,k)对应于旧的(i/2,j/2,k/2),在其他维度中也是类似的情形。循环305完成该逻辑,之后,在307处,例如,可以像下文描述的那样在具有或不具有306的情况下创建网格表面,306用于明白地将它位于其中的体元表面构建为数据对象。不过,因为三维中的细分过程使三角计数变为例如四倍,所以将元素合并成较大的元素可能是有用的,这在构建本发明的示例性实施例中是可用选项。一个简单的方式是在310处将它们标记为合并过的,同时不影响放大的阵列结构,跳过具有任何奇数坐标元素的标记元素,并将完全偶数的那些看作它们好像是原始的样子。注意到,放大的阵列仍然占据原始的存储的2n倍,所以当存储器是有限的资源时,较佳的做法是,例如,通过多种已知的技术,构建出一种数据结构,该数据结构只为细分的元素分配另外的存储空间,该数据结构与指向它们的原点的指针相连。
在根据本发明的其它示例性实施例中,作为在分段和未分段元素之间区分的替代,元素合并阶段310可以忽略,并且当用2n倍更大的阵列(在三维中是8倍更大)作为只具有简单元素的数据集时,示例性系统可以更简单地运作。既然在三维中这可以产生四倍多的三角形,在308处在原始元素之内合并三角形很可能是有用的,或许包括上述的网格减少算法以进一步减少三角形的数目,这在309处输出最后的表面之前。
3.表面结构 将元素集G的一段指定为内部元素的集合I(在体元之内)和其外部元素的补集O=G-I,根据本发明的示例性实施例,可以构建出体元表面∑。为了清晰起见,此处描述了初始完成细分的情形所对应的方法,尽管在许多情况下它可能不是最有效的。其它实现方式将作为它的修改被最佳的理解。
在本发明的示例性实施例中,例如,候选栈C可以被创建成包含O中每一个与I中的元素相邻(任何类型的面、边或隅角近邻)的元素。这些可以作为(i,j,k)数值的简单列表加以存储,作为特定(i,j)给出的各行元素的行程编码加以存储,或者通过本领域一般技术人员所知的手段加以存储。该过程可以以若干种方式实现。例如,第一种方式是在体积位图中对所有的(i,j,k)进行迭代,并为每一个体元确定(i,j,k)是否在该片段之外并由此确定用在C中的候选值,然后,确定它是否具有内部的近邻。第二种方式是例如选择应该在C中的“种子元素”,测试其近邻并将属于那里的那些添加到C,测试这些添加的近邻,并以这种方式不断地递归。在下面描述的其它处理步骤之后,这产生了相连的表面,用于围住该片段的一部分或围住其中的腔被围住的片段的这一部分接着也相连了,除非它包括一个腔和在该腔之内不相连的组件。
表格1列出了示例性的变量,这些变量可以用于二维情况。表格1提供了变量ei-、ei+、ej-和ej+的意义,并示出了用于收集相邻体元信息的示例性模式。在二维情况下,当然,相邻的像素信息是被收集的东西。例如,该信息可以被用于确定像素边界的形状、方向和位置以估计被扫描的物体的边界,该物体被假定为含在分段的像素中。
表格1-示例性的二维近邻信息变量 下面将描述的是将该想法延伸到三维或更高维度。在实际物体与通过扫描数据的分段而获得的内部体元集合之间,有一种张力。因为扫描误差和分辨率的局限,它们通常不是空间上完全相同的。根据分段规则是“自由的”(更具包容性)且被包括的体元跨骑实际物体的边界,还是“有限的”(限制的,只包括那些确定在实际物体之内的体元),实际的物体可以整个处于该片段之内或可以延伸超过它。
注意到,这里通常假定内部体元(由示例性的阈值或片段所确定的)实际上并不包含物体的实际边界。该假设等价于声称,保守地设置阈值使得实际的物体包含但不超越内部体元的集合中的一些或全部,并且边界(插值的或实际的)将在表面体元之内,或者在那些被标记为片段外部但具有作为内部体元的相邻体元的那些体元之内。或者,本发明也覆盖这样一些情况,其中自由设置阈值,使得内部体元整体包含它们之内的实际物体的实际边界,并且物体的边界(插值的或实际的)将在内部体元之内(通常,在最外层之内)。在下面的讨论中,指定这些情况,f或T的符号反转将应用于这种“自由的”阈值,其中内部体元被实际地分割,以产生与外部表面体元相对置的表面。无论哪种情形,这些体元都被分割以便估计实际物体的实际边界出现在虚拟体元环境中的哪里。
在本发明的示例性实施例中,为构建与给定阈值相关的表面,(i)包含该表面的那些体元必须首先被找到。然后(ii)那些体元内的表面形状必须被确定。最后,(iii)只有该表面的周长与那些体元的边和面相交的地方才需要被计算。下面的描述包括所有这些任务。
(1)体元表面 在本发明的示例性实施例中,有两种方式找出那些包含表面的体元。例如,首先是在体积数据中遍历每一个体元。根据体元数值,可将它标记为内部体元或外部体元。当且仅当一个外部体元具有至少一个内部近邻时,它才被假定为体元表面的元素(即,如同包含——表面)。这种被定义为表面体元的体元是那些被假定为被表面穿透(即包含)的体元。
另一个示例性方法是使用例如种子点来提取体元表面。种子应该是这样一种表面体元,其六个直接的近邻包括一个内部体元、两个不相反的内部体元、或三个中没有哪两个是相反的三个内部体元。对于每一个表面体元,有必要检查其26个近邻以找出新的表面体元。然后,也可以检查每一个新的表面体元的26个近邻。该过程可以继续,直到各表面体元的26个近邻都已经检查好了。
第一种方法可以在体积数据中找出每一个物体的表面。不过,它经常需要更多的时间,因为它需要处理整个体积。第二种方法通常稍微快了点,但是当这些物体的距离比两个体元尺寸要大的时候,它有时候无法找到所有物体的表面。
上面的描述说到了三维的情形。对于模拟二维情形,可以用像素来替代体元,并且可以用曲线替代表面。
(2)获得各个表面体元所对应的直接近邻信息 在本发明的示例性实施例中,一旦找到表面体元的集合,就可以收集用于各表面体元的直接近邻信息。直接近邻信息追踪表面体元的哪些近邻是在物体的内部或是“内部体元”。给定体元的直接近邻是与该体元共享一个完整面的体元。由此,各体元具有六个直接的近邻体元。
为记录表面体元的直接近邻信息,例如,可以为各个表面体元分配暂时的布尔变量。这些暂时的布尔变量可以接着被用于下一步以计算在表面体元内的表面的形状信息。由此,针对每一个表面体元,可以计算其布尔变量。
表格3列出了示例性的变量,这些变量可以例如用在该步骤中的三维情形中。表格3提供了变量ei-、ei+、ej-、ej+、ek-、ek+、ε的意义。在示例性的实施例中,变量ei-、ei+、ej-、ej+、ek-、ek+、ε可以初始化为假。
表格3用于存储直接近邻信息的示例性变量 以解释说明为目的,假定目前正在被处理的体元是体元14——一个表面体元。如图14所描绘的示例所示,体元14具有六个直接的近邻,它们是体元13、15、17、11、5和23。
暂时的布尔变量的示例性的计算可以像下述那样 a)如果左边近邻13在内部,将ei-设为真; b)如果右边近邻15在内部,将ei+设为真; c)如果底部近邻17在内部,将ej-设为真; d)如果顶部近邻11在内部,将ej+设为真; e)如果背面近邻5在内部,将ek-设为真; f)如果前面近邻23在内部,将ek+设为真;并且 g)如果13、15、17、11、5或23中的任何一个是内部体元,将ε设为真,即ε=ei-|ei+|ej-|ej+|ek-|ek+,其中“|”意味着“或”,ε跟踪给定体元(在这种情况下,体元14)的任何直接近邻是否是内部体元。
例如,通过使用图5所描绘的体元片段,在插入上述示例性计算之后,可以获得针对体元4、5、8、13、14、17、22、23和26(只有这些体元被呈现出来,因为所描绘的3×3体积中的剩余15个体元是微不足道的,它们不具有任何直接相邻的内部体元)的下述结果 表格5-作为内部体元信息的直接近邻 (空白=假) 在下面的表格6中罗列了给定体元所对应的所有可能的直接近邻的情况。对应于表格6中的每一条,附录I提供了每种情况所对应的图示描述,并示出了这些数值e和e作为给定体元的直接近邻的函数是如何被计算的。在附录I中,内部体元是暗的,外部体元是亮的。
表格6作为内部体元的体元的直接近邻所对应的所有可能的情况。
注意到,尽管情况6-1明显是指内部体元并由此不是背面体元集合的一员,但是它被保留了,因为在本发明示例性实施例中的一些实施中,与将它排斥在处理循环以外相比,检查该情况是更有效的。
(3)在表面体元内插值表面的形状信息 暂时的直接近邻布尔变量并不严格地包含足够的信息来构建出具有良好的连接性的表面。例如,在图5中,假定只有体元16在内部。尽管体元13和17内的表面的形状信息是已知的,但是关于体元14却什么都不知道,所以很难在13内用17内的信息来连接表面。这是因为既然它没有任何直接的近邻,那么它就没有e或e值;不过,它具有一个在体元16中的间接近邻,所以该表面应该超越体元14较低的左边隅角(与如何通过表面放置边界的方式相似,图2中的体元201将会超越体元4的底部右边的隅角、体元5顶部左边的隅角以及体元6底部右边的隅角,因为其内部体元的物体在图2的第一框架中的格子的底部右边隅角中)。事实上,在附录III、情况3、页面3中,提供了在这种情况下分割体元14的正确表面。因此需要做的是像下面所描述的那样在相邻的表面体元中共享这种边界信息。
由此,如以下表格7所示,可以针对每一个表面体元定义新的示例性变量,来记录其原始近邻信息以及由其近邻体元与该体元所共享的信息。在本发明示例性的实施例中,例如,布尔变量可初始化为假,整数变量可以初始化为0。


表格7-用于存储近邻信息的示例性变量 注意到,表面体元和内部体元之间共享的面将永远不会被该表面切割,该表面的四条边也永远不会被该表面切割。如上所述,这是因为为了成为表面体元,物体的某个部分必须被假定为被包含在它之中。由此,该表面被假定为穿过表面体元。(或者,为了自由阈值,如上所述,物体边缘被假定为最外围的内部体元之内的某处,并且它穿过那些内部体元但是并不在任何体元边界上)。
例如,如图5所示,假定当前被处理的体元是体元14(i,j,k)——一个表面体元(因为它具有内部近邻-边近邻16和两个隅角近邻25和7)。例如,可以像下面那样为体元14计算表格7中定义的变量 如果ei-(i,j,k)为真, 则将fi-(i,j,k)设为真; 下面的四个条件是用于体元14的面近邻5(i,j,k-1)、23(i,j,k+1)、11(i,j+1,k)和17(i,j-1,k)的。其它两个面近邻13(i-1,j,k)和15(i+1,j,k)将永远不会将其ei-和ei+信息共享给14,因为它们与14共享的面垂直于i方向,因此它们具有的任何ei-和ei+信息都是用于体元14的3×3近邻外部的那些体元的。这4个条件保证,近邻5、23、11、17内的表面将连续地将该表面与14相连。例如,如果5的前表面被该表面切割,则下面的第一条件将把该信息传递给14,这将导致体元14的背面也将被该表面切割。
另外,如果ei-(i,j-1,k)为真, 则将fi-(i,j,k)设为真;(测试体元17) 另外,如果ei-(i,j+1,k)为真, 则将fi-(i,j,k)设为真;(测试体元11) 另外,如果ei-(i,j,k-1)为真, 则将fi-(i,j,k)设为真;(测试体元5) 另外,如果ei-(i,j,k+1)为真, 则将fi-(i,j,k)设为真; (测试体元23) 下面4个条件是用于边近邻2(i,j+1,k-1)、8(i,j-1,k-1)、20(i,j+1,k+1)和26(i,j-1,k+1),因为它们与14共享的边平行于i方向。(图11提供了在下面使用的边标记命名)。针对近邻8(它与14共享其边D),如果其ei-值为真,则有可能将该信息共享给14的fi-数值。如果8的ej+为真,这意味着体元5是内部体元,所以该边指示8的边D将不会被该表面切割,信息共享不是必要的并且由此将不再发生。相似的是,如果8的ek+为真,则信息共享将不发生。
另外,如果ei-(i,j-1,k-1)为真,并且ej+(i,j-1,k-1)是假,并且ek+(i,j-1,k-1)是假,则将fi-(i,j,k)设置为真; 另外,如果ei-(i,j-1,k+1)为真,并且ej+(i,j-1,k+1)是假,并且ek-(i,j-1,k+1)是假,则将fi-(i,j,k)设置为真; 另外,如果ei-(i,j+1,k+1)为真,并且ej-(i,j+1,k+1)是假,并且ek-(i,j+1,k+1)是假,则将fi-(i,j,k)设置为真; 另外,如果ei-(i,j+1,k-1)为真,并且ej-(i,j+1,k-1)是假,并且ek+(i,j+1,k-1)是假,则将fi-(i,j,k)设置为真; 另外; 可以用下面单个公式来总结上述条件。
方程1 fi-(i,j,k)=ei-(i,j,k) ‖ei-(i,j-1,k)‖ei-(i,j+1,k)‖ei-(i,j,k-1)‖ei-(i,j,k+1) ‖((ej+(i,j-1,k-1)=false)&&(ek+(i,j-1,k-1)=false)&&(ei-(i,j-1,k-1))) ‖((ej+(i,j-1,k+1)=false)&&(ek-(i,j-1,k+1)=false)&&(ei-(i,j-1,k+1))) ‖((ej-(i,j+1,k-1)=false)&&(ek+(i,j+1,k-1)=false)&&(ei-(i,j+1,k-1))) ‖((ej-(i,j+1,k+1)=false)&&(ek-(i,j+1,k+1)=false)&&(ei-(i,j+1,k+1))) 并且同样用于fi+(i,j,k)、fj-(i,j,k)、fj+(i,j,k)、fk-(i,j,k)和fk+(i,j,k) 方程2 fi+(i,j,k)=ei+(i,j,k) ‖ei+(i,j-1,k)‖ei+(i,j+1,k)‖ei+(i,j,k-1)‖ei+(i,j,k+1) ‖((ej+(i,j-1,k-1)=false)&&(ek+(i,j-1,k-1)=false)&&(ei+(i,j-1,k-1))) ‖((ej+(i,j-1,k+1)=false)&&(ek-(i,j-1,k+1)=false)&&(ei+(i,j-1,k+1))) ‖((ej-(i,j+1,k-1)=false)&&(ek+(i,j+1,k-1)=false)&&(ei+(i,j+1,k-1))) ‖((ej-(i,j+1,k+1)=false)&&(ek-(i,j+1,k+1)=false)&&(ei+(i,j+1,k+1))) 方程3 fj-(i,j,k)=ej-(i,j,k) ‖ej-(i-1,j,k)‖ej-(i+1,j,k)‖ej-(i,j,k-1)‖ej-(i,j,k+1) ‖((ei+(i-1,j,k-1)=false)&&(ek+(i-1,j,k-1)=false)&&(ej-(i-1,j,k-1))) ‖((ei+(i-1,j,k+1)=false)&&(ek-(i-1,j,k+1)=false)&&(ej-(i-1,j,k+1))) ‖((ei-(i+1,j,k-1)=false)&&(ek+(i+1,j,k-1)=false)&&(ej-(i+1,j,k-1))) ‖((ei-(i+1,j,k+1)=false)&&(ek-(i+1,j,k+1)=false)&&(ej-(i+1,j,k+1))) 方程4 fj+(i,j,k)=ej+(i,j,k) ‖ej+(i-1,j,k)‖ej+(i+1,j,k)‖ej+(i,j,k-1)‖ej+(i,j,k+1) ‖((ei+(i-1,j,k-1)=false)&&(ek+(i-1,j,k-1)=false)&&(ej+(i-1,j,k-1))) ‖((ei+(i-1,j,k+1)=false)&&(ek-(i-1,j,k+1)=false)&&(ej+(i-1,j,k+1))) ‖((ei-(i+1,j,k-1)=false)&&(ek+(i+1,j,k-1)=false)&&(ej+(i+1,j,k-1))) ‖((ei-(i+1,j,k+1)=false)&&(ek-(i+1,j,k+1)=false)&&(ej+(i+1,j,k+1))) 方程5 fk-(i,j,k)=ek-(i,j,k) ‖ek-(i-1,j,k)‖ek-(i+1,j,k)‖ek-(i,j-1,k)‖ek-(i,j+1,k) ‖((ei+(i-1,j-1,k)=false)&&(ej+(i-1,j-1,k)=false)&&(ek-(i-1,j-1,k))) ‖((ei+(i-1,j+1,k)=false)&&(ej-(i-1,j+1,k)=false)&&(ek-(i-1,j+1,k))) ‖((ei-(i+1,j-1,k)=false)&&(ej+(i+1,j-1,k)=false)&&(ek-(i+1,j-1,k))) ‖((ei-(i+1,j+1,k)=false)&&(ej-(i+1,j-1,k)=false)&&(ek-(i+1,j+1,k))) 方程6 fk+(i,j,k)=ek+(i,j,k) ‖ek+(i-1,j,k)‖ek+(i+1,j,k)‖ek+(i,j-1,k)‖ek+(i,j+1,k) ‖(ei+(i-1,j-1,k)=false)&&(ej+(i-1,j-1,k)=false)&&(ek+(i-1,j-1,k))) ‖((ei+(i-1,j+1,k)=false)&&(ej-(i-1,j+1,k)=false)&&(ek+(i-1,j+1,k))) ‖((ei-(i+1,j-1,k)=false)&&(ej+(i+1,j-1,k)=false)&&(ek+(i+1,j-1,k))) ‖((ei-(i+1,j+1,k)=false)&&(ej-(i+1,j-1,k)=false)&&(ek+(i+1,j+1,k))) 针对表格7中的数值

它们指出面近邻的数目,从中ei-或ei+为真并且延伸到当前的体元数值fi-或fi+。例如,可以按下面那样来计算 1)如果fi-(i,j,k)且fi+(i,j,k)为真,或者fi-(i,j,k)和fi+(i,j,k)为真,或者fi-(i,j,k)和fi+(i,j,k)为真,则没有必要计算εi(i,j,k),εj(i,j,k),εk(i,j,k),因为体元(i,j,k)需要后处理。
2)如果ei-(i,j,k)为真,或者ei+(i,j,k)为真,则将εi(i,j,k)设为0;否则,如果fi-(i,j,k)为真,则在ei-(i,j-1,k),ei-(i,j+1,k),ei-(i,j,k-1)和ei-(i,j,k+1)中计算真值的数目,将该数目设为εi(i,j,k); 否则,如果fi+(i,j,k)为真,则在ei+(i,j-1,k),ei+(i,j+1,k),ei+(i,j,k-1)和ei+(i,j,k+1)中计算真值的数目,将该数目设为εi(i,j,k); 否则,将εi(i,j,k)设为0。
用于εj(i,j,k)和εk(i,j,k)的值可以用相似的方式来计算。例如,如图5所示,在上述处理之后,可以获得表格8 表格8 如下文所述,在不考虑需要后处理的情况下,所有可能的情况都总结在下面的表格9中。
表格9 表格9中所含的信息足够构建出多边的表面。在本发明的示例性实施例中,为使表格9中呈现的数据更便于在各种编程语言中实现,例如,可以像下面这样定义三个新的布尔变量 εi=(ei-‖ei+)‖(εi==2) εj=(ej-‖ej+)‖(εj==2) εk=(ek-‖ek+)‖(εk==2) 以替代εi,εj,εk。例如,实现该技术可导致表格10。
表格10 表格10中的最后一列定义了各个情形所对应的示例性表面形状。附录II提供了表格10中所罗列的每一种情况所对应的该表面的图示描述。
通过使用表格10中示例性的10个布尔变量,便可以确定表面体元内部分表面是如何被配置的。例如,对于图9中1-1的情况,因为ε为真,并且fi-为真,则已知体元内的表面的法线只具有i+方向元素并切割那些平行于i方向的边。图9给出了如何使用这些三角形的一个方案,例如,使部分表面分成三角形。在图10的另一个示例中,表格9中2-1的情况下,因为ε,fi-和fj-为真,所以已知该体元内表面的法线具有i+方向元素和j+方向元素,并且左边和底部的面与内部体元共享,它不能被切割。所以如图10所示,顶部和右边的面被切割。
4.后处理 对于表面体元,如果fi-和fi+为真,或fj-和fj+为真,或fk-和fk+为真,则该体元被认作是不明确的体元,参照图2上文中对此描述过。这意味着根据目前可以获得的该体元的信息,不可能确定该表面如何应该穿过该体元。针对这种类型的体元,后处理可以例如提供一种解决方式。图12描绘了一种需要后处理的示例性情形,因为体元5、14和23是模糊的(没有任何方法可用多边的表面来划分这些体元,所以该体元的一部分是“内部的”并且一部分是在外部。假定“内部的”近邻在各个侧面,两个侧面(左边和右边)都将被期望位于该表面的“内部”。这是上文参照图2所描述的凹槽结构。
表格11示出了在步骤1、2、3和4都已执行之后布尔变量的示例性数值。在本示例中,体元5、14、23、2、11和20需要被后处理。
表格11 在根据本发明的示例性实施例中,可以以两种方式实现后处理。例如,第一种是再填充,它将模糊的体元改变为内部体元。图13示出了当体元5、14和23被标记为内部体元时所发生的情况。没有模糊的体元出现。通常,在实现该功能的过程中,其ε数值为真的那些模糊体元被再填充。然而,在图12所描绘的示例中,简单地再填充体元2、11、20将不会解决该问题。当体元被再填充时,必须重新计算在再填充的体元周围一个小的5×5×5体积,因为再填充的体元将影响其26个近邻的变量值。
另一个示例性的方法是细分,如同上文参照图2中二维情况所介绍的那样,特别是体元230被细分以产生体元241和261。细分的基本思想是,模糊体元周围3×3×3体积的每一个体元都可以被分成八个相等的部分。图14示出了图12的示例体元的示例性细分过程。每一个子体元都具有与其“父母”相同强度的数值。如果原始体元是外部体元,则它的八个子体元全部都是外部子体元。在细分之后,可以看到非常有趣的现象。如图14所示,图12中模糊的体元14可以例如被分成八个部分,即14-1、14-2、14-3、14-4、14-5、14-6、14-7和14-8。当新的6×6×6体积被处理并且计算用于体元14-1的e值时,只应该考虑其直接近邻中的三个,即5-5、11-3和13-2,而其它三个14-2、14-3和14-5是其“兄弟”。此外,体元14-1永远无法从其面近邻和边近邻中获得关于i+,j+,和k+的共享信息。例如,这可以保证在细分之后不会再出现任何模糊的体元了。
例如,根据方程2,可以由ei+(14-1),ei+(14-3),ei+(14-5),ei+(5-5),ei+(11-3),ei+(5-7),ei+(2-7),ei+(11-7),ei+(14-7)来决定体元14-1的fi+。以上所有这些值总是为假,因为它们右边直接的近邻是它们的“兄弟”(即,“源自”相同的原始体元),并且由此具有与它们相同的强度。所以体元14-1的fi+将会总是为假。
下面的表格12列出了如图14所示的体元14的细分结果。14的八个“孩子”全都不再是模糊的了。
表格12 5.顶点位置 几何点的选择可以用各种方式来实现,比如总是将该点放在边的中间点,或沿着该边调节它以便使所产生的表面的平滑度最大化。为实现可获得数据的地方不仅包括划分出的“内部”和“外部”元素,还包括用于将它们进行分类的的元素和阈值电平处的数值(如果这是用于分类的基础),在较佳的示例性实现过程中,根据由作为样本的元素值f以及阈值T(在T上元素被分类为“内部”)所代表的物理量的插值来放置它。(下面的讨论也覆盖了这样的情形,其中通过反转f和T的符号,“内部”意味着“在阈值以下”。)具体来讲,这些点按如下来放置。
如图15所示,需要选择沿表面体元8的边D的一个点。很明显,体元2、5、11是表面体元,它与体元8共享一条边。假定某一元素处的物理数值接近扫描物理量的元素平均值,大多数扫描物理量的值是在Fdense>T附近或Flight<T附近,某一高值表示某一元素的更多应该在上述T区域内部(即使平均起来,它也是在下面),所以划分表面应该更接近元素接触外部的那些面。这些考虑可以反映在各种清晰的公式中,它们对接触边缘的元素值给予加权影响。如图15所示,在i方向上的一边中,描述了与外部元素共享的针对该情形的此类公式的选择。
注意到,下面示例性的方程具有许多优点,其中数据是以二进制方式给出的(在输入中,针对各个元素的内部或外部,而非从标量数值中找出)并且没有任何自然阈值T是可以获得的。进一步注意到 t1=(f9-f8)/(f9-f7) (方程7) t2=(f12-f11)/(f12-f10) (方程8) t3=(f6-f5)/(f6-f4) (方程9) t4=(f3-f2)/(f3-f1) (方程10) t=(t1+t2+t3+t4)/4 (方程11) 注意到,四个方程并不用于每一个插值。如果ti≤0(i=1,2,3,4),正如已知该表面必须在外部体元之内,这种数值可以将该表面移到内部体元中。这种数值将由此永远不会被用于计算插值。例如,最终的t可以是其它数值的平均值。
例如,另一种用于插值的方法是使用阈值T来计算插值。在这之前,必须找出内部近邻。例如图15中所描述的,假定体元3、6、9和12是内部体元,插值例如可以写成 t1=(f9-T)/(f9-f8) (方程12)t2=(f12-T)/(f12-f11)(方程13)t3=(f3-T)/(f3-f2) (方程14)t1=(f6-T)/(f6-f5) (方程15)t=(t1+t2+t3+t4)/4 (方程16) 由此注意到,每一个插值并不要求使用四个方程。
如果ti≤0(i=1,2,3,4),则已知该表面必须是在外部体元之内,这种数值可以将该表面移到内部体元中。这种值将永远不会被用于计算插值。例如,最终的t可以是其它数值的平均值。
如上所述,当实现细分时每一条边被分成两条边。如果共享一条边的所有四个体元是模糊的体元,则沿着该边可以有两个交叉点。对于其它情况,有一个且只有一个可能的交叉点。例如,在图12中,体元11的C边具有两个与表面相交的点(针对此处所用的边命名术语,再一次参照图11)。在图14中细分之后,体元11的边C被分为两个部分-体元11-7和体元11-8中的每一个的边C。在本发明的示例性实施例中,可以根据上述方法计算那两个交叉点。但是针对体元11的边A,因为体元10不是模糊的体元,所以只有一个交叉点。当处理体元10时,可以计算沿体元10的边B的一个交叉点。当处理体元11(它应该按图14所示被细分)时,可以计算沿体元11-7的边A的另一个交叉点。这两个点是不相同的,但是沿该边只有一个交叉点。如果允许表面与这种边交叉两次,则在该结果中可以有许多的孔。有一些可以使用的方法例如将两个交叉点处理成一个。首先,例如是计算平均点。其次,例如是只阻止计算被细分。最后一个仅阻止该计算不被细分。由此,最后一个是在本发明较佳的示例性实施例中实现的,因为它可以例如保持表面的平滑。图14的曲线示出了实现该最后的方法的结果。
示例性表面 图16-41描绘了根据本发明的各种示例性实施例而创建的各种示例性表面。
图16-29描绘了在没有任何网格减少的情况下所产生的示例性表面。在三维交互式数据显示系统中,这些表面是以本发明的示例性实施例的示例性屏幕拍摄来示出的,在这种情况下,运行RadioDexterTM软件的DextroscopeTM都可以从新加坡的Volume Interactions Pte有限公司获得。因此在图16-29中各个描绘的表面的左上侧中提供的多边形计数是很高的。
图16描绘了放大的部分表面(实心模式)和相关的体积。图17以线框模式描绘了图16的放大的部分表面。图18描绘了全部表面(实心模式)和相关体积。图19以线框模式描绘了图17的表面。图20描绘了图18的全部表面的背面图(实心模式)。图21以线框模式描绘了图20的表面。图22以线框模式和全部前视图的方式描绘了图20的表面的前面部分,并且图23是其实心模式的呈现。
图24以线框模式描绘了基准表面(许多在图23等中是可见的),图25是实心模式的相同表面。图26描绘了具有相关联的体积的部分的实心模式的相同基准表面(来自扫描数据的分段物体)。图28添加了具有原始输入体积的示例性表面的线框模式网格以便比较。在本发明示例性的实施例中,针对适合的被选阈值,备用的或自由的并且适合的本发明的实现方法、所产生的网格表面可以经拓扑校正。这在下文有所解释,连同参照表格13所描述的体积测量。图29以实心模式示出了相同的比较。
图30-38描绘了在使用网格减少算法的同时所产生的示例性表面,这在下文中有所描述。由此,总的多边形计数约为原始网格表面的1/3到1/10,这在图的顶部左侧可以看到。
图30以实心模式呈现并使用前面的图描绘了图22的表面。图31与图22相似,但是注意到多边形减少了许多。图32是与图22所描绘的表面相同的图非常相似,但是多边形计数已经从282,396减少到26,577,大于90%的量。图33是图32的表面的实心模式呈现。图34是图24的基准表面的线框模式呈现,其多边形从6235减少到1611。图35和36描绘了该基准表面的线框和实心模式呈现,该基准表面与原始体积数据并列。图37是图34的基准表面的实心模式呈现,图38是图37的放大的版本。
图39-41示出了细分过程。图39以实心模式描绘了具有两个指示的细分区域的全部表面,在左边眼睛上的那一个在发际处或附近(细分区域1),另一个在左边颊骨的顶部附近(细分区域2)。图40和41分别示出了区域1和2的细节,它们是图2的三维模拟项241。图40和41是高度放大的并且清晰地示出了单独的网格三角形。
图42是图23的表面的另一个视图。
参照图16-41可以看出,根据本发明示例性的实施例而创建的表面可以被显示成例如实心表面,其中包括它的多边形中的每一个被填充以便创建实心三维表面,或者例如,它可以被显示成“线框”表面,用于只描绘包括整体表面的多边形表面的边。
注意到,为了使复杂性最小化,可以使用网格减少以减少显示表面所需的多边形的数目。根据已知的技术,可以实现网格减少。另外,例如,使用下面的技术可以实现网格减少 网格减少 根据发明人进行的实验,对于256×256×256的CT数据集而言,根据本发明的方法而创建的网格表面可以具有多于200,000个三角形。由此,很难将这种网格物体用于实时用户交互,因为实时呈现这种物体必需大量三角形和大量计算要求。因此,在本发明的示例性实施例中,可以将三角形数目减小到一个较低的水平。不过,如果三角形数目被减小了,则可能损失一些精确度。由此,很重要的是,当实现网格减少时要使精确度损失最小化。在本发明的示例性实施例中,可以按下面那样实现网格减少。
1)使表面平滑 根据本发明通过分割体元而产生的表面试图将每一个内部体元包括在它自身之中。结果,该表面变得有点参差不齐。如图42所示,该结果有点像数字化之后的形状。为减少更多的三角形,最好使该表面平滑。
下面示例性的定义可以用于示例性的实现方式中 近邻对于顶点a(xa,ya,za),当且仅当线ai是该表面中的一个或不止一个三角形的一条边时,顶点i(xi,yi,zi)是顶点a的近邻; 近邻数目NumOfNei(i)顶点i的近邻的数目; 近邻三角形如果顶点a(xa,ya,za)是三角形Tri(j)的顶点,则Tri(j)是a的近邻三角形; 近邻三角形数目NumOfNeiTri(i)顶点i的近邻三角形数目; 表面顶点sv(i)如果NumOfNeiTri(i)=NumOfNei(i),则顶点i被定义为表面顶点; 边界顶点bv(i)如果NumOfNeiTri(i)≠NumOfNei(i),则顶点i被定义为表面顶点; 边界顶点近邻NumOfBNei(i)对于边界顶点,它被定义为其近邻中边界近邻的数目。在图48中,顶点a、b、c是边界顶点。顶点b和c是顶点a的边界顶点近邻。
在本发明的示例性实施例中,表面体元sv(a)的新坐标(xnew,ynew,znew)可以根据其旧坐标和其近邻的坐标来使其平滑。
相似的是,在本发明的示例性实施例中,边界体元bv(a)的新坐标(xnew,ynew,znew)可以根据其旧坐标和其边界近邻的坐标来使其平滑。
尽管更多平滑的环可以减少三角形的数目,但是作为结果会损失更多的精确度。因此,在本发明的示例性实施例中,可以在进行多少次平滑处理和保留多少精确度之间达到平衡。根据发明人所进行的实验,如果进行两次平滑处理,则可以获得较好的结果。通常,计算资源和精确度要求将确定在给定示例性实现过程中进行平滑处理的次数。
在大多数情况下,该平滑处理会改变某些表面体元内的顶点位置,所以不会损失太多精确度。如图43所示,a将在表面体元1、2、3和4之内移动。
2)两个顶点的合并 图44示出了根据本发明的示例性实施例两个顶点的合并过程。假定图44中的三角形1、2、3、4和5在三维空间中具有相同的法线矢量,这意味着它们在相同的平面中,通过将顶点a移到b,可以用3、4和5三个三角形来替代上述五个三角形。但并不总是这样。在一些情况下,将顶点移到新的位置可以引起不可预期的结果。例如,在图45中,在将顶点a移到b之后,三角形5的法线矢量反转,并且三角形5和三角形4之间有重叠。
通常,某一顶点附近的三角形并不是在相同的平面中。所期望的是确定作为顶点移动的合理性的测量可以将那些三角形考虑成位于平面之中到什么程度。在本发明的示例性实施例中,这些三角形中的法线差别可以例如被选为参数。法线差别可以由两个三角形的法线矢量之间的角度来表示。在图44中,可以看到,三角形1和2的区域被三角形3、4、5所占据。因此,很重要的是,三角形3、4、5的法线矢量应该和三角形1、2的法线矢量相差不能太大。此处可以定义阈值Tangle。如果法线角度大于Tangle,则应该停止所提到的顶点移动。
为了防止法线矢量反转的发生,如图45所示,在示例性的实施例中,可以计算改变的三角形的法线矢量,以及那些法线矢量之间的角度和它们相邻三角形的角度。如果这种角度中的任何角度大于90度,则应该停止所提到的移动。
在顶点移动过程中,重要的是要避免产生瘦的三角形,如图46中的示例所示。瘦的三角形可以引起体积呈现和变形建模方面的问题。在本发明的示例性实施例中,例如,一个角度小于10度的三角形可以被定义为瘦三角形。
针对图47所示的情况,例如,可以按下面的步骤来实现示例性的处理,以检查顶点a是否可以移至其近邻之一(顶点b) a相同平面测试 针对图47(1)中每一个三角形,计算法线矢量Normal(i); 计算法线矢量Normal(1)和Normal(2)之间的角度AngleBetween(1,2)。
如果AngleBetween(1,2)≥Tangle,则顶点a不能移至顶点b; 如果AngleBetween(1,3)≥Tangle,则顶点a不能移至顶点b; 如果AngleBetween(1,4)≥Tangle,则顶点a不能移至顶点b; 如果AngleBetween(1,5)≥Tangle,则顶点a不能移至顶点b; 如果AngleBetween(2,3)≥Tangle,则顶点a不能移至顶点b; 如果AngleBetween(2,4)≥Tangle,则顶点a不能移至顶点b; 如果AngleBetween(2,5)≥Tangle,则顶点a不能移至顶点b; b瘦三角形测试 为避免瘦三角形,应该检查顶点a附近除那些被移除的以外所有的三角形。假定顶点a要被移至顶点b,则应该计算三角形3、4、5中的每一个的三个角度,因为三个三角形的三个顶点之一从a改变为b。如果这种角度中的任何角度小于用户定义的阈值(例如,10度),则应该停止上文提出的移动。
c法线反转测试 如图47(2)所示,假定顶点a被移至顶点b,为了进行法线反转测试,顶点a附近除那些被移除的以外所有的三角形都应该被检查。在图47(2)中,应该检查三角形3、4、5。对于三角形3、4、5中每一个三角形,应该计算三角形与其邻边之间的法线矢量的角度。
对于三角形3而言 如果AngleBetween(3,8)≥90°,则顶点a不能移至顶点b; 如果AngleBetween(3,9)≥90°,则顶点a不能移至顶点b; 如果AngleBetween(3,4)≥90°,则顶点a不能移至顶点b; 在本发明的示例性实施例中,如果提到的顶点移动通过了所有的上述测试,则该顶点可以被移至其相应的近邻。
d)边界顶点 边界顶点只可能被移至边界顶点近邻。在图48中,顶点a只能够移至其边界顶点近邻b或c。相似的是,上述用于表面顶点的相同平面测试、瘦三角形测试和法线反转测试例如也可以应用于边界顶点移动。另外,在示例性的实施例中,有另一种测试,它应该被应用于边界顶点移动,即边角测试。在图48中,假定顶点a要被移至顶点b。三角形4的面积将被三角形1、2、3所占据。如果顶点a、b和c在相同的线上并且三角形1、2、3、4在相同的平面上,则实现所提到的移动并不会损失任何精确度。
e)边角测试-计算两个边界边的角度。如果该角度大于用户定义的阈值,则应该停止所提到的移动; f)移除细分过程所产生的顶点 有时候真正存在于数据中的某些小特征并不是人们所感兴趣的。那些小特征通常在尺寸上只是一个或一些体元。通常,这些特征出现是因为噪声或数字化。该类型的小特征通常是由细分过程产生的。为了去除这种小特征,可以除去任何细分过程中的那些顶点。例如,该过程应该较佳地在网格减少过程的开始处进行。
在本发明的示例性实施例中,例如,可以定义标准以确定应该放弃哪些特征。该步骤可以根据一组之内的细分过程中的顶点数目来执行。细分过程中的一组顶点可以被定义为细分过程中的最大顶点,其近邻除在该组中的那些近邻以外都只是表面顶点。图49和50示出了被细分的顶点的示例。根据本发明的示例性实施例,图49示出了某一表面的示例性屏幕拍摄,用于表示某一病人头部皮肤的一部分。图中的线条指向包括一些细分顶点的区域。可以看出,该区域是该表面中非常小的特征。图50描绘了该表面的细分部分的放大图,以线框模式示出。
在本发明的示例性实施例中,可以按下文那样来描述一种示例性的过程,以去除通过细分而创建的顶点针对该组中细分过程中的每一个顶点,将它移至其近邻之一,它们必须是表面顶点。
上述过程可以是重复的,例如,直到已经除去了该组中细分过程中所有的顶点。图51示出了该过程的一个示例。顶点a、b、e、i、k和m是细分过程所产生的所有的顶点,而所有其它的都是表面顶点。如果用户预定义的小特征阈值大于例如6,则可以除去那些顶点。图52示出了将顶点a移至d(其表面顶点近邻)的过程中的第一步。相似的处理可以被应用于细分过程中的其它顶点。从图51中可以看出,顶点i原先并不具有任何表面顶点近邻。但是在将顶点a移至d之后,如图52所示,顶点d变为顶点i的表面顶点近邻。
g)特殊情况 通常,表面顶点会与其表面近邻中的一个共享两个不同的近邻顶点。但是有例外。在图53中,例如,顶点a与其表面近邻b共享三个近邻,即g、c和e。如果顶点a被移至b,则可能出现某些无法预期的结果。例如,在图53(2)中(该图的底部框架),示出了将顶点a移至b的结果。顶点b现在具有5个顶点近邻c、d、e、f和g。但是顶点b在其附近具有六个三角形——三角形1、4、5、6、7和8。这对表面顶点而言是不应该发生的。
通常,边界顶点只具有两个边界顶点作为其近邻。但是,图54示出了例外。顶点a具有三个边界顶点近邻。这在上述用于边界顶点的算法中可能引起混淆。
为避免这种特殊的情况,例如,在本发明的示例性实施例中可以实现共享顶点数目检查,情况如下 为了将表面顶点a移至表面顶点b,a必须与表面顶点b共享2个并且只共享2个顶点;并且 为了将边界顶点a移至边界顶点b,a必须与表面b共享2个并只共享2个边界顶点。
孔洞闭合以及体积测量 如果在原始数据中没有任何孔洞,则上述本发明的示例性实施例的方法不会在网格表面中产生任何孔洞。但是有时候当原始数据被剪切了的时候,可能沿剪切边缘会有一些孔洞。当根据本发明示例性的实施例产生的表面被用于测量原始数据的体积时,有必要闭合那些孔洞。
在本发明的示例性实施例中,有两种方法可以用来闭合根据本发明的示例性实施例而产生的三角形网格中的孔洞。
1)第一示例性的方法是向剪切盒子附近被剪切的数据添加六个空的薄片。当把本发明的方法应用于新数据(即,具有六个空的薄片在其周围的剪切数据)以产生网格表面时,所产生的三角形将很好地被闭合。
注意到,该方法可以具有一些特殊的效用。来自六个额外的空薄片的三角形可以被用于特殊的目的。例如,它们可以被用于计算网格表面所包围的体积。使它们不用于显示也很容易。如果只想要外围的表面,则可以将它们用于去除内部结构,这在网格减少过程中很难被去除。
2)第二种算法是例如搜索孔洞并使其闭合。因为孔洞是因剪切边缘而产生,所以它必须位于边界上。该孔洞是由二维多边形组成的。通过使二维多边形变为三角形并向网格物体添加所得的三角形,孔洞将消失。
图55示出了示例体积球体,这是通过CT并使扫描分段而从扫描幻影物体中获得的。因为该物体实际上是在杆上的一个球,当只分割该球面时体积物体的表面中的孔洞将导致该杆连接到该球面。
图56示出了根据本发明的示例性实施例所产生的该物体的网格表面(在剪切盒子内示出)。在三角形网格中有一个孔洞。图57示出了在经上述示例性孔洞闭合算法处理之后的网格表面(实心模式并被放大)。
图58-60分别示出了体积幻影立方物体分割形状扫描数据、相同物体的实心模式的网格表面(由本发明的方法所产生,在底部具有孔洞)、以及在孔洞闭合之后相同的网格表面。最终,通过使用一些实际的数据,图61-63分别示出了从MR扫描数据中分割的肿瘤、相同物体实心模式的网格表面(由本发明的方法所产生,在底部具有孔洞)、以及在孔洞闭合之后相同的网格表面(由本发明的方法来实现)。
一旦孔洞闭合已经应用,通过使用已知的技术可以计算现在闭合的网格表面的体积。以下的表格13示出了用于这些物体的示例性体积测量结果。
表格13 注意到,没有任何实际的肿瘤可以被测量,因为体积是计算后的形状扫描数据。可以看到,与简单地采用分割物体的体积相比,扫描物体所产生的闭合网格表面的体积是相当精确的。可以预计,既然关于有限的阈值,那么分割的物体小于实际的物体并小于分割的物体的网格表面,如同根据本发明的示例性实施例所产生的那样。用于幻影物体的体积测量表示,网格表面是拓朴正确的,并且由此允许将用于物体的闭合网格表面的体积(它只能从医疗成像中获知,比如图61-63的肿瘤)视为足够精确。
示例性的伪代码 通过使用下面的伪代码作为方针,使用已知的编码技术、编码语言和编译器,可以实现根据本发明的示例性实施例。根据本发明的示例性实施例的方法可以在任何系统(该系统被安排用于存储、处理、显示三维和体积数据集)中实现,比如,由新加坡的Volume Ineractions Pte有限公司提供的DextroscopeTM硬件和RadioDexterTM软件。
I总的伪代码 输入 ORIVOLUME三维阵列,原始体积数据; ORIVOLUME[k][j][i]相应体元的强度; TS阈值。TS的值可以由用户或由某个算法来确定。
输出 Triangle_Mesh 过程 从输入数据ORIVOLUME中构建二进制体积VOL; 针对每一个外部体元VOL[k][j][i], 计算其ei-,ei+,ej-,ej+,ek-,ek+和ε值。
针对每一个外部体元VOL[k][j][i]; { 计算其fi-,fi+,fj-,fj+,fk-,fk+,εi,εj,εk,ε; 如果(((fi-is true).AND.(fi+is true)).OR. ((fi-is true).AND.(fj+is true)).OR. ((fk-is true).AND.(fk+is true))) { 使用VOL[k][j][i]及其26个近邻来构建新的6×6×6体积New_Vol; 针对New_Vol中的每一个外部体元, 计算其ei-,ei+,ej-,ej+,ek-,ek+和ε的数值; 针对New_Vol中的每一个外部体元New_Vol[k][j][i] { 计算其fi-,fi+,fj-,fj+,fk-,fk+,εi,εj,εk,ε; 收集在New_Vol[k][j][i]之内的三角形条带; } } 否则 收集在VOL[k][j][i]之内的三角形条带; } II详细的伪代码 A假定和数据结构定义
图64示出了用于体积物体的假定和定位定义。
输入数据 ORIVOLUME三维阵列,原始体积数据; ORIVOLUME[k][j][i]相应体元的强度; TS阈值。TS的值可以由用户或由某个算法来决定。
参数 VOL三维二进制阵列。它与ORIVOLUME具有相同的大小。
VOL的每一个元素都具有在ORIVOLUME中的一个相应的体元。
VOL[k][j][i]二进制的值,0或1; VOXELSUR1维阵列。每一个元素保存三个整数, 表面体元的索引 B.示例性的算法 步骤1 对于原始体积数据中的每一个体元ORIVOLUME[k][j][i]{ If ORIVOLUME[k][j][i]<TS,//阈值测试 VOL[k][j][i]=0; //设为二进制阵列的外部体元 else VOL[k][j][i]=1.//设为二进制阵列的内部体元} 步骤2 对于每一个VOL[k][j][i]=0如果

将(i,j,k)推进VOXELSUR。
步骤3 针对VOXELSUR中的每一个元素,定义 Post_process(i,j,k)=FALSE; ei-(i,j,k)=FALSE;ei+(i,j,k)=FALSE; ej-(i,j,k)=FALSE;ej+(i,j,k)=FALSE; ek-(i,j,k)=FALSE;ek+(i,j,k)=FALSE;εi(i,j,k)=0;εj(i,j,k)=0;εk(i,j,k)=0; fi-(i,j,k)=FALSE;fi+(i,j,k)=FALSE; fj-(i,j,k)=FALSE;fj+(i,j,k)=FALSE; fk-(i,j,k)=FALSE;fk+(i,j,k)=FALSE; εi(i,j,k)=FALSE;εj(i,j,k)=FALSE;εk(i,j,k)=FALSE; ε(i,j,k)=FALSE; 步骤4 针对VOXELSUR中的每一个元素 If VOL[k][j][i-1]=1,ei-(i,j,k)=TRUE; If VOL[k][j][i+1]=1,ei+(i,j,k)=TRUE; If VOL[k][j-1][i]=1,ej-(i,j,k)=TRUE; If VOL[k][j+1][i]=1,ej+(i,j,k)=TRUE; If VOL[k-1][j][i]=1,ek-(i,j,k)=TRUE; If VOL[k+1][j][i]=1,ek+(i,j,k)=TRUE; ε(i,j,k)=ei-(i,j,k)‖ei+(i,j,k)‖ej-(i,j,k) ‖ej+(i,j,k)‖ek-(i,j,k)‖ek+(i,j,k) 步骤5 对于VOXELSUR中的每一个元素 fi-(i,j,k)=ei-(i,j,k) ‖ei-(i,j-1,k)‖ei-(i,j+1,k)‖ei-(i,j,k-1)‖ei-(i,j,k+1) ‖((ej+(i,j-1,k-1)=false)&&(ek+(i,j-1,k-1)=false)&&(ei-(i,j-1,k-1))) ‖((ej+(i,j-1,k+1)=false)&&(ek-(i,j-1,k+1)=false)&&(ei-(i,j-1,k+1))) ‖((ej-(i,j+1,k-1)=false)&&(ek+(i,j+1,k-1)=false)&&(ei-(i,j+1,k-1))) ‖((ej-(i,j+1,k+1)=false)&&(ek-(i,j+1,k+1)=false)&&(ei-(i,j+1,k+1))) fi+(i,j,k)=ei+(i,j,k) ‖ei+(i,j-1,k)‖ei+(i,j+1,k)‖ei+(i,j,k-1)‖ei+(i,j,k+1) ‖((ej+(i,j-1,k-1)=false)&&(ek+(i,j-1,k-1)=false)&&(ei+(i,j-1,k-1))) ‖((ej+(i,j-1,k+1)=false)&&(ek-(i,j-1,k+1)=false)&&(ei+(i,j-1,k+1))) ‖((ej-(i,j+1,k-1)=false)&&(ek+(i,j+1,k-1)=false)&&(ei+(i,j+1,k-1))) ‖((ej-(i,j+1,k+1)=false)&&(ek-(i,j+1,k+1)=false)&&(ei+(i,j+1,k+1))) fj-(i,j,k)=ej-(i,j,k) ‖ej-(i-1,j,k)‖ej-(i+1,j,k)‖ej-(i,j,k-1)‖ej-(i,j,k+1) ‖((ei+(i-1,j,k-1)=false)&&(ek+(i-1,j,k-1)=false)&&(ej-(i-1,j,k-1))) ‖((ei+(i-1,j,k+1)=false)&&(ek-(i-1,j,k+1)=false)&&(ej-(i-1,j,k+1))) ‖((ei-(i+1,j,k-1)=false)&&(ek+(i+1,j,k-1)=false)&&(ej-(i+1,j,k-1))) ‖((ei-(i+1,j,k+1)=false)&&(ek-(i+1,j,k+1)=false)&&(ej-(i+1,j,k+1))) fj+(i,j,k)=ej+(i,j,k) ‖ej+(i-1,j,k)‖ej+(i+1,j,k)‖ej+(i,j,k-1)‖ej+(i,j,k+1) ‖((ei+(i-1,j,k-1)=false)&&(ek+(i-1,j,k-1)=false)&&(ej+(i-1,j,k-1))) ‖((ei+(i-1,j,k+1)=false)&&(ek-(i-1,j,k+1)=false)&&(ej+(i-1,j,k+1))) ‖((ei-(i+1,j,k-1)=false)&&(ek+(i+1,j,k-1)=false)&&(ej+(i+1,j,k-1))) ‖((ei-(i+1,j,k+1)=false)&&(ek-(i+1,j,k+1)=false)&&(ej+(i+1,j,k+1))) fk-(i,j,k)=ek-(i,j,k) ‖ek-(i-1,j,k)‖ek-(i+1,j,k)‖ek-(i,j-1,k)‖ek-(i,j+1,k) ‖((ei+(i-1,j-1,k)=false)&&(ej+(i-1,j-1,k)=false)&&(ek-(i-1,j-1,k))) ‖((ei+(i-1,j+1,k)=false)&&(ej-(i-1,j+1,k)=false)&&(ek-(i-1,j+1,k))) ‖((ei-(i+1,j-1,k)=false)&&(ej+(i+1,j-1,k)=false)&&(ek-(i+1,j-1,k))) ‖((ei-(i+1,j+1,k)=false)&&(ej-(i+1,j-1,k)=false)&&(ek-(i+1,j+1,k))) fk+(i,j,k)=ek+(i,j,k) ‖ek+(i-1,j,k)‖ek+(i+1,j,k)‖ek+(i,j-1,k)‖ek+(i,j+1,k) ‖((ei+(i-1,j-1,k)=false)&&(ej+(i-1,j-1,k)=false)&&(ek+(i-1,j-1,k))) ‖((ei+(i-1,j+1,k)=false)&&(ej-(i-1,j+1,k)=false)&&(ek+(i-1,j+1,k))) ‖((ei-(i+1,j-1,k)=false)&&(ej+(i+1,j-1,k)=false)&&(ek+(i+1,j-1,k))) ‖((ei-(i+1,j+1,k)=false)&&(ej-(i+1,j-1,k)=false)&&(ek+(i+1,j+1,k))) 步骤6 对于VOXELSUR中的每一个元素 如果(((fi-(i,j,k)=TRUE)&&(fi+(i,j,k)==TRUE))‖ ((fj-(i,j,k)==TRUE)&&(fj+(i,j,k)==TRUE))‖ ((fk-(i,j,k)==TRUE)&&(fk+(i,j,k)==TRUE))), 则Post_process(i,j,k)=TRUE; 步骤7 对于VOXELSUR中的每一个元素 如果Post_process=FALSE, εi(i,j,k)=numberof TRUE among {ei-(i,j-1,k),ei-(i,j,k-1),ei-(i,j+1,k),ei-(i,j,k+1), ei+(i,j-1,k),ei+(i,j,k-1),ei+(i,j+1,k),ei+(i,j,k+1)} εj(i,j,k)=numberof TRUE among {ej-(i-1,j,k),ej-(i,j,k-1),ej-(i+1,j,k),ej-(i,j,k+1), ej+(i-1,j,k),ej+(i,j,k-1),ej+(i+1,j,k),ej+(i,j,k+1)} εk(i,j,k)=numberof TRUE among {ek-(i-1,j,k),ek-(i,j-1,k),ek-(i+1,j,k),ek-(i,j+1,k), ek+(i-1,j,k),ek+(i,j-1,k),ek+(i+1,j,k),ek+(i,j+1,k)} εi(i,j,k)=(ei-(i,j,k)‖ei+(i,j,k))‖(εi(i,j,k)==2) εj(i,j,k)=(ej-(i,j,k)‖ej+(i,j,k))‖(εj(i,j,k)==2) εk(i,j,k)=(ek-(i,j,k)‖ek+(i,j,k))‖(εk(i,j,k)==2) 根据10个数值 (fi-(i,j,k),fi+(i,j,k),fj-(i,j,k),fj+(i,j,k),fk-(i,j,k),fk+(i,j,k), εi(i,j,k),εj(i,j,k),εk(i,j,k),ε(i,j,k), 决定ORIVOLUME[k][j][i]之内的表面。
步骤8 对于VOXELSUR中的每一个元素如果Post_process=TRUE, 分割ORIVOLUME[k][j][i]及其26个近邻以构建新的小体积6×6×6。每一个ORIVOLUME[k±1,k][j±1,j][i±1,i]都被细分成八个相等的孩子,它们具有与其父母相同的强度(即,27个体元中的每一个在细分过程之前都具有与其父母相同的强度值)。通过使用新的体积作为输入,执行上述7个步骤。
步骤9 对步骤7的结果进行分组以构建物体的表面。
C.网格减少 输入 1)网格 VER顶点被保存在一维阵列VER中。每一个VERi保存一个三维坐标。
TRI三角形被保存在一维阵列TRI中。每一个TRIi保存VER中的三个顶点的索引(三个整数)。
2)ANGLE_T用户定义的角度阈值,它被用于确定两个三角形是否可以被假定在相同的平面中; 3)BOUN_ANGLE_T用户定义的阈值,它被用于确定两个边界边是否可以被假定在相同的线中; 4)TRIANGLE_N用户定义的阈值,它是最终结果中预期最大的三角形数目; 5)PERCENTAGE_T用户定义的阈值。如果在一个循环中减小的百分比小于该阈值; 6)MIN_ANGLE_T最终结果中三角形的最小角度不应该小于MIN_ANGLE_T; 输出 TRIANGLE_MESHNEW_VERNEW_TRI 过程 当(新三角形数目>TRIANGLE_N.OR.百分比>PERCENTAGE_T) { 对于输入三角形网格的每一个未移除的顶点vi {如果vi是特殊的情况,则继续到下一个vi;如果vi是一个非边界顶点并且只具有三个近邻的顶点,将顶点vi移至其任何近邻并继续到下一个vi; 对于vi的每一个顶点近邻vj{ 如果SAME_PLANE_TEST失败,继续到下一个vj; 如果THIN_TRIANGLE_TEST失败,继续到下一个vj; 如果NORMAL_INVERSE_TEST失败,继续到下一个vj; 如果vi是边界顶点并且EDGE_ANGLE_TEST失败,继续到下一个vj; 将vi移至vj,更新用于vj的顶点和三角形信息,继续到下一个vi;} } 计算新的三角形数目和百分比;使顶点阵列()平滑;} D.孔洞闭合 输入 网格 VER顶点被保存在一维阵列VER中。每一个VERi保存三维坐标。
TRI三角形被保存在一维阵列TRI中。每一个TRIi将三个顶点的索引保存在VER中。
输出没有边界顶点的TRIANGLE_MESH 过程 当(有任何未处理的边界顶点) { 对于输入三角形网格的未经处理的边界顶点vi { 如果vi不具有两个并只是两个边界近邻,继续到下一个vi; 清空多边形列表Lpoly; 使用顶点近邻信息,构建源自顶点vi的边界环Lpoly边界环中所有的元素都应该具有(x,y,z)中至少一个相同的坐标; 使Lpoly分为三角形并将所得的三角形添加到三角形网格中; } } 输出新的三角形网格; 示例性的系统 本发明可以在数据处理器上运行的软件中得以实现,在一个或多个专用芯片中的硬件中得以实现,或在上述的任何组合中得以实现。示例性的系统可以包括例如立体显示器、数据处理器、交互式显示控制命令和功能映射于其上的一个或多个界面、一个或多个存储器或存储器件,以及图形处理器和相关系统。例如,由新加坡的Volume Interactions Pte有限公司生产的运行RadioDexter软件的DextroscopeTM和DextrobeamTM系统、或者任何类似的或功能等效的三维数据集交互式显示系统是本发明的方法可以很容易在其上得以实施的系统。
本发明的示例性实施例可以作为由合适的数据处理器执行的指令的模块软件程序来实现,这在本领域中可能是已知的,以便实现本发明较佳的示例性实施例。例如,示例性的软件程序可以被存储在硬驱动机、闪存、记忆棒、光学存储介质、或其它本领域已知的数据存储设备。当这种程序被合适的数据处理器的CPU访问并运行时,在本发明的示例性实施例中,它可以执行在三维数据显示系统中显示管状结构的一个或多个三维计算机模型的上述方法。
尽管本发明的描述所参照的是其一个或多个示例性的实施例,但是它并不限于此,并且所附的权利要求书旨在被解释为不仅包含所示发明的特定形式和变体,还进一步包括比如那些本领域技术人员所设想出来的但并不背离本发明的真实范围的内容。
此处有三个附录,它们示出了用于表面体元的各种可能的情形。这些附录必然将各体元可能性所对应的适宜的近邻信息与图片关联起来。这些说明关于体元的近邻(附录I),分割体元的多边形表面的形状和方位(附录II),以及用于各种可能的体元近邻配置的组合(附录III)。说明与相邻的文本的组合是传递情形矢量的抽象信息的最好方式。如果这些附录是在正常的基础之上,则申请人保留下列权力将附录的内容分成文本和图,修改说明书以便将新的图添加到包含附录中的各个说明的申请中,并且描述添加到说明书中的文本中的所述每个图。然而,申请人迫切要求附录在事实上提供了该内容的最有效和清晰的展示,并且应该被接受。
划分体元 附录I e和ε值的计算 划分体元附录I 计算用于中心体元的e和ε值(空白意味着FALSE,T意味着TRUE)


1-1 划分体元附录I

1-2

1-3

1-4

1-5

1-6 划分体元附录I

2-1

2-2

2-3

2-4

2-5 划分体元附录I

2-6

2-7

2-8

2-9

2-10 划分体元附录I

2-11

2-12

2-13

2-14

2-15 划分体元附录I

3-1

3-2

3-3

3-4

3-5 划分体元附录I

3-6

3-7

3-8

3-9

3-10 划分体元附录I

3-11

3-12

3-13

3-14

3-15 划分体元附录I

3-16

3-17

3-18

3-19

3-20 划分体元附录I

4-1

4-2

4-3

4-4

4-5 划分体元附录I

4-6

4-7

4-8

4-9

4-10 划分体元附录I

4-11

4-12

4-13

4-14

4-15划分体元附录I

5-1

5-2

5-3

5-4

5-5 划分体元附录I

5-6

6-6 划分体元附录II 体元内的表面 划分体元附录II

(空白意味着FALSE,T意味着TRUE) 示例
划分体元附录II 1-1
1-2
1-3
划分体元附录II 1-4
1-5
1-6
划分体元附录II 2-1
2-2
2-3
2-4
划分体元附录II 2-5
2-6
2-7
2-8
划分体元附录II 2-9
2-10
2-11
2-12
划分体元附录II 3-1
3-2
3-3
3-4
划分体元附录II 3-5
3-6
3-7
3-8
划分体元附录II 3-9
3-10
3-11
3-12
划分体元附录II 4-1
4-2
4-3
4-4
划分体元附录II 4-5
4-6
4-7
4-8
划分体元附录II 5-1
5-2
5-3
5-4
划分体元附录II 5-5
5-6
5-7
5-8
划分体元附录II 6-1
6-2
6-3
6-4
划分体元附录II 6-5
6-6
6-7
6-8
划分体元附录II 6-9
6-10
6-11
6-12
划分体元附录II 6-13
6-14
6-15
6-16
划分体元附录II 6-17
6-18
6-19
6-20
划分体元附录II 6-21
6-22
6-23
6-24
划分体元附录II 7-1
7-2
7-3
7-4
划分体元附录II 7-5
7-6
7-7
7-8
划分体元附录II 8-1
8-2
8-3
8-4
划分体元附录II 8-5
8-6
8-7
8-8
划分体元附录II 8-9
8-10
8-11
8-12
划分体元附录II 8-13
8-14
8-15
8-16
划分体元附录II 8-17
8-18
8-19
8-20
划分体元附录II 8-21
8-22
8-23
8-24
划分体元附录III 用于每一个体元情形的示例 划分体元附录III
情形1的示例 划分体元附录III
情形2的示例 划分体元附录III
情形3的示例 划分体元附录III
情形4的示例 划分体元附录III
情形5的示例 划分体元附录III
情形6的示例 划分体元附录III
情形7的示例 划分体元附录III
情形8的示例
权利要求
1.一种从三维数据集中创建用于物体任意分段的表面的方法,它包括
标识所述分段的表面体元集合;
针对所述集合中的每一个体元
计算其近邻中的哪些是内部体元,以产生情形矢量;并且
使用所述情形矢量来确定在所述体元之内多边形表面的位置和方向,所述多边形表面用于分割所述体元;
以及
产生所有的多边形表面以创建分段表面。
2.如权利要求1所述的方法,其特征在于,如果对于给定的体元,关于在哪里分割给定的表面体元,所述情形矢量是模糊的,则在产生所述多边形表面之前实现后处理。
3.如权利要求2所述的方法,其特征在于,所述后处理包括将模糊体元细分为比例较小的体元,重新计算关于各个比例较小的体元的情形矢量,并且用多边形表面分割所述比例较小的体元。
4.如权利要求1所述的方法,其特征在于,各多边形表面包括三角形。
5.如权利要求4所述的方法,其特征在于,各多边形表面包括两个三角形。
6.如权利要求1-5所述的方法,进一步包括通过网格减少过程减少所述分段表面中多边形的数目。
7.如权利要求1-6所述的方法,进一步包括填充所述分段表面中的任何孔洞以创建闭合的分段表面。
8.如权利要求7所述的方法,其特征在于,作为所述数据集中所表示的实际物体的体积测量,计算所述闭合分段表面的体积。
9.如权利要求1-8所述的方法,进一步包括以实心模式或线框模式来显示所述分段表面。
10.如权利要求9所述的方法,其特征在于,通过使用所有原始产生的多边形表面,或通过使用由网格减少过程所减少的多边形表面,可以显示所述分段表面。
11.如权利要求1-10所述的方法,其特征在于,所述产生情形矢量的步骤包括确定所述表面体元的哪些直接近邻是内部体元。
12.如权利要求11所述的方法,还包括确定所述表面体元的哪些边和隅角近邻是内部体元。
13.如权利要求12所述的方法,其特征在于,多边形表面的位置和方向是所述情形矢量的函数。
14.如权利要求1所述的方法,其特征在于,多边形表面的位置和方向包括所述表面体元与所述多边形表面相交的那些边。
15.一种从三维数据集中创建用于物体任意分段的表面的方法,它包括
标识所述分段的最外围的内部体元的集合;
对于所述集合中的每一个体元
计算其近邻中的哪些是外部体元,以便产生情形矢量;并且
使用所述情形矢量来确定所述体元内多边形表面的位置和方向,所述多边形表面用于分割所述体元;
以及
产生所有的多边形表面以创建分段表面。
16.一种从三维数据集中创建用于物体任意分段的表面的方法,所述分段是基于阈值的,所述方法包括
如果所述阈值是有限的,则实现权利要求1所述的方法;并且
如果所述阈值是自由的,则实现权利要求15所述的方法。
全文摘要
提出了一种为三维数据集的任意数据段创建表面的系统和方法。在根据本发明的示例性实施例中,该方法包括最初标识该数据段的一组表面体元。针对该集合中的各体元,可以获得与其近邻中的哪些是内部体元相关的信息,并且这些结果可以被用于确定划分该体元的那个多边形表面的位置和方向。通过将所有这些多边形表面连起来,便可以获得该表面。在根据本发明的示例性实施例中,这些多边形表面可以包括三角形。在根据本发明的示例性实施例中,可以用线框模式或实心模式来显示该表面。在根据本发明的示例性实施例中,可以实现网格减少,以便减少最终的表面中多边形的数目。在根据本发明的示例性实施例中,可以计算由网格表面所包围的体积。另外,如果所产生的网格表面是不闭合的表面,比如当在产生网格表面之前已经对分段的物体进行过修剪的时候,则其内部任何的“孔洞”都可以用一个网格来封闭,然后可以计算该体积。
文档编号G06T17/20GK1910624SQ20048003525
公开日2007年2月7日 申请日期2004年11月29日 优先权日2003年11月28日
发明者C·陶 申请人:布拉科成像S.P.A.公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1