繆盾
(同濟大學浙江學院 土木工程系,浙江 嘉興 314000)
點云數(shù)據(jù)是通過三維激光掃描儀或機器視覺技術(shù)獲取的高精度、高密度、全數(shù)字化的目標物表征數(shù)據(jù)[1-2]。依靠逆向建模軟件還能將這些空間離散點處理成三維網(wǎng)格模型,已經(jīng)成熟地應(yīng)用于基礎(chǔ)測繪、古建保護工程中。建筑信息模型(Building Information Modeling,BIM)技術(shù)以三維建筑信息模型為核心,通過模型的分析、傳遞、共享、應(yīng)用實現(xiàn)建筑的全生命周期管理,是建筑業(yè)信息化發(fā)展的基礎(chǔ)[3]。BIM的核心建模軟件Revit設(shè)置了點云鏈接功能,但是Revit對點云的處理能力還處于顯示階段,不能直接對其進行編輯和建模。而目前基于點云生成的網(wǎng)格模型是一類表面模型,不是具有結(jié)構(gòu)特性和屬性特性的通用BIM實體模型,模型可支持的BIM應(yīng)用、分析存在很大的局限性。因此,基于點云數(shù)據(jù)創(chuàng)建BIM模型也成為目前學者研究的熱點,大致可以分為4個研究方向:(1)通過提取點云特征線,生成二維矢量圖,導入Revit中進行手動建模。呂鳳華等[4]掃描了地鐵車站,并提取點云特征線和相關(guān)參數(shù)進行BIM建模。高溪溪等[5]將古建點云數(shù)據(jù)導入計算機輔助設(shè)計軟件(Computer Aided Design,CAD)提取特征線,生成標準圖紙,通過圖紙進行BIM建模。(2)通過中間軟件人機互動識別點云中的常規(guī)構(gòu)件進行自動建模,并導出BIM兼容格式。劉立揚等[6]將點云導入點云處理軟件PointSense for Revit擬合墻面、梁柱,再導入Revit軟件;石力文等[7-8]將古建點云導入用于處理掃描點云的Revit插件(Scan for BIM)[9],對一般構(gòu)件拾取表面特征點進行建模。(3)對標準件采集點云,計算全局點云特征直方圖描述子(Viewpoint Feature Histogram,VFH),建立標準件VFH庫,通過特征值分類識別構(gòu)件調(diào)用族庫模型。苗亞哲等[10]建立了標準化管線的VFH庫。(4)通過二次開發(fā)對點云進行建模,陳海濤[11]研究了常規(guī)簡單構(gòu)件的點云幾何形狀參數(shù),利用二次開發(fā)工具集(Visual Studio)實現(xiàn)點云的BIM重建。前兩個方向是目前采用較多的方式,但是存在大量的人工作業(yè),對模型精度有一定的干擾;方向(3)使用面較窄,適用于設(shè)備(Mechanical,Electrical&Plumbing,MEP)建模;而方向(4)可以直接編輯和建模點云,人為干擾少但對編程要求高。文章采用攝影測量的方法獲取目標物的密集點云數(shù)據(jù),在可視化編程平臺Dynamo中對預(yù)處理后的點云進行分層編輯分段建模,實現(xiàn)點云自動化建模。
Dynamo是歐特克Autodesk公司推出的功能強大、使用便捷的可視化編程軟件。使用者不必一行行寫程序代碼,甚至不必掌握編程語言,通過簡單地鏈接預(yù)定義功能節(jié)點,輕松創(chuàng)建自己的算法[12]。Dynamo啟動與界面如圖1所示。
圖1 Dynamo啟動圖標與界面圖
Dynamo擁有強大的功能節(jié)點庫,包含了分析、圖形、操作、運算等8大特定功能節(jié)點類型,如圖2所示。節(jié)點與節(jié)點之間通過輸入、輸出端口連接,運行結(jié)果同步顯示在Revit中,體現(xiàn)了“所見即所得”的編程思想。
圖2 節(jié)點展示圖
點云解析了物體表面密度極高的離散點空間信息,其中包含了建模所需的特征點信息,還有大量的冗余信息,影響建模效率。同時也存在處于同一局部區(qū)域內(nèi)的點云,而實體屬性是不唯一的情況,影響建模的準確性。因此,在建模之前首先需要對原始點云進行分類和分割,以色彩信息和點法矢信息分類后得到屬性唯一的構(gòu)件級點云,通過點云切片分段建模的方式進行模型自動生成,具體建模思想是:(1)求點云三維度的極值分別為xmin、xmax、ymin、ymax、zmin和zmax,計算點云包圍盒表面積,再根據(jù)點云數(shù)量計算點云平均面密度;(2)在選定方向?qū)c云進行切片,切片數(shù)n設(shè)置為輸入型參數(shù),并計算切平面上、下一個閾值范圍內(nèi)的點集;(3)將上、下點集投影至切平面求交,通過離散點擬合[13]得到n個截切邊界輪廓;(4)相鄰邊界輪廓進行放樣融合創(chuàng)建分段實體;(5)分段實體組合、族類別設(shè)置、材質(zhì)設(shè)置以及其余實例屬性值設(shè)置。該方法對具有復(fù)雜表面的建筑構(gòu)件有很好的建模表現(xiàn),通過調(diào)正切片數(shù)還能得到精細化程度不同的實體模型。
點云的采集方式有激光掃描和照片掃描兩種。相對于激光掃描而言,照片掃描具有更大的靈活性和便捷性[14],工作人員只需通過普通相機對目標物進行拍照,保證每兩張相片有50%的重疊度,那么通過實景掃描與三維建模軟件Agisoft Photoscan[15]即可重構(gòu)重疊區(qū)的像素點,生成點云數(shù)據(jù)。在Agisoft Photoscan軟件中選擇通過顏色、紋理和法矢信息進行點云分類,得到屬性一致的點云,采集的石墩三維點云如圖3所示。
圖3 基于照片的三維點云重構(gòu)圖
按照點云類別標記碼批量導出分類后的點云,其形式可選為電子表格Excel三維坐標點格式,并由Dynamo的讀取數(shù)據(jù)功能節(jié)點導入點云。搜尋點云坐標中的極大、極小值,點云包圍盒面積S由式(1)表示為
式中S為點云包圍盒面積,m2;xmin、xmax為x維度極值,m;ymin、ymax為y維度極值,m;zmin、zmax為z維度極值,m。
點云面密度δ由式(2)表示為
式中δ為點云面密度,點/m2;N為點云總量,點。
根據(jù)點云形態(tài)確定切片的基面,如某一維度顯著大于另兩個維度,則選擇該維度的垂面為切片基面,這樣可以精確控制模型的外形。一般情況選擇z方向即高度方向為截切方向,切片為一系列平行的水平面。用戶通過滑動條控制切片數(shù)量n,每個切片的z值由式(3)表示為
為了避免切平面上的點出現(xiàn)局部空缺或點稀疏現(xiàn)象,設(shè)置點云密度δ為切片閾值,增補處理切平面上、下δ范圍內(nèi)的點。切平面Q將閾值范圍內(nèi)的局部點云分為上、下兩部分點集p z i+δ( )和p′z i-δ( ),將上、下點集中的點以歐式最短距離配對,如圖4所示。
圖4 某一切平面Q的點云投射示意圖
求與上部點p1歐式距離最短的下部點p′1,則兩點連線與切平面的交點為增補點p,根據(jù)相似原理,增補點p的切平面二維坐標 (x p,y p)由式(4)表示為
依次計算得到每個切平面的點集。
上一個步驟中得到的切面點集是無序的,對這些離散點進行曲線擬合的前提是點按正向或逆向有序排列。由于切面點集最終將擬合成一條封閉的平面回轉(zhuǎn)曲線,曲線上的某一x值或y值對應(yīng)曲線上的點不唯一(除極點外),因此需對點集進行劃分,再進行坐標值對比排序,以某一個切平面xOy為例,具體步驟為:
(1)求取切面點集中的x向或y向極值(文章采用x向),即求得xmin、xmax,及對應(yīng)的極點p1、p2,則極點連線將點集分為兩部分,如圖5所示。
圖5 點集有序化示意圖
(2)求取極點連線方程,方程式為y=,選擇點集中下一個點p i(x i,y p i),計算x i處p1p2連線上的點g i的y g i值。
(3)比較p i點和對應(yīng)g i的y值,若y p i>y g i,則該點納入列表1,若y p i<y g i,則該點納入列表2,重復(fù)第2、3步,完成所有點的分類。
(4)對列表1中的點進行正向排序,列表2中的點進行逆向排序,即列表1的點按x值從小到大排列,列表2的點反之,兩個列表合并為一個列表,則得到一個完整有序的切面點集。
在Dynamo中完成點云的讀取到BIM自動建模,共設(shè)計了三維點云讀取和重采樣顯示、點云切片、實體建模和屬性賦值4大主體節(jié)點鏈。以斯坦福兔子點云數(shù)據(jù)和室外石墩的照片重建點云數(shù)據(jù)為實驗樣本,測試其方法的可行性和可靠性。
點云的讀取根據(jù)原始數(shù)據(jù)類型的不同,設(shè)計了鏈接點云模型和點云文本數(shù)據(jù)兩種讀取方式,采用滑動條方式輸入重采樣的距離閾值,通過功能庫中的顯示坐標點節(jié)點(Point.ByCoordinates)顯示點云。具體節(jié)點鏈及程序結(jié)果如圖6所示。
圖6 點云顯示及簡化圖
通過創(chuàng)建平面節(jié)點(PlanXY)創(chuàng)建一個xOy平面,并偏移至點云底部,選用轉(zhuǎn)化節(jié)點(Geometry.Translate)進行切平面布置,如圖7所示。
圖7 兔子點云切片圖
點云經(jīng)過重采樣后呈現(xiàn)無序和稀疏的狀態(tài),切平面上可能存在無點或少點附著的情況,因此對切平面上下閾值范圍內(nèi)的點進行投影求交。選用Dynamo節(jié)點庫中的通過對角點建立方體節(jié)點(Cuboid.ByCorners)創(chuàng)建點云包圍盒,計算面密度作為閾值,如圖8(a)所示。創(chuàng)建閾值包圍盒,通過包圍盒判別節(jié)點(BoundingBox.Contain)判別盒內(nèi)點集,如圖8(b)所示。再啟用叉積計算上盒與下盒點集的直線長,取每個點的連綴最短值為上下盒點對匹配關(guān)鍵碼,匹配后的點對按式(3)計算切平面投影點,得到切面點云,如圖8(c)所示。
圖8 點云切片圖
切面點集有序化通過自定義節(jié)點實現(xiàn),以循環(huán)語句判別點的歸屬表,選用Dynamo平臺中的通過控制點擬合曲線的節(jié)點(NurbsCurve.ByControlPoints)擬合切面點,得到閉合的截面曲線。通過輸入橫截面閉合曲線放樣創(chuàng)建實體,該功能由放樣創(chuàng)建實體節(jié)點(Solid.ByLoft)實現(xiàn),如圖9(a)所示。
通過屬性設(shè)置及輸出節(jié)點(Springs.FamilyInstance.ByGeometry)為模型賦予材質(zhì),選擇族類別,設(shè)置名稱等屬性性質(zhì)。此節(jié)點能自動調(diào)用Revit軟件中的材質(zhì)庫和族庫,對于如古建中的屋脊,吻獸等構(gòu)件可先在Revit中創(chuàng)建相應(yīng)族類別名稱和路徑,在Dynamo中即可選擇該類別。對石墩進行屬性設(shè)置,在該節(jié)點的輸入端選擇石墩的實體類別為“常規(guī)模型”,材料為“花崗巖”,在Revit中得到如圖9(b)所示的實體模型。增加切面數(shù)量,將得到更精細的實體模型,石墩底部增加切面后細節(jié)表示更詳細,一般在形體復(fù)雜或突變的位置可增加切面數(shù)量,規(guī)則位置處可減少切面數(shù)量。模型同步導入Revit中,并保存為標準格式,不僅能通過Revit軟件中的編輯族命令進行二次編輯或改造,還能導入相應(yīng)的應(yīng)用軟件使用。
圖9 點云BIM實體模型圖
利用點云構(gòu)建BIM模型能有效利用實時采集信息,擴展建模途徑,提高建模效率。通過研究得到以下結(jié)論:
(1)以照片掃描方式獲取的點云為素材,在Dynamo平臺構(gòu)建了點云顯示、簡化、切片、投影和建模的節(jié)點鏈,實現(xiàn)了點云到切面輪廓到模型的自動化建設(shè),為表面形態(tài)復(fù)雜且無規(guī)則變化的構(gòu)件提供了一種有效的自動化建模方法。
(2)在Dynamo平臺鏈接Revit屬性庫和定義切面數(shù),能獲得不同屬性和精細度的建筑信息模型,為后續(xù)模型應(yīng)用提供標準模型格式和信息數(shù)據(jù)。
(3)節(jié)點鏈設(shè)置為通用的樣板文件,可為不同點云數(shù)據(jù)實時調(diào)用,提高建模效率。為存量古建保護和既有建筑維護提供有效的實時信息數(shù)據(jù)。