朱 永,蔣 強,郭乃菊
(沈陽理工大學(xué)自動化與電氣工程學(xué)院,沈陽 110159)
隨著視覺測量和數(shù)字圖像處理技術(shù)的發(fā)展,結(jié)構(gòu)光測量技術(shù)因其具有高精度、實時性、非接觸等優(yōu)點,在工業(yè)檢測、三維人體掃描等領(lǐng)域得到了廣泛的應(yīng)用[1-2]。 結(jié)構(gòu)光測量系統(tǒng)主要由工業(yè)相機、激光器和計算機等組成[3],通過激光三角法[4]獲得特征點的坐標信息。 結(jié)構(gòu)光有多種測量模式,其中基于線結(jié)構(gòu)光的測量模式可以實現(xiàn)快速、精確和穩(wěn)定測量,并具有結(jié)構(gòu)簡單、搭建成本低等優(yōu)點[5]。 由于線結(jié)構(gòu)光條紋具有一定的像素寬度,只有準確提取光條的中心線才能獲得被測目標的特征點坐標[6]。 因此,如何快速、準確提取結(jié)構(gòu)光中心線是實現(xiàn)測量的關(guān)鍵[7]。
傳統(tǒng)線結(jié)構(gòu)光中心線提取算法主要有灰度重心法、基于黑塞(Hessian)矩陣的斯蒂格(Steger)算法和方向模板法等[8]。 灰度重心法的算法簡單、實時性好,但是易受噪聲影響;Steger 算法精度高、受噪聲影響小,但算法復(fù)雜導(dǎo)致其實時性較差;方向模板法具有一定的修補斷線和抑制白噪聲能力,但計算復(fù)雜、精度一般、穩(wěn)定性較差[9]。針對傳統(tǒng)算法存在的不足,研究人員完成了一定程度的算法優(yōu)化。 Yang 等[10]提出一種改進灰度重心法提取光條中心算法,采用模板法檢測光條的法線方向,并在該方向上應(yīng)用灰度重心法精確提取光條中心。 南方等[11]提出一種基于Steger算法的自適應(yīng)激光條紋中心線提取方法,提高了算法的精度,但也降低了算法的實時性。 Pang等[12]通過骨架細化法進行粗提取,然后利用方向模板法和灰度重心法進行精確提取,計算相對復(fù)雜、提取結(jié)果不夠穩(wěn)定。
針對結(jié)構(gòu)光中心線提取的高精度、實時性、抗噪性等需求,以光滑金屬表面為背景,提出一種基于K-means 聚類[13-14]的結(jié)構(gòu)光中心線提取算法。算法結(jié)合圖像預(yù)處理手段和動態(tài)聚類分割,通過灰度重心法提取光條中心,再進行最小二乘法擬合中心線,實現(xiàn)對傳統(tǒng)算法的優(yōu)化。
基于K-means 聚類的結(jié)構(gòu)光中心線提取方法處理流程為:首先分析結(jié)構(gòu)光條紋特性;然后采用中值濾波對光條圖像進行預(yù)處理,減少噪聲對光條中心線的影響;再使用K-means 聚類算法對濾波后的圖像上的所有像素點進行聚類分割,排除干擾光和無關(guān)光條的區(qū)域,以此得到光條感興趣區(qū)域(ROI);對分割圖像進行形態(tài)學(xué)閉運算[15],填充背景區(qū)域,得到飽滿光條區(qū)域;最后運用灰度重心法對光條區(qū)域計算灰度重心,得到光條的中心線。 結(jié)構(gòu)光中心線提取方法的流程如圖1所示。
圖1 結(jié)構(gòu)光中心線提取方法流程
線結(jié)構(gòu)光投射到物體表面形成具有一定寬度的光條,其圖像如圖2 所示。 理想情況下,線結(jié)構(gòu)光條橫截面的灰度值呈高斯分布,但實際上由于受到實驗環(huán)境和被測物體材質(zhì)等因素的影響,實驗采集到的光條往往含有各種噪聲,導(dǎo)致其灰度分布呈現(xiàn)階躍式變化。
圖2 光條圖像
對采集到的光條進行分析,繪制光條三個不同位置橫截面的灰度值分布,如圖3 所示。
光條的第100 列和第200 列是在鋁板上,可以看出這兩處受到了明顯的噪聲干擾,其中光條第200 列出現(xiàn)了明顯的鏡面反射現(xiàn)象,同時受光條以外的背景影響,其橫截面的灰度值出現(xiàn)多個峰值。 光條的第300 列是在黑色幕布上,光條較細,整體上較符合高斯分布。 對第200 列光條橫截面的灰度分布進行高斯擬合,擬合后的高斯分布即為理想情況下線結(jié)構(gòu)光條紋特性。 光條橫截面整體上呈近似高斯分布,而光條中心的提取依賴其橫截面的高斯分量。
在數(shù)字圖像處理過程中,圖像濾波是圖像預(yù)處理的關(guān)鍵環(huán)節(jié)。 由于采集到的圖像往往夾雜著噪聲信號,而噪聲的存在會對光條中心提取產(chǎn)生不利的影響,需要對圖像進行濾波處理,在盡量保留圖像細節(jié)特征的條件下對目標圖像的噪聲進行抑制。
常見的圖像濾波方式有均值濾波、高斯濾波和中值濾波,其中均值濾波和高斯濾波均屬于線性濾波,而中值濾波屬于非線性濾波。 均值濾波和高斯濾波在濾波的同時也丟失了圖像細節(jié)信息,使光條變得模糊,不利于光條的提取定位;而中值濾波不但可以抑制圖像噪聲,還可以保留光條邊緣的細節(jié)信息,提升了圖像的信噪比。 因此,選擇中值濾波對采集的圖像進行濾波處理。
中值濾波的計算公式為
式中:g(x,y)表示中值濾波后圖像某像素點(x,y)處的像素灰度值;f(x,y)表示輸入圖像的像素灰度值;median表示中值濾波函數(shù);A表示濾波模板。
中值濾波在去除椒鹽噪聲方面很有效。 圖4所示為添加椒鹽噪聲的圖像和通過中值濾波后的圖像,對比圖4(a)與圖4(b)可以看出,中值濾波對椒鹽噪聲抑制效果明顯,也沒有丟失光條邊緣的細節(jié)信息。
圖4 中值濾波
K-means 聚類是一種基于樣本集合劃分的無監(jiān)督學(xué)習(xí)方法,根據(jù)數(shù)據(jù)到聚類中心的距離劃分該數(shù)據(jù)所屬類別。
假設(shè)樣本集合為Y={y1,y2,…,yn};每個樣本由m維特征向量表示。 樣本之間的距離用歐式距離平方表示,計算公式為
式中:d(yi,yj)為樣本yi與yj之間的歐式距離;yki、ykj分別表示第k個樣本類別中的第i個樣本與第j個樣本。
若Nh表示第h個聚類Ch中含有的樣本數(shù)目,則該聚類中的樣本y′均值uh的計算公式為
由此定義樣本,與其所屬聚類Ci中均值的距離總和為損失函數(shù)W(Ci),計算公式為K-means 聚類通過反復(fù)優(yōu)化聚類結(jié)果,使損失函數(shù)最小化,即所有樣本到其所屬類別中心的距離越小,則相同類中的樣本相似程度就越高,聚類效果就越好。 K-means 算法的流程如下:
1)隨機選取k個樣本點作為初始聚類中心,記為
2)計算樣本與k個初始聚類中心的距離,將每個待聚類樣本分配到距其最近的聚類中心所在的類群中,得到本次聚類結(jié)果C(0);
3)計算第l個聚類結(jié)果C(l)中各個類群的樣本均值,作為新的聚類中心,即然后對樣本進行聚類,得到新的聚類結(jié)果C(l);
4)迭代計算,若聚類結(jié)果使損失函數(shù)最小,或者聚類結(jié)果C(l+1)=C(l),即聚類結(jié)果不變,則停止迭代,否則令l=l+1,返回3)。
數(shù)學(xué)形態(tài)學(xué)是以集合基礎(chǔ)分析幾何形狀和結(jié)構(gòu)的數(shù)學(xué)方法。 在數(shù)字圖像處理中,通過結(jié)構(gòu)元素處理目標圖像,常見的形態(tài)學(xué)運算有腐蝕和膨脹。 腐蝕運算可以消除目標圖像的邊界點,而膨脹運算可以填充目標圖像的內(nèi)部孔洞。
形態(tài)學(xué)閉運算是一種腐蝕和膨脹的復(fù)合運算,先對圖像進行膨脹運算,再進行腐蝕運算。 其表達式為
式中:A為輸入圖像;B為結(jié)構(gòu)元素;⊕為膨脹運算;Θ 為腐蝕運算。 對目標圖像進行形態(tài)學(xué)閉運算可以達到平滑輪廓的效果,同時還可以對細長的溝壑和狹窄的間斷進行彌合,消除較小的空洞。
灰度重心法是根據(jù)結(jié)構(gòu)光的光條橫截面上像素點的灰度值和其坐標求取灰度重心的位置。 該方法需要通過設(shè)定閾值減小結(jié)構(gòu)光光條截面的搜索范圍,提高搜索效率。 對光條圖像中像素點i進行閾值設(shè)定如下。
式中:f(w)為像素點w的灰度值;fth為設(shè)定的灰度閾值。 通過閾值的設(shè)定可以得到第xw列光條截面的上、下限區(qū)間為[a(xw),b(xw)],則灰度重心法的計算公式為
式中:f(xw,y)為像素坐標(xw,y)處的灰度值,y(xw)為計算出的第xw列光條重心的縱坐標。
本文采用最小二乘法進行光條中心線的擬合。 根據(jù)灰度重心法提取到的光條中心點數(shù)據(jù)基本分布在一條直線附近,設(shè)此直線方程為
以上是使用最小二乘法對線性函數(shù)進行擬合,實際應(yīng)用可推廣到多項式函數(shù)的擬合,能更好地進行光條中心線擬合。
為驗證基于K-means 聚類的結(jié)構(gòu)光中心線提取方法的可行性,搭建了如圖5 所示的實驗平臺。激光器采用的是波長為650 nm 的鮑威爾一字激光器,相機采用的是大恒MER-160-227U3M-L 工業(yè)相機,其分辨率為1 440 ×1 080。 激光器和相機固定在升降臺上,高度可調(diào)。
圖5 實驗平臺
打開激光器將結(jié)構(gòu)光投射到表面光滑的鋁板上,采集到的原始光條圖像如圖6 所示。
圖6 原始光條圖像
首先對原始光條圖像進行中值濾波處理,采用3 ×3 濾波模板,濾波處理后圖像如圖7(a)所示。 由圖7(a)可見,濾波處理后的圖像背景中仍然含有灰度值較高的噪聲光斑,因此需要進行圖像分割以獲得目標光條區(qū)域。 采用K-means 聚類算法分割圖像,通過迭代優(yōu)化后的聚類結(jié)果如圖7(b)所示。 排除干擾光和無關(guān)光條的區(qū)域,得到的ROI 光條區(qū)域如圖7(c)所示。 然后對分割得到的ROI 光條區(qū)域進行形態(tài)學(xué)閉操作,采用矩形作為結(jié)構(gòu)元素,平滑光條輪廓并填充背景區(qū)域,得到飽滿光條區(qū)域如圖7(d)所示。
圖7 圖像處理
通過對原始光條進行圖像預(yù)處理,消除了大面積的光斑噪聲,得到了形狀較為完整的目標光條圖像。 通過灰度重心法計算目標光條的灰度重心,得到的光條中心線如圖8(a)所示。 由圖8(a)可見,灰度重心法提取的一系列光條中心點存在波動,所以需要從全局角度保證提取的中心點之間可以平滑過渡。 采用最小二乘法對提取的光條中心點進行直線擬合,擬合結(jié)果如圖8(b)所示。
圖8 光條中心線
擬合前后中心點數(shù)據(jù)如圖9 所示。
圖9 擬合前后中心點數(shù)據(jù)
針對實驗采集的原始光條圖像,選擇傳統(tǒng)的灰度重心法、Steger 算法以及方向模板法與本文算法進行對比實驗,實驗結(jié)果如圖10 所示。
圖10 對比實驗結(jié)果
由圖10 可見,傳統(tǒng)灰度重心法的抗干擾能力不強,提取的部分光條中心出現(xiàn)很大的偏差;Steger 算法提取的光條中心線出現(xiàn)了分段現(xiàn)象,左右兩側(cè)光條中心未能提?。环较蚰0宸ㄌ崛〉墓鈼l中心線出現(xiàn)了干擾噪點和部分光條信息缺失現(xiàn)象。 而圖8 給出的本文算法提取的光條中心線較為完整且平穩(wěn),沒有出現(xiàn)較大的波動和分段現(xiàn)象,提取結(jié)果比上述傳統(tǒng)算法更為準確。
3.4.1算法精度和實時性分析
為驗證本文算法的有效性,需要對光條中心線提取的精度進行評價。 由于采集到的光條中心的真值無法測得,本文利用提取的光條中心點到最小二乘法擬合直線距離的標準差評價算法的精度。 標準差越小,則算法提取出的光條中心點的離散性越小,即算法精度越高。 標準差的計算公式為
式中:p為算法提取的光條中心點的數(shù);de為第e個光條中心點到擬合中心線的距離;ˉd為所有光條中心點到擬合中心線距離的平均值。de可由點到擬合直線的距離公式計算得到,計算公式為
式中:(xe,ye)為第e個光條中心點位置;k′和b′為擬合直線方程的參數(shù)。
在實際工程應(yīng)用中,結(jié)構(gòu)光測量系統(tǒng)需要滿足測量的快速性,所以光條中心線提取算法應(yīng)具備實時性。 本文采用不同算法各運行10 次,各算法的標準差σ和平均運行時間ˉt如表1 所示。
表1 各算法精度和實時性評價結(jié)果
從表1 可見,本文算法提取的中心點到擬合中心線距離的標準差最小,即本文算法提取光條中心點的精度優(yōu)于傳統(tǒng)算法;Steger 算法計算相對復(fù)雜,導(dǎo)致運行時間過長,而本文算法的運行時間僅次于灰度重心法,綜合仿真實驗的結(jié)果可知,本文算法運行效率較高、實時性較好。
3.4.2算法魯棒性分析
為驗證算法的抗噪聲干擾能力,需要對光條中心線提取的魯棒性進行分析。 通過調(diào)節(jié)環(huán)境光和添加噪聲,得到無光斑噪聲圖、有光斑噪聲圖和添加椒鹽噪聲圖。 運用本文算法進行光條中心線提取,針對不同圖像的提取結(jié)果如圖11 所示,算法的標準差見表2。
表2 不同噪聲干擾下算法的標準差
圖11 光條中心線提取
由圖11 可見,本文算法在光斑噪聲和椒鹽噪聲的影響下,仍有較好的提取效果。 從表2 可以看出,提取的中心點到擬合中心線距離的標準差均較小,說明算法的提取精度可以保持相對穩(wěn)定。
本文在分析線結(jié)構(gòu)光條紋特性的基礎(chǔ)上,結(jié)合動態(tài)聚類分割和傳統(tǒng)光條中心線提取算法,提出一種基于K-means 聚類的結(jié)構(gòu)光中心線提取方法。 該方法在對原始圖像進行濾波處理后,采用K-means 聚類算法分割出ROI 光條區(qū)域,然后對二值圖像進行數(shù)學(xué)形態(tài)學(xué)操作,最后利用灰度中心法提取光條中心。 對比傳統(tǒng)算法,本文算法的提取精度更高,算法運行效率更快,且具有一定的抗噪聲干擾能力,對結(jié)構(gòu)光測量具有理論指導(dǎo)價值。