专利名称:编码网格模型的方法和装置、编码的网格模型、以及解码网格模型的方法和装置的制作方法
技术领域:
本发明涉及一种用于编码网格模型的方法和装置、编码的网格模型以及用于解码网格模型的方法和装置。
背景技术:
像建筑设计、化工厂和机械CAD (计算机辅助设计)设计的大型3D工程模型被日益在各种虚拟世界应用中布置,诸如,Second Life 和Google Earth 。在多数工程模型中,存在大量的小尺寸到中型尺寸的连接组件,平均每一个组件都具有上至几百个多边形。如在[SBM01] (D. Shikhare,S. Bhakar 禾口 S. P. Mudur. “Compression of Large 3D EngineeringModels using Automatic Discovery of Repeating Geometric Features”,2001 年 11 月21-23日,德国斯图加特)中定义的,如果在网格模型的一个子集中存在任何两个多边形之间的路径,则该网格模型的子集是一连接组件。此外,这种类型的模型具有在各种位置、比例和方位(orientation)上重复的许多几何特征。自从90年代早期以来已经提出了高效地压缩3D网格的各种算法。然而早期的工作大多集中在压缩具有平滑表面和小三角形的单个连接的3D模型。对于诸如大型3D工程模型的多连接的3D模型(包含多个连接组件的3D模型),单独地压缩组件。这造成了相对低效的压缩。实际上,通过移除不同连接组件之间的冗余可以大幅增加压缩性能。[SBM01]提出了一种用于在大型3D工程模型中自动发现重复的几何特征的方法。然而,对于更高效地压缩3D工程模型还有很大的空间,例如,没有提供覆盖对于恢复原始模型必需的重复实例的变换信息的压缩解决方案。考虑到3D工程模型通常所具有的大尺寸连接组件,这种类型的信息将消耗大量存储。此外,如果使用组件的顶点位置的PCA (首要组件分析),具有相同几何和不同连接性的组件将具有相同的平均值和相同的方位轴。现有技术不适于以各种比例检测和/或压缩重复的图案。两个仅在比例(即,大小)上不同的组件将不能被识别为相同等效类别的重复特征。此外,期望实现比[SBM01]中描述的更高的压缩率。
(0. Devillers 禾口 P. Gandoin, "Geometric compression for interactivetransmission”,IEEE Visualization, 2000, pp. 319-326)公开了一种基于 KD 树的压缩算法,用于编码网格模型的所有连接组件的平均值。该算法在每次迭代时将单元细分成两个子单元,并且编码两个子单元之一中的顶点的数目。如果父单元包含P个顶点,可以利用算术编码器使用lo&(p+l)比特来编码子单元之一中的顶点的数目。递归地应用该细分,直至每个非空子单元小到仅包含1个顶点并且使得足够精确重构顶点位置成为可能。在
中提及了该算法对于非均勻分布是最高效的,而正规分布是最坏情况。
发明内容
本发明基于对以下事实的认识对于多数大型3D工程模型,连接组件的重复实例的实例位置表明显著的多空间聚集(aggregation),并且对于这种情况可以改进
中描述的算法的效率。即,在大型3D网格模型内的重复实例通常分布地使得若干实例在一个或很少的小区域内,而在其它相对较大的区域内不存在实例。如果使用单个KD树来组织并且压缩这种类型的点数据集(如在
中提出的),KD树将是不合理地深,这将使得输出数据流比所需的长。本发明提供了对于这种情况的改进。根据本发明,使用若干KD树,每一个用于被空间聚集的点的一个簇。这些KD树将生成相对短的数据流,并且因此改进总压缩率。在一个方面,本发明提供一种用于编码网格模型的点的方法。该方法包括以下步骤确定网格模型包括连接组件的重复实例,以及为每个重复实例确定至少一个参考点,将所述重复实例的参考点分簇至一个或更多簇,以及使用KD树编码来编码分簇后的参考点,其中,为每个簇生成单独的KD树。根据本发明的另一方面,一种用于编码网格模型的点的装置,包括分析部件,用于确定网格模型包括连接组件的重复实例;确定部件,用于为每个重复实例确定至少一个参考点;分簇部件,用于将所述重复实例的参考点分簇至一个或更多簇;以及编码部件,用于使用KD树编码来编码分簇后的参考点,其中,为每个簇生成单独的KD树。根据本发明的另外一个方面,一种用于对编码的网格模型的点解码的方法,包括以下步骤提取重复的连接组件的实例的数据;使用所提取的数据解码连接组件的实例;提取定义多个簇的第一数据、定义空间分辨率的第二数据以及作为所述重复的连接组件的多个重复的位置的第三数据,其中,所述第三数据被编码为KD树;提取定义所述网格模型内的一部分的第四数据;以及根据所述第三数据和第四数据确定所述重复的连接组件的多个重复的位置,其中,将第三数据应用于由第四数据定义的网格模型的所述部分。根据本发明的又一方面,一种用于对编码的网格模型的点解码的装置,包括第一提取部件,用于从所述编码的网格模型中提取重复的连接组件的实例的数据;解码部件,用于使用所提取的数据解码连接组件的实例;第二提取部件,用于提取定义多个簇的第一数据、定义空间分辨率的第二数据以及作为所述重复的连接组件的多个重复的位置的第三数据,其中,所述第三数据被编码为KD树;以及第三提取部件,用于提取定义所述网格模型内的一部分的第四数据;以及确定部件,用于根据所述第三数据和第四数据确定所述重复的连接组件的多个重复的位置,其中,将第三数据应用于由第四数据定义的网格模型的所述部分。根据本发明的一个方面,一种编码的网格模型,包括多个重复连接组件,其中所述编码的网格模型包括至少以下内容的编码数据每个重复的连接组件的一个示例,所述重复的连接组件的多个重复的位置,所述位置被编码为KD树,以及所述网格模型内的边界区域,其中,所述KD树参照所述区域。在从属权利要求、以下描述和附图中公开了本发明的有利实施例。
参照附图描述本发明的示例性实施例,以下附图中示出了 图1,2D示例中的KD树编码的原理;图2a),重复连接组件的多实例的位置;
图2b),对重复连接组件的多实例的位置的传统KD树编码的结果;图3,分簇(cluster)后的簇的位置;图4,基于簇的编码的网格模型的数据结构;图5,由5574个连接组件组成的会议室的示例性3D网格模型的2D表示;图6,编码方法和解码方法的示例性流程图;以及图7分簇方法的示例性流程图。
具体实施例方式图1示例性地示出了 2D情况的传统KD树编码的原理。通过被称作父单元的边界框10包围2D模型。7个顶点位于父单元中。KD树编码算法开始于使用预定数目的比特编码顶点的总数,并且然后递归地细分单元。每次其将父单元细分成两个子单元,编码两个子单元之一中的顶点的数目。按照惯例,这可以是左侧子单元(在垂直分割后)或上单元(在水平分割后)。如果父单元包含P个顶点,可以以算术编码器使用lo&(p+l)比特来编码子单元之一中的顶点的数目。递归地应用这个细分,直至每个非空子单元小到仅包含1个顶点并且使得足够精确重构顶点位置成为可能。为了压缩所有重复实例的位置,最初将所有位置的整个边界框10视作父单元。在图1的示例中,使用32比特编码顶点的总数(7个)。然后应用垂直分割,使得获得左侧子单元Vl和右侧子单元V2。在下一编码步骤中,编码左侧子单元Vl的顶点数0个)。通过父单元内的顶点的数目确定用于编码的比特数其是Iog2(7+1) =3比特。根据父单元中的顶点数和左侧子单元Vl中的顶点数,可以推算出右侧子单元内的顶点数,并且因此不需要编码。在下一步骤中,应用水平分割。现在作为父单元Vl的左侧子单元Vl被分割成上侧子单元VlHl和下侧子单元V1H2。现在作为父单元V2的右侧子单元V2被分割成上侧子单元V2H1和下侧子单元V2H2。编码在具有两个顶点的左上侧子单元VlHl继续。因此,接下来编码数目2,其中在算术编码器中使用1呢20+1) = 2.3比特。如以上描述的,在左下侧子单元V1H2中的顶点数不必编码,这是因为其可以根据左侧单元Vl和左上侧子单元VlHl中的顶点数推算。然后,将相同的例程应用于右侧单元V2,这造成使用2比特编码零。如图1所示,还需要两个分割步骤,直至每个顶点在单独的单元内,并且甚至更多的步骤是必需的,直至每个顶点足以位于其单元内。每个步骤都需要编码增加数目的1和0,取决于所需精度,附加步骤的数目可能高。以上提及的现有技术文献
暗示单个KD树提供优化的压缩。但是,已经发现,在空间聚集的点的情况下存在额外冗余,本发明可以减少该额外冗余。点的空间聚集意味着对于多个后续分割操作,总有一个子单元是空的。因此,如果点是空间聚集的,任何等级(k+Ι)将消耗与其父等级k相同数目的比特。原理上,KD树的传统使用通过将KD树的每个等级变窄来改善压缩率。本发明通过使用多个KD树并且使每个KD数具有更少的等级来改善压缩率。本发明应用KD树编码算法不仅用于编码顶点位置,而且用于编码重复连接组件的位置。图2a)示出了多个重复连接组件21- 位于3D网格模型的边界框20内的示例。如同在许多大型3D网格模型中,位置在边界框内非常不均勻地分布。如果仅仅将KD树编码算法应用于对位置进行编码,在图2b)中示出了示例性结果。可以看出,在定位簇之前需要5个初始分割步骤。即,在图2的示例中,编码将如下12 (总数)-6 (左侧子单元第一生成)-6-3 (上侧子单元第二生成)-2-3-0 (左侧子单元,第三生成)-2-0-0-0 (上侧子单元, 第四生成)-2-4-0-3 (左侧子单元,第五生成)-2-0-3-0 (上侧子单元,第六生成),结果是1 2-6-6-3-2-3-0-2-0-0-0-2-4-0-3-2-0-3-0。以上描述了比特数目的分配。对于更精确的位置可能需要其它数据。因此,代码包含先前值或者零的许多重复。对于本发明,例程和结果代码二者实质上是简略的。根据本发明的一个方面,将点分簇,即,创建簇并且如果可能将点分配到簇。可以以如图3所示的方式有利地将图2中所示的点分簇。在这个示例中,在边界框30内有4个簇31-34。一般地,分簇包括选择尚未被分簇的并且包括一个或更多点的第一单元,以及定义包括第一单元或第一单元内的一个或更多点的簇。在一个实施例中,如图6a)所示,一种用于编码网格模型的点的方法包括以下步骤确定El网格模型包括连接组件的重复实例,以及为每个重复实例确定E2至少一个参考点,将重复实例的参考点分簇E3到一个或更多的簇中,以及使用KD树编码来编码E4分簇后的参考点,其中,为每个簇生成单独的KD树。在一个实施例中,分簇包括以下步骤定义围绕网格模型的边界框;将边界框划分成单元,其中,单元是最小的空间分辨率单位;选择尚未被分簇的并且包括重复实例的一个或更多参考点的第一单元;以及定义包括所述第一单元或所述第一单元内的一个或更多参考点的簇。一般地,第一单元是创建新簇的候选项。在一个实施例中,一个单元足以创建一簇。在另一实施例中,需要其中每个包括一个或更多点的至少2个相邻单元,用于创建簇。在另一个实施例中,需要任何数目的相邻单元内的预定最小数目的点,用于创建簇。在一个实施例中,仅仅选择第一单元,如果其尚未被分簇并且其包括至少M个点 (例如,M个重复实例的参考点)。在一个实施例中,M是用户可定义的参数。对应的编码方法包括以下步骤定义参数M,其中M是单元内的点的最小数目,以便选择该单元作为用于创建新簇的源。在一个实施例中,分簇还可包括以下步骤确定一个或更多其它单元,其中其它单元是选择的第一单元的邻近单元或者递归的邻近单元(即,邻域的邻域等),并且其中每个确定的其它单元包括重复实例的至少一个参考点,以及将确定的一个或者多个邻近单元添加到所述簇。在一个实施例中,分簇还包括以下步骤以每个单元中参考点的数目的升序或降序排列所有单元,并且根据所述顺序选择第一单元(用于创建新簇的候选项)。对于许多大型3D工程模型(诸如图5中所示的示例性会议室),实例位置显著示出了多空间聚集。如果使用一个单个KD树来组织和压缩这种类型的点数据集,KD数将深得不合理。另一方面,如果使用若干KD树,每个用于空间聚集的点的一个簇,KD树将生成相对较短的数据流并且因此改善总压缩率。例如,在如图5所示的由5574个连接组件组成的会议室的3D模型中,多个重复连接组件是椅子RCCl、地毯RCC2的重复纹理元素或大型吊灯的重复结构元素RCC3。为了使大型3D工程模型的紧凑存储和快速传输成为可能,本发明提供了对于编码所有重复实例的位置尤其有利的高效压缩策略。在一个方面,本发明提供一种对离散点、尤其对显著示出多空间聚集的那些点的高效压缩方法。大型3D工程模型中的重复实例的位置通常具有这种特征。
本发明提供一种基于分簇的KD树的压缩算法,用于高效压缩具有显著多空间聚集的离散点数据集。根据输入点的空间位置首先将它们分簇。每个簇包含被空间分簇的一组点。然后通过由一个KD树组织属于每个簇的所有点来压缩每个簇。以下将描述用于编码的示例性分簇方法。SC_Point表示所有的点的簇。开始, C_Point是空的。步骤1 将要压缩的所有点的整个边界框细分成N*N*N个单元。步骤2 根据落入每个单元的点的数目以升序将所有单元排列成队列Q_Cell。步骤3 如果(Q_Cell不是空的)WQ_Cell中弹出单元P。跳过空单元。去步骤4。否则去步骤6。步骤4 如果(P不属于C_Point中的任何簇)生成新的簇C,仅包括P,并且将C添加到C_Point。去步骤5。否则去步骤3。步骤5 检验C中的所有单元的所有邻近单元。设Pl表示C中的任何单元的任何邻近单元。如果((落入Pl的点的数目> B)&& (Pl不属于C_Point中的任何簇))将Pl添加到C。(B是用户指定的阈值。)在完成所有邻近单元的检验后,去步骤3。步骤6 独立地压缩落入属于C_Point中的相同簇的单元中的点。通过使用单独 KD树组织对应的点,并且基于例如
将它们压缩来压缩每个簇。用户定义的参数B指定一个单元中必须有多少个点以便将其作为邻域添加到簇。 虽然在一个实施例中B = 1,但是其他实施例可能要求更高值的B。图7中示出了分簇方法的流程图。表1示出了可以作为结果的比特流的语法。ae(v)意思是算术编码,有点类似于 H. 264/AVC中的算术编码。
权利要求
1.一种用于编码网格模型的点的方法,包括以下步骤-确定(El)该网格模型包括连接组件的重复实例,以及为每个重复实例确定至少一个参考点;-将所述重复实例的参考点分簇至一个或多个簇;以及 -使用KD树编码来编码分簇后的参考点,其中,为每个簇生成单独的KD树。
2.如权利要求1所述的方法,其中,分簇包括以下步骤 -围绕网格模型定义边界框;-将边界框划分成单元,其中,单元是最小的空间分辨率单位; -选择尚未被分簇的并且包括重复实例的一个或多个参考点的第一单元;以及 -定义包括所述第一单元或所述第一单元内的一个或多个参考点的簇。
3.如权利要求2所述的方法,其中,如果第一单元尚未被分簇并且其包括至少M个重复实例的M个参考点,则仅仅选择第一单元,其中,M是用户可定义的参数。
4.如权利要求2或3所述的方法,还包括以下步骤-确定一个或多个其它单元,其中所述其它单元是所选择的第一单元的邻近单元或者递归的邻近单元,并且其中每个确定的其它单元包括重复实例的至少一个参考点,以及 -将所确定的一个或多个邻近单元添加到所述簇。
5.如权利要求2-4中的一项所述的方法,其中,分簇还包括以下步骤以每个单元中参考点的数目的升序或降序排列所有单元,并且其中根据所述顺序选择第一单元。
6.如权利要求1-5中的任一项所述的方法,其中,分簇包括以下步骤确定当前簇的边界单元,所述边界单元是具有每个维度的最小索引和最大索引的单元。
7.如权利要求1-6中的任一项所述的方法,还包括以下步骤定义空间分辨率(N),其中,根据所定义的空间分辨率,单元是最小的空间分辨率单位。
8.如权利要求1-7中的任一项所述的方法,还包括以下步骤-确定重复实例的参考点的空间均一性的量度,其中,如果参考点均勻地分布则空间均一性的量度高,而如果分布更加不均勻则空间均一性的量度低; -将空间均一性与阈值比较;以及 -仅当空间均一性低于阈值时执行分簇。
9.如权利要求8所述的方法,还包括以下步骤-如果所述空间均一性低于所述阈值,则修改所述空间分辨率;以及 -重复确定空间均一性的量度的步骤。
10.一种用于编码网格模型的点的装置,包括-用于确定网格模型包括连接组件的重复实例的部件,以及用于为每个重复实例确定至少一个参考点的部件;-用于将所述重复实例的参考点分簇至一个或多个簇的部件;以及-用于使用KD树编码来编码分簇后的参考点的部件,其中,为每个簇生成单独的KD树。
11.如权利要求10所述的装置,其中,用于分簇的部件包括 -用于围绕网格模型定义边界框的部件;-用于将边界框划分成单元的部件,其中,单元是最小的空间分辨率单位; -用于选择尚未被分簇的并且包括重复实例的一个或多个参考点的第一单元的部件;以及-用于定义包括所述第一单元或所述第一单元内的一个或多个参考点的簇的部件。
12.如权利要求10所述的装置,还包括-用于确定一个或多个其它单元的部件,其中所述其它单元是所选择的第一单元的邻近单元或者递归的邻近单元,并且其中每个确定的其它单元包括重复实例的至少一个参考点,以及-用于将所确定的一个或多个邻近单元添加到所述簇的部件。
13.如权利要求10-12中的一项所述的装置,其中,用于分簇的部件还包括用于以每个单元中参考点的数目的升序或降序排列所有单元的部件,并且其中根据所述顺序选择第一单元。
14.如权利要求10-13中的任一项所述的装置,其中,用于分簇的部件包括用于确定当前簇的边界单元的部件,所述边界单元是具有每个维度的最小索引和最大索引的单元。
15.如权利要求10-14中的任一项所述的装置,还包括用于定义空间分辨率(N)的部件,其中,根据所定义的空间分辨率,单元是最小的空间分辨率单位。
16.如权利要求10-15中的任一项所述的装置,还包括-用于确定重复实例的参考点的空间均一性的量度的部件,其中,如果参考点均勻地分布则空间均一性的量度高,而如果分布更加不均勻则空间均一性的量度低;-用于将空间均一性与阈值比较的部件;以及-用于仅在空间均一性低于阈值时执行分簇的部件。
17.—种包括多个重复连接组件的编码的网格模型,其中,所述编码的网格包括至少以下内容的编码数据-每个重复连接组件的一个实例;-所述重复连接组件的多个重复的位置,所述位置被编码为KD树;以及-网格模型内的边界区域,其中KD树指代所述区域。
18.如权利要求17所述的编码的网格模型,其中边界区域的数据包括边界单元的索引。
19.一种用于对编码的网格模型的点进行解码的方法,包括以下步骤-提取重复连接组件的实例的数据;-使用所提取的数据解码所述连接组件的实例;-提取定义多个簇的第一数据(Num_0f_ciusters),定义空间分辨率的第二数据(N)以及作为所述重复连接组件的多个重复的位置的第三数据(KD-T),所述第三数据(KD-T)被编码为KD树;-提取定义所述网格模型内的一部分的第四数据andex_B0imdary_ClUSter);-根据所述第三数据(KD-T)和所述第四数据确定所述重复连接组件的多个重复的位置,其中,将所述第三数据(KD-T)应用于由所述第四数据定义的网格模型的所述部分。
20.如之前权利要求所述的方法,其中,第四数据andex_B0undary_CluSter)包括所述网格模型内的两个单元的索引,根据由所述第二数据(N)定义的空间分辨率,单元是最小的空间分辨率单位。
全文摘要
对于多数大型3D模型,连接组件的重复实例的实例位置示出显著的多空间聚集。本发明使用每一个用于被空间聚集的点的一个簇的若干KD树。多个KD树生成相对短的数据流,并且因此改进总压缩率。一种用于编码网格模型的点的方法,包括以下步骤确定网格模型包括连接组件的重复实例,以及为每个重复实例确定至少一个参考点,将所述重复实例的参考点分簇至一个或更多簇,以及使用KD树编码来编码分簇后的参考点,其中,为每个簇生成单独的KD树。
文档编号H04W4/00GK102577442SQ200980161975
公开日2012年7月11日 申请日期2009年10月15日 优先权日2009年10月15日
发明者蔡康颖, 陈志波, 靳宇 申请人:汤姆森特许公司