崔曉東,楊 霞,范冬梅
(1.上海南康科技有限公司,上海 200030; 2.上海市房地產(chǎn)科學研究院,上海 200031)
目前,在建筑外立面檢測方面,比較成熟、效率高、應用廣泛的檢測技術主要為外觀檢測,并輔助于紅外熱像法檢測。其中,外觀檢測一般借助于無人機拍攝外觀照片。為確保拍攝的可見光照片或紅外熱像照片的精度能分析出外立面損壞現(xiàn)狀,拍攝照片范圍不能太大,一般為3~4個樓層。為此,對于高層建筑,現(xiàn)場檢測拍攝的可見光及紅外照片較多,且呈碎片化狀態(tài)。一方面,照片數(shù)量大,內(nèi)業(yè)分析工作量大;另一方面,外立面不同樓層的照片區(qū)分度不高,設計和施工人員很難根據(jù)零散的局部照片判斷外立面損壞的具體部位及損壞范圍和程度,即在檢測不給出立面損傷圖的情況下,檢測結(jié)果的可讀性較差;而繪制立面損傷圖給檢測人員帶來更多工作量,且直觀性較差。
隨著城市更新規(guī)模的不斷擴大,房屋安全檢測的作業(yè)量也在迅速增加,由此產(chǎn)生大量圖像數(shù)據(jù)需分析處理,這就迫切需要一個更加智能的自動化或半自動化方法加快這一進程。
目前在空鼓檢測作業(yè)方面主要依據(jù)文獻[1-3]等相關規(guī)范進行,現(xiàn)已有一些對空鼓檢測方法的研究。文獻[4]提到由北京交通大學研究的空鼓率自動檢測裝置,使用主動式紅外熱成像技術,可對空鼓進行無損、遠程、有效檢測。其基本原理為,空鼓區(qū)域相比于正常區(qū)域散熱要慢得多,使用主動熱源對瓷磚表面進行均勻加熱時,空鼓區(qū)域的表面溫度要高于正常區(qū)域的表面溫度,空鼓區(qū)域邊界處的溫度梯度要明顯高于其他區(qū)域的溫度梯度。文獻[5]提到一種基于神經(jīng)網(wǎng)絡的空鼓智能識別檢測裝置,應用在空鼓檢測的技術領域,解決空鼓檢測完全依賴人工帶來的檢測效率低、普及性差的技術問題。
為此,在單張照片處理方面,研究紅外照片空鼓自動識別技術,從而提高外立面檢測結(jié)果的處理效率。在檢測結(jié)果可讀性方面,研究照片拼接技術,在拼接處理過程中,首先處理拍攝角度產(chǎn)生的圖片變形問題,即把照片轉(zhuǎn)化為正視照片(拉垂直),然后進行拼接,以東、南、西、北某個立面為單元,把處理后的、呈碎片化的可見光或紅外照片拼接在一起,形成某個立面的正視照片,從而將該立面的空鼓等損傷展現(xiàn)在一張正視立面照片上,大大提高檢測結(jié)果的可讀性。
同時,為了進一步提高整幢建筑檢測結(jié)果的可讀性,研究建筑立面三維模型技術及立面貼圖技術,首先建立外輪廓三維模型,然后將損傷照片或紅外照片通過貼圖方式與三維模型有機結(jié)合,形成建筑外立面損傷三維展示模型。
本文擬將計算機視覺(computer vision)技術應用于空鼓檢測方法的研究。這項技術類似于計算機模擬人的視覺,照相機相當于計算機的“眼睛”,算法則相當于計算機的“大腦”,所以計算機既可 “看”也能 “思考”。
當下,OpenCV是一個被廣泛使用的開源的計算機視覺庫,在圖像識別、視頻監(jiān)控、人工智能等領域具有強大功能。而Python也是時下強勢崛起的計算機編程語言,在科學計算、數(shù)據(jù)挖掘、人工智能等方面具有突出的優(yōu)勢?,F(xiàn)在可非常便利地在Python語言中運用OpenCV的模塊,將二者的優(yōu)點充分結(jié)合起來解決實際問題。
本文采用“OpenCV+Python”的模式[6]運用計算機視覺技術對建筑外墻飾面空鼓分析進行了探索。
對于1幢高層建筑,通常需連續(xù)多張紅外熱像圖才能完整呈現(xiàn)1面外墻的溫度分布,而這些紅外熱像圖在拍攝時必然會隨著高度的變化存在偏移、重疊,如拍攝時相機存在傾斜角度或旋轉(zhuǎn)角度,還會因為透視作用導致墻面“變形”。
對于墻面同一位置,如拍攝的時間段不同,其溫差也會有較大變化。歸結(jié)起來,需重點解決以下3個基本問題:
1)紅外熱像圖形變處理問題 一般地,墻面應呈矩形,但由于相機的透視作用,實際拍攝的圖像使得矩形墻面呈現(xiàn)近似于梯形的四邊形,需將墻面圖像還原為矩形。
2)紅外熱像圖連續(xù)拼接問題 紅外熱像分析的對象是整個墻面,但實際的紅外熱像圖是若干張“離散”的圖像,需將其還原成單張墻面“連續(xù)”的圖像。
3)建筑外墻飾面空鼓識別問題 以自動化手段找出墻面上“疑似”空鼓位置。
為此,有必要探究能解決這些問題的計算機算法。在計算機視覺技術中,已有許多較成熟的算法,這些算法的背后通常也有較復雜的數(shù)學原理,本文重點強調(diào)這些方法如何因地制宜地應用,使之成為幫助提升工作效率和成果質(zhì)量的有力工具。
在Python語言中,一般都是通過“cv2”模塊調(diào)用計算機視覺相關的算法和功能,可在代碼開始位置用“import cv2”語句引入,然后組合調(diào)用“cv2”的相關方法完成特定需求。本研究處理的主要對象是圖像,它由指定寬度和高度的連續(xù)像素組成,每個像素由取值為0~255的紅、綠、藍3個非負整數(shù)分量構成。
本研究所采用的軟件工具為OpenCV 4.0,Python 3.9,操作系統(tǒng)為Windows 11。
將紅外成像圖中“梯形”墻面還原為實際的“矩形”墻面,是透視變換的相反過程,解決這一問題的方法之一是使用單應性矩陣(Homography matrix)進行變換。
在照相機拍照時,將三維空間坐標(x,y,z)映射到二維平面坐標(x′,y′),這對應1組坐標變換公式,呈現(xiàn)的是具有透視效果的平面圖像。單應性矩陣變換則可實現(xiàn)反向過程,把二維平面坐標(x′,y′)“看作”三維空間坐標(x,y,z),再映射到1個新的二維平面上。這個變換過程會同步完成像素的線性插值以保證新圖像的連續(xù)性。
使用Python語言實現(xiàn)該功能的基本步驟如下。
1)讀取圖像到變量image。
2)在圖像上選取墻面輪廓的4個控制點(坐標單位是像素),放入變量srcPoints數(shù)組中。
3)按墻面實際高度和寬度等比例換算像素高度h和像素寬度w,生成墻面的矩形控制點數(shù)組dstPoints,包括4個坐標點,左上角為(0,0),右下角為(h-1,w-1),按順時針順序排列,即(0,0),(0,w-1), (h-1,w-1),(h-1,0)。
4)調(diào)用cv2.getPerspectiveTransform(srcPoints, dstPoints)獲得透視變換矩陣matrix。
5)調(diào)用cv2.warpPerspective(image, matrix, (h,w))獲得變換后結(jié)果result。
這段過程作用于圖1所示墻面紅外熱像原始圖,在其正面墻面選取4個點,近似構成1個梯形,然后指定1個目標矩形區(qū)域,根據(jù)這2個變量得到透視變換矩陣,然后實施單應性矩陣變換,得到最終變換后的圖像result,如圖2所示。
圖1 墻面紅外熱像原始圖
圖2 還原后的墻面紅外熱像圖
這段代碼呈現(xiàn)的是單應性矩陣變換的一般性原理,關鍵點有2個:①原始圖上透視四點的選擇,這可借助圖像邊緣檢測技術自動識別,也可采用手動選取方式完成;②目標矩形的選擇,需確定合適的寬高比,這可結(jié)合實際檢測獲取真實的墻面寬高數(shù)據(jù)來解決。
將同一外墻的1組紅外熱像圖拼接成1幅整個墻面,其原理與使用相機拍攝全景照片的過程相似。
圖像拼接的一般性原理就是尋找2幅圖像間相同或高度相似的特征點,將2幅圖像匹配的特征點合并在一起便可完成圖像拼接。
在OpenCV的2D特征(feature2d)模塊中提供了多種特征點檢測方法,在此主要介紹SIFT(scale invariant feature transform,尺度不變特征變換)算法的應用。
SIFT算法具有不隨圖像尺度旋轉(zhuǎn)變化而變化的特征,即SIFT特征在圖像放大、縮小或旋轉(zhuǎn)時不會改變,該方法適合采用無人機搭載可見光相機或手持相機拍攝照片的拼接處理。
使用Python語言實現(xiàn)該功能的基本步驟如下。
1)讀取圖像A和B到變量imageA,imageB。
2) 分別以imageA和imageB為參數(shù)調(diào)用子程序detectAndDescribe圖像A,B的特征點及特征描述,輸出(kpsA,featuresA)和(kpsB,featuresB)。
3)調(diào)用cv2.BFMatcher()建立暴力匹配器matcher。
4)調(diào)用matcher.knnMatch(featuresA,featuresB,k=2)進行knn檢測(k=2),得到匹配數(shù)據(jù)數(shù)組rawMatches。
5)對rawMatches數(shù)組中的元素進行篩選,當最近距離跟次近距離的比值小于ratio值(介于0~1,如可選取ratio=0.75)時,保留此匹配對,否則舍棄。
6)當篩選后的匹配對≥4時,從kpsA和kpsB中選取對應坐標點ptsA和ptsB作為輸入,調(diào)用cv2.findHomography(ptsA, ptsB, cv2.RANSAC, reprojThreshold)計算視角變化矩陣(hmatrix, status),其中cv2.RANSAC 表示使用基于RANSAC(Random Sample Consensus)的魯棒算法,reprojThreshold是最大允許重投影錯誤閾值,通常設置在1~10。
7)取imageA的寬度和高度分別為h和w,調(diào)用cv2.warpPerspective(imageB, hmatrix, (h,w),flags=cv2.INTER_LINEAR + cv2.WARP_INVERSE_MAP)對imageB進行變換。
8)將imageA和imageB合并。
子程序detectAndDescribe()的實現(xiàn)過程如下(以image為參數(shù))。
1)調(diào)用cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)將彩色圖片轉(zhuǎn)換成灰度圖gray。
2)調(diào)用cv2.SIFT_create()建立SIFT生成器descriptor。
3)調(diào)用descriptor.detectAndCompute(gray, None)檢測SIFT特征點,得到控制點和特征描述(kps, features)并返回。
下面是具體采用SIFT算法進行特征點匹配的例子,展示了原始圖像A(見圖3a)和B(見圖3b),以及特征點匹配結(jié)果(見圖4)、拼接后的圖像(圖5)。
圖3 原始圖像A,B
圖4 特征點匹配結(jié)果
在實際應用SIFT算法時,進行大批量紅外熱像圖拼接時也會遇到一些困難,主要原因是同一建筑外墻的相似點過多,在不相鄰的圖像中也會出現(xiàn)匹配的特征點,從而會出現(xiàn)匹配不正確的情況。
如果將SIFT算法與實際檢測過程結(jié)合起來,可簡化此匹配過程。其關鍵方法在于利用拍攝時采集的無人機位置數(shù)據(jù)。一般情況下,每張照片都會記錄拍照的位置信息(經(jīng)度、緯度、高度),通過這3個信息可判斷不同照片間的相對空間位置關系,從而可為SIFT算法提供一個局部的“視覺窗口”,將特征點限定在此窗口內(nèi)。舉例來說,10樓墻面的特征點區(qū)域僅與9樓和11樓的區(qū)域重合,而不會與8樓和12樓的區(qū)域重合,這樣就不會出現(xiàn)跨樓層匹配問題。
根據(jù)CECS 204∶2006《紅外熱像法檢測建筑外墻飾面層粘結(jié)缺陷技術規(guī)程》,對外墻空鼓的判定主要有以下步驟。
1)確定標準溫差 當錘擊法確定的顯著脫粘空鼓部位與紅外熱像圖上的部位相一致時,應將該部位與周圍正常部位的溫度差作為標準溫差。
2) 依標準進行空鼓判定 以標準溫差為基準,對同一種顏色、材質(zhì)的外墻飾面層進行脫粘空鼓判定:①在現(xiàn)場檢測最佳時段拍攝的東、南、西3個立面的紅外熱像圖上,標準溫差一般>1℃;②在北立面拍攝的紅外熱像圖上,標準溫差一般<0.5℃。
據(jù)此可知,標準溫差是空鼓判定的關鍵因素。在人工模式下,可通過實際測量獲得標準溫差,該技術規(guī)程還規(guī)定特殊情況下(如墻面關聯(lián)空調(diào)、采暖設備)需通過二次測量,采用圖像相減的方法獲得標準溫差,以排除干擾因素。如使用計算機進行圖像分析,也可依據(jù)熱力統(tǒng)計直方圖獲得標準溫差。
據(jù)此可設計采用計算機視覺技術識別空鼓的步驟如下。
1)中值濾波 過濾掉紅外熱像數(shù)據(jù)(每個采樣點代表1個溫度值)中的部分噪聲數(shù)據(jù),如典型的天空、云朵等背景數(shù)據(jù),通常這類溫度采樣數(shù)據(jù)數(shù)值大幅度低于正常值。
2)單通道灰度化 將濾波后的紅外熱像數(shù)據(jù)轉(zhuǎn)成單通道的灰度圖像,需完成采樣溫度范圍(如0~50℃)向灰度像素值(0~255)的映射。這一步是必要的,因為計算機視覺技術處理的對象是圖像,在圖像識別技術中通常需先進行灰度化處理。
3)二值化處理 根據(jù)標準溫差對灰度圖像進行二值化處理,也就是將灰度圖像轉(zhuǎn)換成黑白圖像,這時高于標準溫差的部分呈黑色,低于標準溫差的部分呈白色,“疑似”空鼓的墻面將被呈現(xiàn)出來。
4)“疑似”部位標定 所有“疑似”部位可采用計算機邊緣檢測技術進行輪廓識別,然后予以標定。比較典型的算法是Sobel邊緣檢測算法。
5)進一步判別 二值化圖像呈現(xiàn)的黑色部分不一定都是空鼓,有些可能就是墻體邊緣,也可能是不明熱源。通??展某什灰?guī)則多邊形,對于“疑似”部位的輪廓呈現(xiàn)直線形(如高溫下的晾衣竿)、矩形(可能是窗或陽臺),可排除。對于標準溫差大幅度>1℃(東、南、西立面)或0.5℃(北立面),應保留以待查明原因。這一步仍由計算機自動化執(zhí)行。
6)人工確認 對于計算機給出的“疑似”空鼓識別結(jié)果,需人工進行核對,必要時采用錘擊法修正。
運行程序后的對比效果如圖6和圖7所示。對比圖6和圖7可知,經(jīng)二值化處理后,墻面上方框部位高出標準溫差,屬“疑似”空鼓部位,其他部位雖然也有較大區(qū)域高出標準溫差,但這部分區(qū)域是窗和陽臺,必要時需更高精度的紅外熱像圖對這部分區(qū)域進一步判別。
圖6 原始紅外熱像圖
圖7 二值化后識別的疑似空鼓部位
在對外墻飾面空鼓檢測的3個基本問題做出探索后,將其解決辦法應用于上海市黃浦區(qū)和徐匯區(qū)的2個具體的外墻飾面空鼓檢測項目中,以檢驗方法的有效性。主要過程如下。
1)外業(yè)部分 檢測人員通過無人機搭載紅外熱像儀,在天氣晴好時段拍攝建筑外墻獲取紅外熱像數(shù)據(jù),同時也拍攝了對應的可見光照片以供必要時核對。每個項目獲取的數(shù)據(jù)量約為1GB字節(jié)。
2)自動化分析部分 通過編寫計算機程序,整合上述方法,對紅外熱像圖的形變進行復原,并通過拼接技術將多幅紅外熱像圖拼接成整個外墻立面,繼而采用中值濾波、灰度化、二值化、邊緣檢測等技術識別“疑似”空鼓部位。這個過程交由計算機自動化執(zhí)行,計算機輸出的是自動化檢測結(jié)果清單。
3)人工判定部分 檢測人員對自動化檢測結(jié)果清單進行判定和修正。
4)成果應用部分 將拼接好的紅外熱像圖墻面放入三維模型,可更加直觀地展示空鼓檢測的結(jié)果,如圖8所示。
圖8 紅外熱像圖在三維場景中的效果
通過這2個項目的驗證,可確定計算機視覺技術應用在建筑外墻飾面空鼓檢測中的可行性。具體實踐表明,采用上述空鼓識別算法得到的疑似空鼓區(qū)域(圖9紅框部分)與人工判定得到的空鼓區(qū)域(圖10陰影部分)基本一致,更為重要的是,上述大部分過程可通過自動化或半自動化方式進行,這有利于提高檢測工作效率。
圖9 自動識別的疑似空鼓區(qū)域
圖10 人工判定的空鼓區(qū)域
通過實踐檢驗,也發(fā)現(xiàn)有一些細節(jié)需考慮,如窗體、晾衣架、樹木等對墻面的干擾及低層樓面不利于無人機拍攝等情況會給紅外熱像數(shù)據(jù)分析帶來一定難度,仍需在后續(xù)工作中不斷完善和改進。
計算機視覺技術正在蓬勃發(fā)展,在房屋安全檢測領域也會有越來越廣泛的應用。除了基于紅外熱像圖和可見光圖像的“靜態(tài)”“延時”建筑外墻安全問題圖像識別技術,基于視頻流的“動態(tài)”“實時”的建筑外墻安全問題視頻識別技術也將得到發(fā)展。另外,基于機器學習的人工智能能力也可應用到這一領域,可將以往的經(jīng)驗數(shù)據(jù)轉(zhuǎn)變成知識,推動檢測行業(yè)發(fā)展。