史云飛,卞西蜀,張永翔 ,李雪飛,張丕亞
室內(nèi)導(dǎo)航是當(dāng)前業(yè)界和學(xué)界的研究熱點(diǎn)之一。室內(nèi)導(dǎo)航需要解決的 1個(gè)關(guān)鍵問題是室內(nèi)空間建模,它是實(shí)現(xiàn)室內(nèi)導(dǎo)航的先決條件[1]。與室外數(shù)據(jù)模型相比,室內(nèi)模型在空間尺度、組成要素、空間約束等方面具有自己的特征[1-3]。由于室內(nèi)模型需要滿足室內(nèi)導(dǎo)航等需求,其模型應(yīng)能區(qū)分哪些是可穿越邊界(門),哪些是不可穿越邊界(墻),這就需要模型具有語義特性,能夠識(shí)別出墻、門等建筑部件。另外,拓?fù)涫鞘覂?nèi)導(dǎo)航的1個(gè)重要部分,室內(nèi)模型應(yīng)該能夠維護(hù)室內(nèi)要素之間的鄰接、連通等拓?fù)潢P(guān)系,從而可以將其轉(zhuǎn)換為室內(nèi)導(dǎo)航所需的各類節(jié)點(diǎn)關(guān)系圖(node-relation graph,NRG),如連通 NRG、鄰接 NRG等,以支持室內(nèi)空間連通性、鄰接性分析。因此,室內(nèi)模型至少需要滿足2個(gè)條件:①模型能夠區(qū)分墻、門等建筑部件的語義;②模型應(yīng)是拓?fù)鋽?shù)據(jù)模型,其基元需按照拓?fù)涔蚕碓瓌t組織。
目前,3維(three dimension,3D)室內(nèi)模型獲取途徑主要有3種:第1種是利用已有的樓層平面圖和層高,借助 ARCGIS、SketchUp、AutoCAD、Revit等商業(yè)軟件,通過人工建模的方式生成。此類重建往往成本高、效率低,需耗費(fèi)大量的人力。第 2種是自動(dòng)構(gòu)建室內(nèi) 3D模型,利用設(shè)計(jì)的算法自動(dòng)生成3D室內(nèi)模型,文獻(xiàn)[4-8]的研究屬于該類,但現(xiàn)有的研究沒有顧及建筑語義,生成的 3D模型不能區(qū)分墻、門等建筑部件,不支持室內(nèi)導(dǎo)航。第3種是從已有的建筑信息模型(building information modeling,BIM)中提取室內(nèi)模型,文獻(xiàn)[9-11]的研究屬于該類,但這些研究的前提是已經(jīng)存在室內(nèi)BIM模型。本文嘗試提出 1種使用已有樓層平面圖自動(dòng)生成 3D室內(nèi)模型的方法,該方法在重建過程不僅顧及墻、門、窗等建筑部件語義,而且還按照拓?fù)涔蚕碓瓌t組織3D數(shù)據(jù)。
室內(nèi)空間通常是形體規(guī)則的棱柱體,其墻面垂直,頂面、底面水平。這種模型常用的生成方式是“推拉”。“推拉”是1種由低維對(duì)象生成高維對(duì)象的方法,它沿著1個(gè)方向從起始高度H“推拉”低維的幾何(或拓?fù)洌﹩涡危ㄈ?維面)到終止高度L,生成高維單形(如3D體),[H,L]稱為“推拉”間隔?,F(xiàn)有絕大多數(shù)研究都是將“推拉”間隔設(shè)置在2維(two dimension,2D)多邊形上,然后自下而上“推拉”多邊形生成3D體。然而,由于這種“推拉”沒有顧及不同建筑部件高度的差異性,生成的各個(gè)側(cè)面(表示墻、門、窗等)等高,無法區(qū)分哪些面是墻、哪些面是門。圖1(a)是1個(gè)表達(dá)房間的多邊形,它帶有1個(gè)門和1個(gè)窗;[0,3]表示多邊形對(duì)應(yīng)的“推拉”間隔。圖1(b)是圖1(a)“推拉”的結(jié)果,表示門、窗的側(cè)面與表示墻的側(cè)面高度都相同。而真正的門的高度是[0,1.8],窗的高度是[1,2.2],如圖1(c)所示。顯然,常規(guī)的“推拉”方式無法滿足顧及門、窗等建筑部件語義的重建需求。
若要考慮重建兼顧門、窗等建筑部件語義的室內(nèi)3D模型,就需要采用差異性的“推拉”方式,不能再將“推拉”間隔統(tǒng)一設(shè)置在多邊形上,而是根據(jù)需要設(shè)置在多邊形的各條邊上。本文引入了廣義“推拉”[12]來實(shí)現(xiàn)這種顧及建筑語義的3D重建。
若用I表示1維多面體對(duì)應(yīng)的單位實(shí)間隔[0,1],Q表示I在“推拉”方向?qū)?yīng)的1維正多面體:;設(shè)多面體P∈ρd,n的1個(gè)準(zhǔn)分離(quasi-disjoint)剖分集是{Pi∈ρd,n},對(duì)于集合中的任意Pi,都對(duì)應(yīng)Qi∈Q。廣義“推拉”被定義為1個(gè)映射GE,存在:。此處的多面體是廣義多面體,1維多面體為線段,2維多面體為多邊形,逐次類推。{Pi∈ρd,n}表示嵌入到 n維空間中的線性正 d維多面體集合。準(zhǔn)分離集是僅在邊界上相交的點(diǎn)集,點(diǎn)集的正則化交集為空;{Pi∈ρd,n}是P∈ ρd,n的準(zhǔn)分離剖分集,則∪Pi=P,且集合中的任意1對(duì)Pi與Pj存在,?為取多面體的邊界;表示并操作, Pi× Qi的并集構(gòu)成了所生成多面體的1個(gè)準(zhǔn)分離多面體剖分。
圖1 “推拉”示例
廣義“推拉”的實(shí)質(zhì)是將待“推拉”的廣義多面體剖分,形成1個(gè)準(zhǔn)分離剖分集,并為剖分集中的每個(gè)元素指定1個(gè)“推拉”間隔,然后將每個(gè)元素按照它的間隔沿著1個(gè)方向“推拉”,生成新元素。在室內(nèi)3D重建過程中,若將待“推拉”平面圖邊界 E ∈ρ1,3看作是由不同的邊構(gòu)成的1個(gè)準(zhǔn)分離剖分集;每條邊對(duì)應(yīng)的起始高度和終止高度構(gòu)成1個(gè)“推拉”間隔Ii=[Hi,Li],建筑物的起始高度H及其終止高度L構(gòu)成1個(gè)間隔I=[H,L],存在Hi≥H,Li≤L。Ii可轉(zhuǎn)換為1條“推拉”方向的線段 Qi:。如圖 2(a)是平面圖 1段邊界的準(zhǔn)分離剖分集, Qi是各條邊對(duì)應(yīng)“推拉”間隔。將 Ei沿著 Qi“推拉”對(duì)應(yīng)的間隔,生成新3D單形,它們的并集仍然是1個(gè)準(zhǔn)分離剖分集,圖2(b)是圖2(a)各條邊沿著“推拉”間隔生成的3D面集。
為將廣義“推拉”引入室內(nèi)3D重建,設(shè)計(jì)了以下重建流程,如圖3所示。
根據(jù)每個(gè)樓層所處的高度,為每張平面圖設(shè)置1個(gè)起始高程。在將2D圖形“推拉”為3D體的過程中,1個(gè)2D結(jié)點(diǎn)重建后可能對(duì)應(yīng)多個(gè)3D結(jié)點(diǎn),這些3D結(jié)點(diǎn)平面位置都與2D結(jié)點(diǎn)相同,只是高度不同。故平面圖中的每1個(gè)2D結(jié)點(diǎn)對(duì)應(yīng)1串 3D結(jié)點(diǎn)。為此,引入文獻(xiàn)[13]提出的結(jié)點(diǎn)列概念,用符號(hào)Λ表示1個(gè)節(jié)點(diǎn)列,每1個(gè)2D結(jié)點(diǎn)對(duì)應(yīng) 1個(gè)結(jié)點(diǎn)列。進(jìn)一步的工作是為結(jié)點(diǎn)列中各個(gè)3D結(jié)點(diǎn)設(shè)置高程,而2D結(jié)點(diǎn)并不含高程,需從2D結(jié)點(diǎn)關(guān)聯(lián)的2D邊上間接獲取。
常規(guī)建筑物平面圖中,1個(gè)2D結(jié)點(diǎn)至少關(guān)聯(lián)2條邊,至多關(guān)聯(lián)4條。每條邊都對(duì)應(yīng)1個(gè)“推拉”間隔,這些邊的間隔可傳遞給2D結(jié)點(diǎn)。對(duì)于1個(gè)2D結(jié)點(diǎn),取出與它關(guān)聯(lián)的每1條邊“推拉”間隔的左值與右值并排序,每個(gè)值加上樓層的起始高程即是1個(gè)3D結(jié)點(diǎn)的高程,每個(gè)高程與該2D結(jié)點(diǎn)的平面位置一起構(gòu)建1個(gè)3D結(jié)點(diǎn),同一平面位置上的3D結(jié)點(diǎn)形成了該2D結(jié)點(diǎn)的結(jié)點(diǎn)列。圖4(a)是平面圖及其對(duì)應(yīng)的“推拉”間隔,樓層的起始高程為 75 m;圖 4(b)是圖 4(a)的 1部分,邊 e1、e2、e3將高程傳遞給結(jié)點(diǎn)a、b、c和d;圖4(c)中的點(diǎn)分別是2D結(jié)點(diǎn)a、b、c、d創(chuàng)建的3D結(jié)點(diǎn)。經(jīng)過以上處理,得到平面圖各個(gè)2D結(jié)點(diǎn)位置的3D結(jié)點(diǎn)列,同時(shí)也按從低到高的順序完成了3D結(jié)點(diǎn)高程值的排序。
生成3D結(jié)點(diǎn)列后,進(jìn)一步生成3D面。由于平面圖中2D面的方向已經(jīng)按照右手準(zhǔn)則指定為向上,這也意味著多邊形各條邊的方向被確定。對(duì)于任意1個(gè)2D面,遍歷它的每條邊,獲取當(dāng)前邊起始結(jié)點(diǎn)位置的3D結(jié)點(diǎn)列Λstart、終止結(jié)點(diǎn)位置的3D結(jié)點(diǎn)列Λend,從該邊結(jié)點(diǎn)列Λend的起始高程H(Λend)處開始爬升搜索,到達(dá)1個(gè)新的3D結(jié)點(diǎn)Nnew后,獲取該3D結(jié)點(diǎn)的高程值Hnew,然后到對(duì)面結(jié)點(diǎn)列Λstart中查找與Hnew等高的3D結(jié)點(diǎn);若沒找到,則返回到結(jié)點(diǎn)列Λend,從Hnew處的3D結(jié)點(diǎn)繼續(xù)向上爬升。重復(fù)上述的過程,直至爬升到結(jié)點(diǎn)列最高處的3D結(jié)點(diǎn),之后回到結(jié)點(diǎn)列Λstart中,從最高處開始降落搜索,直至降落到Λstart最低處的3D結(jié)點(diǎn),搜索到的 Λstart和 Λend中的 3D結(jié)點(diǎn)圍成的面即是該2D邊對(duì)應(yīng)的3D面。若在Λstart找到Hnew的對(duì)應(yīng)結(jié)點(diǎn),則直接回到結(jié)點(diǎn)列Λstart中,從Hnew對(duì)應(yīng)的3D結(jié)點(diǎn)開始降落搜索,直至降落到結(jié)點(diǎn)列中位置最低處,搜索到的3D結(jié)點(diǎn)圍成3D面。之后回到結(jié)點(diǎn)列 Λend,繼續(xù)搜索更高位置的 3D面,從高度Hnew的3D結(jié)點(diǎn)繼續(xù)向上搜索,到達(dá)新高度位置獲取新結(jié)點(diǎn)Hnew’后,再回到結(jié)點(diǎn)列Λstart中,從Hnew’對(duì)應(yīng)的3D結(jié)點(diǎn)開始降落搜索,直至到達(dá)Hnew處的3D結(jié)點(diǎn),搜索到的3D結(jié)點(diǎn)又圍成3D面,重復(fù)此過程搜索、構(gòu)建更高高度的3D面。
圖 2 廣義“推拉”示例
圖3 室內(nèi)3D重建流程
在搜索過程中,連接2個(gè)3D結(jié)點(diǎn)形成1條3D邊。如果邊是垂直邊,則其方向指定為由低處指向高處,如果是水平邊,則指定其方向和平面圖中相應(yīng)2D邊的方向一致。從高處向低處搜索和從邊終止結(jié)點(diǎn)向起始結(jié)點(diǎn)搜索時(shí),不再創(chuàng)建新的 3D邊,而是使用由相同3D結(jié)點(diǎn)已構(gòu)造的3D邊,只是在其前面標(biāo)記“-”,表示與原來的邊方向相反。3D面由生成的3D邊圍成,3D面的方向按照搜索3D結(jié)點(diǎn)的順序,根據(jù)右手準(zhǔn)則確定。
生成3D面之后需要為每個(gè)面賦予建筑部件語義。遍歷每條2D邊,找到當(dāng)前邊生成的3D面,若只有1個(gè),則直接將2D邊的建筑部件類型賦給3D面;否則,先計(jì)算當(dāng)前2D邊“推拉”間隔的左值與樓層起始高程的和,再分別取每個(gè)3D面高程值最小的3D結(jié)點(diǎn)(高程值最小的結(jié)點(diǎn)可能不止1個(gè),任取其中1個(gè))進(jìn)行對(duì)比,找出后者與前者相同的3D面,并將2D邊的建筑部件類型賦給它,剩余的3D面賦予墻。
圖5為構(gòu)建3D面的示意圖,左圖展示了3D結(jié)點(diǎn)與 3D面的方向,右圖為完成構(gòu)面的效果圖。
在構(gòu)建圖4中2D邊e1對(duì)應(yīng)的3D面時(shí),獲取起點(diǎn)a的結(jié)點(diǎn)列Λstart(圖5中A在的結(jié)點(diǎn)列)與終點(diǎn)b的結(jié)點(diǎn)列Λend(圖5中B在的結(jié)點(diǎn)列),從Λend的最低處B開始爬升搜索,到達(dá)E,在Λstart中查找與E等高的3D結(jié)點(diǎn),沒有找到,返回到Λend,繼續(xù)向上爬升,直至爬升到Λend最高處也就是G處,之后回到Λstart中,從位置最高處H開始降落搜索,直到到達(dá)Λstart的最低處A,Λstart和Λend中的3D結(jié)點(diǎn){BEFGHA}圍成1個(gè)3D面,根據(jù)這些結(jié)點(diǎn)的3D坐標(biāo)值以及各結(jié)點(diǎn)的順序在模型中創(chuàng)建相應(yīng)的3D幾何點(diǎn)、邊和面。
在構(gòu)建圖4中2D邊e2對(duì)應(yīng)的3D面時(shí),獲取起點(diǎn)b的結(jié)點(diǎn)列Λstart(圖5中B在的結(jié)點(diǎn)列)與終點(diǎn)c的結(jié)點(diǎn)列Λend(圖5中C在的結(jié)點(diǎn)列),從C處開始爬升搜索,到I后,在Λstart中找到結(jié)點(diǎn)E與I高度相同,E為I的對(duì)應(yīng)結(jié)點(diǎn),從E降落搜索,直至降落到最低處B,Λstart和Λend中的部分3D結(jié)點(diǎn){CIEB}圍成 1個(gè)3D面。之后回到 C所在的結(jié)點(diǎn)列Λend,從 I處繼續(xù)向上搜索,重復(fù)上述過程,又找了 2個(gè)結(jié)點(diǎn)序列{IJFE}、{JKGF}。最后根據(jù)結(jié)點(diǎn)序列創(chuàng)建邊、面,如面 f1={AB,BE,EF,F(xiàn)G,-HG,-AH},f2={CI,-EI,-BE,BC},其方向均按照右手準(zhǔn)則朝向外側(cè)。
圖4 3D結(jié)點(diǎn)的創(chuàng)建
圖5 3D面的創(chuàng)建
上述步驟生成了模型的各個(gè)立面,進(jìn)一步構(gòu)建水平面。水平面僅需在2個(gè)樓層之間構(gòu)建即可,水平面中各結(jié)點(diǎn)的高程相同。前面已經(jīng)生成了平面圖中各2D結(jié)點(diǎn)對(duì)應(yīng)的3D結(jié)點(diǎn)列,按照構(gòu)成2D面的邊的順序,遍歷每1條邊,在每條邊的每個(gè)2D結(jié)點(diǎn)對(duì)應(yīng)的結(jié)點(diǎn)列中,找到高度最低以及最高的 3D結(jié)點(diǎn),連接它們生成3D邊與面,3D邊的方向與2D邊的一致,3D面的方向朝上。從本質(zhì)上講,同一高度的3D邊構(gòu)面與2D空間的多邊形自動(dòng)構(gòu)建類似。
生成了模型的立面、水平面后,它們雖然在形式上圍成了體,但并沒有構(gòu)建成體,而僅僅是NEF(node-edge-face)模型。需要進(jìn)一步顯式的表達(dá)體對(duì)象,也就是將圍成體的面找出并組織成體。初始平面圖中1個(gè)多邊形重建后生成1個(gè)3D體,稱為房間體,本文采用“投影法”查找圍成1個(gè)房間體的面,具體步驟如下:
第1步:求取面內(nèi)部點(diǎn)點(diǎn)集。遍歷已生成的所有面,對(duì)于任意1個(gè)面,在構(gòu)成面的結(jié)點(diǎn)中按照逆時(shí)針方向依次取3個(gè)不共線的結(jié)點(diǎn):Ni-1、Ni、Ni+1,計(jì)算矢量叉乘Ni-1Ni×NiNi+1,若數(shù)值為正,則Ni為凸點(diǎn),計(jì)算Ni-1與 Ni+1的中點(diǎn)Nmid,Nmid即為面內(nèi)部的一點(diǎn);若數(shù)值為負(fù),則 Ni不是凸點(diǎn),沿逆時(shí)針方向依次向后順延1點(diǎn),直到找到凸點(diǎn)為止。遍歷完面后,獲得內(nèi)部點(diǎn)集{Nmid}。
第2步:進(jìn)行投影。遍歷平面圖,以當(dāng)前平面圖為投影面,計(jì)算當(dāng)前層最低高程值與最高高程值,搜索{Nmid}中結(jié)點(diǎn)的 Z坐標(biāo)在范圍內(nèi)的結(jié)點(diǎn)集中每個(gè)結(jié)點(diǎn)向投影面作垂線,垂線與投影面的交點(diǎn)稱為點(diǎn)的投影。投影后的結(jié)點(diǎn)會(huì)有2種情況:①落在投影面中某個(gè)多邊形的內(nèi)部;②落在多邊形的邊界上。實(shí)際操作中由于計(jì)算機(jī)存儲(chǔ)浮點(diǎn)數(shù)問題,投影點(diǎn)可能并不是恰好落在邊界上而是落在邊界附近1個(gè)很小的鄰域內(nèi),為此設(shè)置1個(gè)容差值,當(dāng)落點(diǎn)與邊界的距離小于容差值即視為落在邊界上。
第3步:尋找離散面。在實(shí)際情形下每個(gè)多邊形對(duì)應(yīng) 1個(gè)房間體,遍歷投影面中多邊形,判斷中落入當(dāng)前多邊形內(nèi)部與邊界的投影點(diǎn),將落入多邊形內(nèi)部的點(diǎn)對(duì)應(yīng)的面記為水平面,它們構(gòu)成了房間體的頂面和底面;將落入邊界上的點(diǎn)對(duì)應(yīng)的面記為豎直面,它們構(gòu)成了房間體的立面。為進(jìn)一步驗(yàn)證找到的立面是否為當(dāng)前房間體的面,判斷是否存在公共邊,若立面中的某個(gè)水平面存在公共邊,則為當(dāng)前房間體的立面,若沒有公共邊,進(jìn)一步在中查找與 f鄰接的立面,若這些立面中有 1個(gè)與中的某個(gè)水平面存在公共邊,則也可以判斷它是構(gòu)成當(dāng)前房間體的立面,這樣就找到了當(dāng)前房間體的所有面。
在體中各面的方向要朝向體的外部,由于之前創(chuàng)建水平面時(shí)已經(jīng)將各面的方向指定為向上,對(duì)于創(chuàng)建的各水平面,如果其高程和該層最低高程相同,則為底面,其方向應(yīng)向下,將其記為“-”,如果其高程和該層最高高程相同,則為頂面,記為“+”。通過“投影法”將圍成1個(gè)房間體的離散面組織到一起,并指定了面的方向,完成了房間體的創(chuàng)建。
為測(cè)試提出的方法,利用Ruby語言開發(fā)了1個(gè)原型系統(tǒng)。實(shí)驗(yàn)選用1個(gè)小區(qū)作為實(shí)驗(yàn)數(shù)據(jù)進(jìn)行測(cè)試,該小區(qū)有16棟建筑物,5種類型,涉及同構(gòu)、異構(gòu)、弧形、騎街等多種情況。實(shí)驗(yàn)使用的平面圖為DXF格式,“推拉”前對(duì)平面圖進(jìn)行了預(yù)處理,保留了門、窗、墻等圖層,刪除了其他圖層,并對(duì)圖形之間的關(guān)系進(jìn)行檢查,剔除錯(cuò)誤,然后對(duì)圖層中各建筑部件的起始高度和“推拉”間隔進(jìn)行了設(shè)定。實(shí)驗(yàn)使用的計(jì)算機(jī)的CPU為四核酷睿i7-4790 @3.6 GHz,內(nèi)存為 16G DDR3 1660。圖 6 是實(shí)驗(yàn)結(jié)果:圖6(a)是類型Ⅰ,它是上下異構(gòu)的建筑物,不同灰度的面表示不同類型的建筑部件;圖6(b)是類型Ⅱ,它是上下同構(gòu)的建筑物,對(duì)最上層進(jìn)行了揭蓋顯示;圖6(c)是類型Ⅲ,它也是異構(gòu)建筑物;圖6(d)是類型Ⅳ,屬于跨街建筑物—騎街樓;圖6(e)是類型Ⅴ,為拐角樓;圖6(f)是尋面構(gòu)體的實(shí)驗(yàn)效果。
圖 6 實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)對(duì)生成模型的結(jié)點(diǎn)、邊、面、體以及耗時(shí)進(jìn)行了統(tǒng)計(jì),結(jié)果如表1所示。對(duì)于普通的6、7層的建筑物,重建時(shí)間小于10 s,整個(gè)小區(qū)16棟建筑物的重建共耗時(shí)約123 s。3D數(shù)據(jù)一旦生成后可多次使用,不用考慮實(shí)時(shí)生成的需求,所以算法的耗時(shí)可以接受。此外,生成的3D模型可根據(jù)需要導(dǎo)出MDB格式的數(shù)據(jù)庫或skp格式文件。
表1 3D模型數(shù)據(jù)表
在構(gòu)建樓層模型過程中,按照拓?fù)涔蚕矸绞缴?D數(shù)據(jù)。圖7是導(dǎo)出的3維模型數(shù)據(jù):圖7(a)是結(jié)點(diǎn)表,存儲(chǔ)了節(jié)點(diǎn)的標(biāo)識(shí)(identification,ID)和點(diǎn)的3D坐標(biāo);圖7(b)是邊表,存儲(chǔ)了邊的起點(diǎn)和終點(diǎn),每條邊記錄其所引用結(jié)點(diǎn)的ID號(hào);圖7(c)是面表,存儲(chǔ)了構(gòu)成面的邊的ID號(hào);圖7(d)是體表,存儲(chǔ)了構(gòu)成體的面的ID號(hào)。通過這些表可以看出,高維拓?fù)浠ㄟ^引用低維拓?fù)浠姆绞綐?gòu)建。例如,結(jié)點(diǎn)表中高亮顯示了2條記錄,分別記錄了8412號(hào)、8413號(hào)結(jié)點(diǎn)的信息。邊表中高亮顯示了8411號(hào)邊的信息,該邊引用了結(jié)點(diǎn)表中的8412號(hào)和8413號(hào)結(jié)點(diǎn);面表高亮顯示了10879號(hào)面的信息,該面的構(gòu)建引用了8411號(hào)邊;體表高亮顯示了00000008號(hào)體的信息,該體的構(gòu)建引用了 10879號(hào)面。通過結(jié)點(diǎn)→邊→面→體遞進(jìn)引用的方式,實(shí)現(xiàn)了拓?fù)涔蚕?,減少了數(shù)據(jù)冗余,維護(hù)了拓?fù)涞囊恢滦浴?/p>
圖7 模型導(dǎo)出3維數(shù)據(jù)
在不對(duì)現(xiàn)有建筑物直接3D測(cè)量的情況下,本文提出利用已有的2D圖形資料,采用廣義“推拉”的方式重建包含樓層、房間、門、窗等室內(nèi)結(jié)構(gòu)的建筑物 3D室內(nèi)模型。該方法主要用于墻面垂直,頂面、底面平行的室內(nèi)空間建模,而現(xiàn)實(shí)世界中的絕大多數(shù)建筑物屬于該類;因此該方法具有較強(qiáng)的通用性。實(shí)驗(yàn)所采用的數(shù)據(jù)由當(dāng)?shù)胤慨a(chǎn)測(cè)繪院提供。由于樓層平面圖沒有統(tǒng)一的空間參考,實(shí)驗(yàn)采用了同名點(diǎn)校正方法進(jìn)行處理,即通過選取同一棟建筑物各個(gè)樓層平面圖中相同位置的點(diǎn)(樓拐角、樓梯角等),并以實(shí)測(cè)分丘圖(包含宗地邊界和建筑物基地輪廓的地形圖)中對(duì)應(yīng)點(diǎn)為基準(zhǔn)進(jìn)行空間校正。校正后2D數(shù)據(jù)的精度主要受到3方面的影響:①分丘圖中建筑物基地的精度,誤差在5 cm以內(nèi);②圖上選取同名點(diǎn)的圖解誤差,由于樓層平面圖是矢量圖,選取過程采用了捕捉模式,誤差很小,可以忽略;③校正誤差,即選取同名點(diǎn)后以樓基輪廓為基礎(chǔ)進(jìn)行樓層平面圖校正,誤差因選取的校正方法不同而不同。由于本文關(guān)注重點(diǎn)是重建方法,沒有對(duì)校正誤差進(jìn)行深入分析,在進(jìn)一步的工作中將對(duì)重建后的3D模型精度進(jìn)行深入的探討。
實(shí)驗(yàn)中僅涉及了門、窗、墻等建筑部件,現(xiàn)實(shí)世界中建筑物非常復(fù)雜,涉及多種建筑部件以及飄窗、躍層等復(fù)雜結(jié)構(gòu),下一步將添加更多類型的建筑部件進(jìn)行測(cè)試,完善廣義“推拉”算法,使之能支持更多類型的建筑部件重建。另外,當(dāng)前實(shí)驗(yàn)中建筑部件“推拉”間隔采用了人工指定的方式,進(jìn)一步將開發(fā)1個(gè)2D平面圖預(yù)處理程序,在現(xiàn)有2D雙線平面圖基礎(chǔ)上,提取單線平面圖,并自動(dòng)或半自動(dòng)賦以“推拉”間隔,使得前期的數(shù)據(jù)處理更加自動(dòng)化,從而提高整個(gè)建模的效率。