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