宋 欣 王正璣 程章林
1(中國科學(xué)院深圳先進技術(shù)研究院 深圳 518055)
2(中國科學(xué)院大學(xué)深圳先進技術(shù)學(xué)院 深圳 518055)
3(中國科學(xué)技術(shù)大學(xué)軟件學(xué)院 蘇州 215123)
線段是一種常見的幾何元素,在一些計算機輔助設(shè)計軟件中常常作為基本的幾何元素用于人造物體的設(shè)計。這使得生活中的一些人造物體,如工業(yè)零件、建筑、家具等都具有豐富的線段特征。因此,線段的檢測和提取在數(shù)字圖像處理、計算機視覺領(lǐng)域具有重要意義。
與各種點特征相比,線段特征是一種更具有全局特性的特征,不僅具有位置信息,還具有方向信息,在很多情況下魯棒性更佳。線段特征已被廣泛應(yīng)用于場景理解[1-3],幾何與姿態(tài)估計[4,5],同步定位與地圖構(gòu)建[6-8]及三維重建[9,10]等方面。
當(dāng)前的許多線段提取方法都是從圖像的灰度梯度角度來考慮的。線段特征在圖像上的主要特點是,在某個方向上圖像的灰度梯度較大,而在與之垂直的方向上灰度梯度較小。線段提取比較經(jīng)典的一項工作是 Von Gioi 等[11]提出的線段檢測器(Line Segment Detector,LSD)。該方法首先通過計算圖像中每個像素的灰度梯度和灰度明暗變化的分界線生成一個單位向量場,再根據(jù)向量場中各個向量的方向?qū)⑾蛄繄龇指畛刹煌倪B通區(qū)域,即在同一個連通區(qū)域中的向量方向具有一致性。然后,在這些連通區(qū)域上擬合出候選線段。最后,根據(jù) Helmholtz 原則[12]來剔除錯誤檢測。該方法能夠得到亞像素精度的結(jié)果,并且能夠很好地控制錯誤檢測的數(shù)量。
除了直接在原始圖像上提取線段外,還有一些線段提取方法通過先從原始圖像上提取一張邊緣圖(Edge Map),然后在邊緣圖上來提取線段[13,14]。基于統(tǒng)計的霍夫變換(Hough Transform,HT)是在邊緣圖上提取線段常用的方法,但 HT所提取到的是滿足有足夠多的邊緣點支持的無限長直線,需要將其分割后才能得到線段。這樣不僅容易造成過多的錯誤檢測,還使提取到的線段非常細碎、不完整和不連續(xù)。針對以上問題,2015 年,Lu 等[14]提出了 CannyLines 方法,該方法使用了自適應(yīng)參數(shù)的 Canny 算子來提取邊緣圖,并加入了線段擴展和合并的操作,提高了線段的連續(xù)性和完整性。
雖然線段提取方法的效果已越來越好,但從本質(zhì)上說,無論是在原始圖像上提取線段還是在邊緣圖上提取線段,都是基于局部梯度信息,均存在以下兩個問題:(1)由于光照不均或者遮擋等因素的影響,線段提取的結(jié)果往往不完整、不連續(xù);(2)不能區(qū)分不同語義的線段。傳統(tǒng)的基于梯度的線段提取方法認為圖像灰度梯度大的地方就是線段,但圖像上灰度梯度大卻有著兩種不同的語義。其中,第一種是由于紋理或者光照等因素造成的顏色突變,第二種是不同物體的輪廓。在本文中,分別稱這兩種不同語義的線段為紋理線段和輪廓線段。
以上兩個問題的存在,使得傳統(tǒng)基于梯度的線段提取方法不能滿足某些應(yīng)用的需求,如立體匹配和三維重建等。完整連續(xù)的線段能夠保證立體匹配的效果,語義信息則可以加速線段匹配的速度,并且能夠減少錯誤匹配的數(shù)量。因此,區(qū)分兩種不同語義的線段在基于線段的三維重建中具有重要的意義。盡管這兩種不同語義的線段在圖像上的表征十分相似,但在三維空間中卻有著不同的幾何意義。其中,由紋理和光照等因素產(chǎn)生的線段常常分布在一個平面多邊形的內(nèi)部,而物體輪廓的線段則起著支撐物體形狀的作用。這兩種不同語義的線段之間是一種非常復(fù)雜的關(guān)系,很難通過設(shè)計一些簡單的規(guī)則來進行區(qū)分。而深度神經(jīng)網(wǎng)絡(luò)具有非常強大的描述能力,能夠表達非常復(fù)雜的關(guān)系。
因此,本文提出了一種線段提取方法,該方法在多分辨率的圖像上進行線段提取,提高了線段的完整性和連續(xù)性,并且結(jié)合深度神經(jīng)網(wǎng)絡(luò)技術(shù)對線段進行語義上的區(qū)分。該方法的主要步驟如下:首先,在不同分辨率下提取線段;其次,使用深度神經(jīng)網(wǎng)絡(luò)分析線段語義;最后,對線段進行聚類合并。該方法具有以下兩個創(chuàng)新點:(1)采用多分辨率提取線段再聚類合并的方法提高了線段的連續(xù)性和完整性;(2)將傳統(tǒng)基于梯度的線段提取方法與深度學(xué)習(xí)相結(jié)合,分析不同線段的語義。
圖像上線段特征的提取結(jié)果與分辨率有很大關(guān)系。一般來說,在高分辨率下提取線段的結(jié)果更加精確,但由于高頻噪聲及紋理的影響,線段的連續(xù)性和完整性不夠好。而在低分辨率下提取線段則會損失一部分精度,但由于高頻噪聲及紋理的減少,提取的線段會更加完整。因此,在高分辨率和低分辨率下提取線段有不同的優(yōu)缺點。為了發(fā)揮不同分辨率下提取線段的優(yōu)勢,保證提取線段的連續(xù)性和完整性,本文將在多個分辨率下提取線段,并在后面的步驟中對不同分辨率下提取的線段進行聚類合并。
本文采用 LSD 方法[11]來提取特定分辨率下的線段。其中,LSD 方法提取的線段為矢量形式,用線段的起點和終點坐標(biāo)表示,如線段Li=siei(si、ei分別為線段的起點和終點)。分辨率的設(shè)置根據(jù)具體情況調(diào)整,一般來說設(shè)置為 2~3個分辨率。分辨率的范圍為原始圖像分辨率的0.5~2 倍。其中,超過 1 倍分辨率的圖像通過對原始圖像進行上采樣得到,上采樣過程中使用 3次樣條插值方法進行插值。如圖 1 所示,在一些實例中,從原始圖像上無法提取到線段,但在上采樣后的圖像上卻可以提取到線段。而低于 1 倍分辨率的圖像則是通過對原始圖像進行高斯濾波和下采樣得到。過低的分辨率將會帶來較大的誤差,過高的分辨率則會增加計算復(fù)雜度。由圖 2可以看到,線段的完整性隨著分辨率的降低而提高,但精度卻在下降。
圖1 上采樣對線段提取結(jié)果的影響Fig. 1 Effect of upsampling on line segment extraction results
圖2 不同分辨率下線段提取的結(jié)果Fig. 2 The results of line segment extraction at different resolutions
單層的神經(jīng)網(wǎng)絡(luò)也稱作感知機,是最簡單的神經(jīng)網(wǎng)絡(luò)。由于感知機只能處理線性可分的問題,對于很多復(fù)雜的問題需要使用多層神經(jīng)網(wǎng)絡(luò)來解決。多層神經(jīng)網(wǎng)絡(luò)可以看作是多個感知機單元的組合。其中,前端第一層叫做輸入層,中間的叫隱含層,末端的叫輸出層。在 2006 年,Hinton 和 Salakhutdinov[15]發(fā)現(xiàn)具有多個隱含層的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)特征的能力更強,并且可以通過逐層預(yù)訓(xùn)練的方法來緩解訓(xùn)練復(fù)雜性,自此越來越多的科研人員投入到深度神經(jīng)網(wǎng)絡(luò)的研究當(dāng)中。
卷積神經(jīng)網(wǎng)絡(luò)在計算機視覺領(lǐng)域應(yīng)用非常廣泛。與普通的神經(jīng)網(wǎng)絡(luò)相比,卷積神經(jīng)網(wǎng)絡(luò)使用了大量的卷積層。1990 年,Le Cun 等[16]提出的LeNet-5 多層卷積神經(jīng)網(wǎng)絡(luò)在手寫字體識別上取得了非常高的準(zhǔn)確率。2012 年,Krizhevsky等[17]提出的 AlexNet 卷積神經(jīng)網(wǎng)絡(luò)在圖像分類競賽中取得了最低的錯誤率,并遠遠超過第二名的成績。2015 年,Long 等[18]提出了全卷積神經(jīng)網(wǎng)絡(luò)(Fully Convolutional Network,F(xiàn)CN),能夠接受任意大小的圖像作為輸入,且輸出結(jié)果也是一張圖像,大小與輸入圖像相關(guān)。由于全卷積神經(jīng)網(wǎng)絡(luò)能對輸入圖像進行像素級別的分類和預(yù)測,故非常適合處理像素級別圖像語義分割的任務(wù)。
線段的語義與圖像上像素的語義有緊密關(guān)系,可以由線段周圍的像素語義得到線段的語義。而獲取圖像上像素的語義是一個像素級別的圖像語義分割問題,即圖像上所有的像素可以分為兩類:物體輪廓邊緣的像素和其他像素。這兩種像素構(gòu)成了一副輪廓圖。
由于全卷積神經(jīng)網(wǎng)絡(luò)非常適合處理像素級別的語義分割問題,所以本文采用全卷積視覺幾何組(Fully Convolutional Network-Visual Geometry Group,F(xiàn)CN-VGG)網(wǎng)絡(luò)來對圖像進行語義分割。FCN-VGG 網(wǎng)絡(luò)由視覺幾何組(Visual Geometry Group,VGG)網(wǎng)絡(luò)[19]進行結(jié)構(gòu)調(diào)整得到。與 VGG 網(wǎng)絡(luò)相比,F(xiàn)CN-VGG 去掉了最后的 3 個全連接層,但加上了反卷積層。
深度神經(jīng)網(wǎng)絡(luò)的精度和泛化能力與訓(xùn)練樣本的數(shù)量有很大關(guān)系,但這樣大量的樣本很難獲取且標(biāo)注成本很高。因此,本文首先采用 VGG網(wǎng)絡(luò)在 ImageNet 數(shù)據(jù)集上訓(xùn)練得到的權(quán)值作為FCN-VGG 網(wǎng)絡(luò)特征提取部分的初始權(quán)值;然后,使用手工標(biāo)注的 219 張圖像進行調(diào)優(yōu)。這樣不僅節(jié)省了大量的訓(xùn)練時間,還節(jié)約了數(shù)據(jù)標(biāo)注的成本。圖 3 為數(shù)據(jù)集標(biāo)注的實例。其中,圖3(a)為輸入圖像;圖 3(b)為標(biāo)注的輪廓圖,輪廓圖中白色像素表示輪廓像素,黑色像素表示其他像素。
圖3 圖像標(biāo)注實例Fig. 3 Image annotation example
在訓(xùn)練過程中,將訓(xùn)練集中的 219 張圖像隨機分為兩部分。其中,154 張為訓(xùn)練集,65 張為測試集。本文采用 TensorFlow 框架對 FCNVGG 網(wǎng)絡(luò)進行訓(xùn)練,每次訓(xùn)練圖片的 Batch 大小為 4,采用隨機梯度下降優(yōu)化算法進行優(yōu)化。在訓(xùn)練過程中,訓(xùn)練集上的損失和測試集上的損失如圖 4 所示。由圖 4 可以看到,隨著迭代次數(shù)的增加,訓(xùn)練集上的損失逐漸變小,測試集上的損失則先逐漸變小,但在 3 000 次迭代后呈現(xiàn)出增長趨勢,說明此時神經(jīng)網(wǎng)絡(luò)模型存在過擬合的風(fēng)險。因此,在后面的步驟中采用 3 000 次迭代的神經(jīng)網(wǎng)絡(luò)模型進行預(yù)測。
圖4 損失曲線Fig. 4 Loss curve
由于 FCN-VGG 卷積神經(jīng)網(wǎng)絡(luò)得到的是一副帶有語義信息的圖像,即輪廓圖,需要將圖像中的語義信息融合到線段中。如圖 5 所示,對于線段Li,首先從起點開始到終點結(jié)束均勻地選取m個采樣點,分別為p1,p2, …,pm;然后,統(tǒng)計落在輪廓邊緣區(qū)域內(nèi)的點的數(shù)量n。最后,若n/m大于閾值r,則線段Li為輪廓邊線段,否則為紋理線段。
圖5 從圖像中獲取線段語義Fig. 5 Get segment semantics from the image
為了保證線段的連續(xù)性和完整性,需要對一些線段進行連接、合并。本文采用聚類的方法來決定哪些線段應(yīng)當(dāng)合并到一起。對于聚類問題,兩個非常關(guān)鍵的因素需要考慮,一是距離的定義,二是聚類算法的選擇。如圖 6 所示,通過觀察發(fā)現(xiàn)影響線段是否應(yīng)該合并的因素有 3 個:(1)線段之間夾角的大?。?2)線段之間垂直間距的大??;(3)線段之間平行間距的大小。對于線段之間的距離定義,本文參考了 Lee 等[20]提出的軌跡聚類算法中使用的軌跡距離,并加以修改使之滿足線段聚類的要求。圖 7 為本文線段之間距離定義的示意圖。本文定義的線段之間的距離包含 3 個部分:角度距離dθ、平行距離dp和垂直距離dv。
圖6 影響線段合并的因素Fig. 6 Factors affecting line segment consolidation
圖7 線段距離定義示意圖Fig. 7 Segment distance def i nition
角度距離的定義如公式(1)所示。其中,θ是線段Li和Lj之間的夾角;表示線段Lj的長度。本文中,線段的聚類不考慮線段方向的影響,即線段eisi和線段siei表示同一條線段。
垂直距離的定義如公式(2)所示。假設(shè)Li的長度比Lj長,則l1和l2為線段Lj的兩個端點到Li所在直線的距離。線段Li和Lj之間的垂直距離定義為l1和l2的 2 階 Lehmer 平均數(shù)。
平行距離的定義如公式(3)所示。假設(shè)Li的長度比Lj長,將Lj向Li所在的直線方向上投影得到線段線段Li和Lj之間的平行距離為Li與之間的最小距離lp。當(dāng)Li與相互交錯時,Li與Lj之間的平行距離為 0。
最終兩條線段之間的距離為以上 3 部分的加權(quán)和。
其中,α、β、γ為各項距離的權(quán)重,且滿足以下兩個條件。
定義好線段之間的距離后需要確定聚類算法,本文采用基于密度的有噪聲應(yīng)用空間聚類(Density-Based Spatial Clustering of Applications with Noise,DBSCAN)[21]算法對線段進行聚類。DBSCAN 算法需要兩個參數(shù),分別是計算局部密度的半徑r和局部密度閾值n。這兩個參數(shù)很容易根據(jù)具體應(yīng)用情況進行調(diào)節(jié)。此外,DBSCAN 算法具有抗噪聲的功能。因此,DBSCAN 算法非常適合線段的聚類。
聚類完成后需要對同一類的線段進行合并。雖然同一類的線段可能來自不同分辨率的圖像,但從高分辨率圖像上提取的線段精度更高,故合并時選擇該類中從最高分辨率的圖像中提取的線段進行合并。對于給定的需要合并的線段集合首先需要計算這些線段的幾何中心o和平均方向v。其中,計算平均方向時需要保證集合中的線段方向一致,即對任意的兩條線段Li和Lj,其方向向量的內(nèi)積要為非負值。在具體計算過程中,可以將所有的線段和第一條線段L1的方向保持一致即可。然后,計算合并后的線段。具體計算過程請參考算法 1。
如圖 8 所示,幾何中心o和方向v可以確定合并后的線段所在的直線l,將集合C中每一條線段的端點向直線l上投影,則這些投影點分布在點o的兩側(cè)。記在點o兩側(cè)距離o點最遠的兩個投影點為s和e,即為合并后的線段的起點和終點。圖 8 中,黃色線段L為合并后的線段。
圖8 線段合并示意圖Fig. 8 Segment consolidation
與其他傳統(tǒng)的線段提取方法相比,本文提出的線段提取方法主要特點為:在多分辨率的圖像下進行線段提取,并進行語義分析以區(qū)分邊緣輪廓線段和紋理線段,在此基礎(chǔ)上對線段進行了聚類合并,提高了線段的完整性和連續(xù)性。因此,本文將從兩個方面分析實驗結(jié)果:(1)線段的完整性和連續(xù)性;(2)線段語義分析的準(zhǔn)確性。
為了評估提取線段的完整性和連續(xù)性,本文選取了幾個不同的實例進行測試,并與相關(guān)工作進行比較。由于參與比較的 CannyLine[14]和LSD[11]線段提取方法沒有對線段進行語義分析,所以在進行線段完整性和連續(xù)性評估時不考慮線段的語義區(qū)別。不同方法提取線段的結(jié)果如圖 9所示。其中,9(a)為輸入圖片,9(b)~9(d)分別為 CannyLine、LSD 和本文方法提取的線段。通過觀察發(fā)現(xiàn),本文方法提取的線段完整性和連續(xù)性最好,斷裂線段的數(shù)量最少,視覺效果最好。
為了定量評估線段的完整性和連續(xù)性,本文選取了 10 張真實場景的圖片進行測試。其中,5張為室內(nèi)場景,5 張為室外場景。并對這 10 個實例中不同方法提取到的線段平均長度進行統(tǒng)計,結(jié)果如表 1 所示。從表 1 的數(shù)據(jù)可以看到,在10 個實例中,本文方法提取的線段平均長度最長。圖 10 為兩個具有代表性的實例的線段提取結(jié)果。
圖9 不同方法提取線段的結(jié)果Fig. 9 Results of different line segment extraction method
表1 不同方法線段提取結(jié)果的完整性比較Table 1 Integrity comparison of different methods
圖10 室內(nèi)和室外場景中不同線段提取方法的結(jié)果Fig. 10 Result of different line segment extraction methods in indoor and outdoor scene
本文提出的方法可以非常靈活地滿足不同應(yīng)用的需求。同時,還可以通過改變線段聚類合并的參數(shù)來調(diào)整最終線段提取的結(jié)果。如圖 11 所示,改變聚類半徑的參數(shù)可以調(diào)整最終線段提取的邊緣效果。
圖11 不同參數(shù)對結(jié)果的影響Fig. 11 The effect of different parameters
由本文第 3 部分可知,線段的語義來源于圖像上像素的語義,而獲取圖像上像素的語義是一個二類語義分割問題。因此,采用評估圖像語義分割常用的像素精度、平均精度和平均交并比 3個指標(biāo)對本文語義分析的正確率進行分析,結(jié)果見表 2。設(shè)nij表示本身是i類像素且被預(yù)測為j類像素的像素數(shù)目,ncl為像素總類別數(shù)(本文中,ncl=2),ti表示i類像素的總數(shù)目,即那么以上 3 個指標(biāo)的定義如下。
由表 2 可以看出,本文所采用的圖像語義分割方法具有非常高的精度,其中像素精度高達97.82%,能夠滿足線段語義分析的要求。
表2 圖像語義分割精度Table 2 Image semantic segmentation accuracy
圖 12 為測試集中 3 個線段語義分析的實例。其中,每一行表示一個實例,從左到右分別是輸入的圖像實例、人工標(biāo)注的真實結(jié)果、深度神經(jīng)網(wǎng)絡(luò)預(yù)測的結(jié)果和將語義信息融合到線段上的結(jié)果。圖中紅色線段表示輪廓線段,黑色線段表示紋理線段。
為了測試神經(jīng)網(wǎng)絡(luò)的泛化能力,本文收集了一些不同風(fēng)格的場景圖像(這些圖像既不屬于訓(xùn)練集也不屬于測試集),并使用上述神經(jīng)網(wǎng)絡(luò)對其進行預(yù)測,結(jié)果如圖 13 所示。從圖 13 可以看出,與訓(xùn)練集中風(fēng)格越相近的場景預(yù)測結(jié)果越好。這表明該神經(jīng)網(wǎng)絡(luò)具有一定的泛化能力,但泛化能力有限。
圖12 線段語義預(yù)測結(jié)果Fig. 12 Result of line segment semantic prediction
圖13 不同風(fēng)格場景預(yù)測結(jié)果Fig. 13 Prediction results of different style scenes
本文提出了一種基于語義分析的線段提取方法,并使用深度神經(jīng)網(wǎng)絡(luò)對線段進行語義分析。與 CannyLine[14]和 LSD[11]方法相比,本文方法不僅在線段完整性和連續(xù)上有明顯提高,而且還能夠區(qū)分輪廓線段和紋理線段,對基于線段的立體匹配和三維重建等應(yīng)用具有較高的價值。但本文方法仍存在一定的局限性:首先,由于使用LSD 方法對特定分辨率的圖像進行線段提取,所以最終線段提取的效果還是會受到 LSD 方法的局限影響;其次,用于訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)集較小,還存在泛化能力不夠的問題。在未來,可以深入運用多分辨率思想,脫離 LSD 方法的束縛,進一步提高線段的完整性和連續(xù)性。此外,還可以增加訓(xùn)練數(shù)據(jù)集,增強神經(jīng)網(wǎng)絡(luò)的泛化能力,提高線段語義分析的準(zhǔn)確性,并將線段提取工作放入卷積神經(jīng)網(wǎng)絡(luò),實現(xiàn)端對端的線段檢測算法。