閻衛(wèi)東,石日新,王井利,劉國奇,馬 健
(沈陽建筑大學(xué)交通與測繪工程學(xué)院,遼寧 沈陽 110168)
由于年久失修、氣候干擾、人為損傷等原因,古建筑中的木結(jié)構(gòu)會發(fā)生各種形式的破壞,其中裂縫是最常見的損傷形式[1]。且隨著時間推移會出現(xiàn)不可逆轉(zhuǎn)的結(jié)構(gòu)損壞,甚至造成建筑物坍塌,因此對古建筑木結(jié)構(gòu)裂縫檢測具有重要意義。
傳統(tǒng)人工測量存在工作難度大、效率低等問題,因此學(xué)者們提出了一系列基于圖像識別深度學(xué)習(xí)的方法來檢測圖像中的裂縫,其中以區(qū)域分割方法最為經(jīng)典[2-3]。R.Girshick[4]在Faster R-CNN網(wǎng)絡(luò)中添加預(yù)測物體掩碼信息的分支,K.He等[5]提出了經(jīng)典的Mask R-CNN 實例分割網(wǎng)絡(luò),實現(xiàn)了圖像的目標(biāo)檢測。馬健等[6]使用YOLOv5來識別圖像中的裂縫。與YOLO等目標(biāo)檢測網(wǎng)絡(luò)相比,Mask R-CNN包含的“實例”信息可以更精確地刻畫裂縫的區(qū)域,而不僅僅是裂縫處的包圍盒。韓士偉等[7-8]利用三維重建技術(shù)將古建筑的整體結(jié)構(gòu)、表面紋理等信息進(jìn)行重建,獲得裂縫檢測工作中所需要的裂縫大小、深度等具體信息。韋虎等[9-10]利用雙目立體視覺與多視幾何技術(shù)恢復(fù)古建筑表面的三維結(jié)構(gòu)與紋理,精度提高,但計算速度慢。阮競蕓等[11-13]使用深度相機(jī)拍攝多視角深度圖,利用立體匹配與特征匹配技術(shù)計算各視角下的相機(jī)位姿,再將深度圖融合到三維空間,其特點是速度快,可以實時地完成重建,更適合大規(guī)模古建筑的三維重建工作,但其精度較低。S.Izadi等[14]使用柵格化的方式表示整個三維場景,利用高速的GPU設(shè)備,通過截斷距離函數(shù)計算空間中每一個柵格到其最近表面的距離。A.Dai等[15]在M.Nieβner 等[16]提出的Voxel Hashing算法基礎(chǔ)上改進(jìn),提出了Bundle Fusion三維重建系統(tǒng),引入從局部到全局的相機(jī)位姿優(yōu)化策略,在重建大型建筑上具有更好的魯棒性,但此類三維重建方法,僅生成一個由點云構(gòu)造的三維模型,不能識別分析模型中包含的裂縫信息。J.Mccormac 等[17-19]提出將圖像識別和三維重建聯(lián)合的方法,利用CNN網(wǎng)絡(luò)識別場景中不同語義的區(qū)域,可將識別到的物體融合到三維模型中。這類方法重建精度較低,很難將裂縫刻畫清晰。
綜合以上研究,筆者使用Mask R-CNN實例分割網(wǎng)絡(luò)提取古建筑木結(jié)構(gòu)表面的裂縫信息,使用基于Bundle Fusion系統(tǒng)的三維重建框架將裂縫信息與圖像信息應(yīng)用到三維重建中,建立一個含有裂縫信息的古建筑三維結(jié)構(gòu)模型。進(jìn)而提出一個裂縫分析方法,在生成含裂縫信息的三維模型后,計算裂縫的長度和深度。將Voxel Hashing算法中體素的結(jié)構(gòu)推廣到不同分辨率的應(yīng)用場景中,以實現(xiàn)速度快、精度高的三維重建。
圖1描繪了裂縫識別與多分辨率三維重建方法系統(tǒng)框架,包括裂縫識別與相機(jī)位姿優(yōu)化模塊、三維重建模塊和裂縫分析模塊。
圖1 系統(tǒng)框架Fig.1 The framework of system
圖2為裂縫識別與相機(jī)位姿優(yōu)化模塊,該模塊的輸入為一個RGBD視頻流,裂縫識別與相機(jī)位姿優(yōu)化在此模塊的兩個線程中并行執(zhí)行。
圖2 裂縫識別與相機(jī)位姿優(yōu)化模塊Fig.2 The crack recognition and camera pose optimization module
1.1.1 相機(jī)位姿優(yōu)化
1.1.2 裂縫識別
每間隔k幀進(jìn)行一次裂縫識別,以使相機(jī)位姿優(yōu)化與裂縫識別速度一致。對于到達(dá)的RGBD幀It(tmodk=0),將其中的RGB圖像輸入到Mask R-CNN網(wǎng)絡(luò)中預(yù)測其實例信息Mt。
Mt和It尺度一致,記錄了實例所屬的類別以及相應(yīng)的位置,即Mt(x,y)=m,其中m∈{0,c}為像素的掩碼值,c為Mask R-CNN網(wǎng)絡(luò)訓(xùn)練時裂縫的標(biāo)簽。Mt中存儲了It每一個像素對應(yīng)的裂縫信息,此信息與It中顏色和深度信息都要被融合到TSDF模型中。由于裂縫識別模塊與相機(jī)位姿優(yōu)化模塊在不同的線程中執(zhí)行且裂縫識別并不是在每一幀都執(zhí)行,因此當(dāng)It進(jìn)行融合時,Mt可能還未計算得到。為了解決這一問題,將Mt信息存儲在程序中,在重新融合It時判斷其是否有對應(yīng)的Mt,若存在則融合Mt。
1.2.1 三維重建模型結(jié)構(gòu)
在Voxel Hashing算法的基礎(chǔ)上,新增一個多分辨率模型來存儲重建的三維結(jié)構(gòu)信息和裂縫信息。此模型使用體素塊來表達(dá)三維場景,體素塊分為基本塊和細(xì)化塊,基本塊中存儲初始重建的3D數(shù)據(jù)和裂縫的實例信息,細(xì)化塊中存儲細(xì)化的3D數(shù)據(jù)。圖3展示多分辨率重建模型的結(jié)構(gòu)。使用哈希表和細(xì)化表來管理基本塊和細(xì)化塊。每一個基本塊和細(xì)化塊都對應(yīng)真實場景的一個三維坐標(biāo)。每個基本塊和細(xì)化塊的邊長為 0.08 m,在當(dāng)前的實現(xiàn)中,一個基本塊由83個體素組成,一個細(xì)化塊由323個體素組成,基本塊中相鄰體素之間的距離為10 mm,細(xì)化塊中相鄰體素之間的距離為2.5 mm。
圖3 多分辨率重建模型Fig.3 The multi-scale reconstruction module
當(dāng)拍攝到一幀后,根據(jù)此幀的相機(jī)位姿計算位于It相機(jī)視野下的基本塊,并獲得這些基本塊中體素的三維坐標(biāo)W=(x,y,z),通過哈希函數(shù)計算哈希條目:
H=(p1x+p2y+p3z)modn.
(1)
式中:p1,p2,p3為最大的素數(shù);n為哈希表的大小。每一個基本塊的內(nèi)存位置可以由H索引,每一個體素的內(nèi)存位置可以由與其所屬基本塊的坐標(biāo)偏差計算得到。將基本塊中的體素投影到It的成像平面,讀取It中RGB圖像、深度圖像和掩碼圖像投影點的值,計算投影點處相應(yīng)的信息,即SDF、權(quán)重、顏色和掩碼信息。若投影點恰好是裂縫所在的位置,則細(xì)化該基本塊——即在細(xì)化表中順序查找一個空閑的細(xì)化條目,將此細(xì)化條目存儲在It相機(jī)視野下的基本塊中,再將細(xì)化塊中的體素投影到It的成像平面,計算投影點處對應(yīng)的SDF、權(quán)重、顏色和掩碼信息。
1.2.2 含語義信息的體素融合
將基本塊中每個體素的世界坐標(biāo)W投影到It的成像平面上,得到二維投影點p:
(2)
式中:Tc∈R3×3為相機(jī)的內(nèi)參矩陣。新計算的SDF值D′、權(quán)重值E′、顏色值C′見式(3)~(5):
D′=Depth(p)-WZ.
(3)
E′=1-Depth(p)/dmax.
(4)
C′=RGB(p).
(5)
式中:dmax為融合允許的最大深度值;WZ為W在z軸上的距離;Depth()函數(shù)和RGB()函數(shù)為獲取It對應(yīng)的深度圖和RGB圖中指定像素的深度值和顏色值。然后將D′、E′、C′的值加權(quán)融合到D、E、C中。
M′=Mask(x,y).
(6)
Mask()函數(shù)為獲取掩碼圖中指定像素的掩碼值,將M′融合到M中,得出:
(7)
細(xì)化M>0的基本塊,即通過1.2.1節(jié)中的方法,建立細(xì)化塊中體素之間的關(guān)聯(lián)和存儲位置,并按照上述方法更新細(xì)化塊中體素的值。最終得到一個包含裂縫信息的木結(jié)構(gòu)三維模型,模型中以體素的形式表達(dá)了木結(jié)構(gòu)的形狀、紋理與裂縫信息。
1.2.3 裂縫長度與深度分析
基于裂縫一般呈現(xiàn)條狀特點,使用裂縫的長度來表示裂縫的大小。在三維空間中,采用歐式聚類法分割被標(biāo)記為裂縫的體系,同時計算其包圍盒,使用包圍盒長軸的長度來描述裂縫的長度。
在計算裂縫的深度時,提取每一個裂縫所在的局部平面,使用RANSAC構(gòu)造三維平面約束。在裂縫區(qū)域的點云中隨機(jī)選取3個點,計算其初始平面方程Ax+By+Cz+D=0。計算裂縫區(qū)域每一個點到初始平面的距離di=|Axi+Byi+Xzi+D|,若di小于距離閾值(默認(rèn)采用0.02m),則記錄該點為模型的內(nèi)樣本點,根據(jù)內(nèi)樣本點計算新的平面方程。迭代每一個點到新的平面方程的距離,尋找最優(yōu)內(nèi)樣本點和平面方程。計算裂縫區(qū)域點云到最優(yōu)平面方程的最大值,記為裂縫的深度信息dm。
目前關(guān)于裂縫的數(shù)據(jù)集較少,包含裂縫的RGBD數(shù)據(jù)集則更少。選用Red Wood[21]公開數(shù)據(jù)集中HUT 03056序列作為實驗數(shù)據(jù)集。此序列包含一個完整的木屋結(jié)構(gòu),墻體中存在部分開裂的情況。同時使用labelme標(biāo)注工具,將序列中的裂縫標(biāo)注出來以供Mask R-CNN網(wǎng)絡(luò)訓(xùn)練,訓(xùn)練參數(shù)如表1所示。
表1 Mask R-CNN訓(xùn)練參數(shù)Table 1 The training parameters of Mask R-CNN
在Red Wood數(shù)據(jù)集上訓(xùn)練Mask R-CNN網(wǎng)絡(luò),并使用訓(xùn)練后的網(wǎng)絡(luò)識別數(shù)據(jù)集和真實場景中的裂縫,如圖4 所示。
圖4 Mask R-CNN識別結(jié)果Fig.4 The result of Mask R-CNN
按1.2.2方法將融合進(jìn)三維模型的裂縫信息以體素的形式提取出來,通過式(2)將體素投影到識別的掩碼圖像中,與所識別的結(jié)果拼接。在Red Wood數(shù)據(jù)集和真實場景中均超過了Mask R-CNN的識別精度,表明所提出將融合的裂縫信息投影到二維平面來補(bǔ)償識別的方法是有效的(見表2)。
圖5為三維重建部分的實驗結(jié)果,使用DirectX顯示當(dāng)前工作的實時結(jié)果,和Bundle Fusion一致。
圖5 三維重建運行效果Fig.5 The performance of 3D reconstruction
圖6為多分辨率三維重建與Bundle Fusion(BF)重建結(jié)果,多分辨率的三維重建將木結(jié)構(gòu)裂縫表面刻畫得更清晰。
圖6 BF重建與多分辨率重建結(jié)果對比Fig.6 The comparison of reconstruction results in BF and multi-resolution method
Bundle Fusion采用Voxel Hashing算法進(jìn)行建圖,其TSDF模型是該算法的核心,此模型使用間距10 mm的體素表達(dá)重建的場景。在這種均勻的體素空間中,精度每提升1倍,體素的顯存占用量就會擴(kuò)大8倍。將整個空間劃分為基本塊和細(xì)化塊。當(dāng)重建精度為10 mm時,Bundle Fusion需占用468.75 MB顯存空間,當(dāng)重建精度是2.5 mm時,需占用30 000 MB顯存的空間。筆者提出的方法僅對部分區(qū)域細(xì)化后,達(dá)到2.5 mm的精度僅需占用3 843.75 MB顯存空間,在保持顯存空間不變下可以提高三維重建的精度。
實驗中重建和識別裂縫的效果如圖7所示。在三維體素空間中標(biāo)注每一個裂縫所在的位置,當(dāng)體素轉(zhuǎn)為網(wǎng)格后,將裂縫對應(yīng)體素位置用深色標(biāo)注,并用方框標(biāo)志每個裂縫的區(qū)域。圖7(a)為Red Wood數(shù)據(jù)集中的重建與裂縫識別結(jié)果,場景包含11個裂縫,正確識別10個裂縫;圖7(b)為真實場景中的重建與裂縫識別結(jié)果,場景包含2個裂縫,正確識別2個裂縫。在沒有裂縫的區(qū)域,圖7(a)中誤識別1處,圖7(b)中誤識別2處。這是由于將圖像識別網(wǎng)絡(luò)與三維重建相結(jié)合,會在多次圖像識別中造成誤判。為解決此問題,采用面積過濾的方法,將所識別的長度小于閾值(0.2 m)的區(qū)域舍棄,以此提高識別精度。
圖7 裂縫識別與重建Fig.7 The recognition and reconstruction of crack
由于Red Wood數(shù)據(jù)集中不包含裂縫的長度信息,因此從RGB圖中讀取裂縫兩端像素值,再讀取深度圖中對應(yīng)的深度值,即對應(yīng)像素到相機(jī)光心的距離,根據(jù)兩點坐標(biāo)計算得出裂縫的長度。表3為場景中9個裂縫的長度測量值與實際值的對比,其中,裂縫實際長度為現(xiàn)場采用手工測量方式獲取。細(xì)化前為單一分辨率三維重建計算得到的裂縫長度,其平均誤差率為12.3%,細(xì)化后為多分辨率三維重建計算得到的裂縫長度,平均誤差率為9.3%。
表3 裂縫長度分析Table 3 The analysis of crack length
使用RANSAC算法擬合每一個裂縫所在平面,并計算裂縫的最大深度。由于Red Wood數(shù)據(jù)集僅包含每一幀像素到光心的距離,很難通過像素到光心的距離得出裂縫的實際深度值,因此裂縫深度分析結(jié)果僅與真實場景中人工測量值進(jìn)行比對(見表4)。
表4 裂縫深度分析Table 4 The analysis of cracks depth
經(jīng)計算,單一分辨率三維重建的平均深度誤差率為36.8%,多分辨率三維重建的平均深度誤差率為19.7%。
(1)通過細(xì)化裂縫處重建效果,在Red Wood數(shù)據(jù)集中將圖像識別精度從原49.94%提高到88.13%,在真實場景中將圖像識別精度從原32.11%提高到54.30%。
(2)與人工測量結(jié)果比對計算誤差率,在Reg Wood數(shù)據(jù)集中,與單一分辨率重建方法相比,多分辨率方法的裂縫長度平均誤差率從12.3%降低到9.3%。
(3)在真實場景中,與單一分辨率重建方法相比,多分辨率方法的深度平均誤差率從36.8%降低到19.7%。