專利名稱:編碼網格模型的方法和裝置、編碼的網格模型、以及解碼網格模型的方法和裝置的制作方法
技術領域:
本發明涉及一種用于編碼網格模型的方法和裝置、編碼的網格模型以及用于解碼網格模型的方法和裝置。
背景技術:
像建筑設計、化工廠和機械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日
發明者蔡康穎, 陳志波, 靳宇 申請人:湯姆森特許公司