張發(fā)軍 宋鈺青 鄧安祿 虞成俊 彭文剛
(1.三峽大學(xué) 機(jī)械與動(dòng)力學(xué)院, 湖北 宜昌 443002;2.水電機(jī)械設(shè)備設(shè)計(jì)與維護(hù)湖北省重點(diǎn)實(shí)驗(yàn)室, 湖北 宜昌 443002)
木板是木材加工后形成的,其紋理年輪會(huì)形成條紋,使得木板的表面呈現(xiàn)線狀分布.木板條紋的粗細(xì)會(huì)影響材料的美觀,即使是同一種木板,條紋的粗細(xì)也會(huì)影響其商用價(jià)值.如今工廠大多數(shù)都是靠人工分揀,效率低下,準(zhǔn)確率不高,故實(shí)現(xiàn)木板條紋檢測(cè)的自動(dòng)化對(duì)工廠加工具有重大的實(shí)用價(jià)值和意義.目前的研究主要集中在木材的缺陷和紋理的分類(lèi)檢測(cè)[1-2].文獻(xiàn)[3]提出基于深度學(xué)習(xí)的木材缺陷圖像檢測(cè)方法,該方法通過(guò)訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)與CV分割算法組合,能較強(qiáng)地定位缺陷位置,但此方法需要大量的訓(xùn)練樣本,算法效率不高.文獻(xiàn)[4]提出應(yīng)用灰度直方圖的平滑度特征來(lái)識(shí)別木材表面缺陷,識(shí)別率高于99%且效率高.文獻(xiàn)[5]提出基于灰度共生矩陣和模糊BP神經(jīng)網(wǎng)絡(luò)的識(shí)別算法,該算法需要訓(xùn)練,算法復(fù)雜,識(shí)別缺陷的成功率不如上述文獻(xiàn).
對(duì)于上述木材缺陷算法的研究,深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)算法因其算法復(fù)雜,需要提取多種特征值,有的甚至可達(dá)幾十個(gè),訓(xùn)練費(fèi)時(shí),且效率不高,不適合運(yùn)用在條紋檢測(cè)的自動(dòng)化中,因此需要用少量的特征來(lái)高效地表達(dá)木板條紋.而灰度直方圖算法簡(jiǎn)單,基于這一想法,本文提出一種灰度直方圖改進(jìn)算法來(lái)檢測(cè)木板條紋.而目前最常見(jiàn)的紋理檢測(cè)為圖像增強(qiáng)、邊緣檢測(cè)、圖像分割算法、直線檢測(cè)算法.文獻(xiàn)[6]采用灰度TV濾波,模糊區(qū)域競(jìng)爭(zhēng)模型進(jìn)行圖像分割.這種算法的邊緣定位能力不高,且適用性不確定.直線檢測(cè)算法為霍夫變換和霍夫概率變換.這兩種算法首先需進(jìn)行高斯平滑將原圖像降噪,再進(jìn)行Canny邊緣檢測(cè),最后進(jìn)行霍夫直線檢測(cè)或霍夫概率直線檢測(cè)[7].這種算法對(duì)輪廓清晰,條紋深淺差距較大的木板效果是特別好的,設(shè)置能將條紋的上下輪廓提取出來(lái).但是,對(duì)條紋深淺差距特別小的木板,效果則特別差.因?yàn)樵贑anny邊緣檢測(cè)這一步,原圖像的灰度圖像各個(gè)像素點(diǎn)之間的值差距是比較小的,且條紋之間有與條紋相近的噪點(diǎn),所以無(wú)法通過(guò)Canny邊緣檢測(cè)的閾值調(diào)節(jié)來(lái)分離各個(gè)條紋,出現(xiàn)的是無(wú)序的邊界點(diǎn).而霍夫概率是在霍夫變換的基礎(chǔ)上,對(duì)邊界點(diǎn)進(jìn)行隨機(jī)采樣,在直線到原點(diǎn)距離和直線角度形成的累加器空間進(jìn)行投票,達(dá)到閾值則認(rèn)為有直線.但無(wú)序的邊界點(diǎn)會(huì)極大影響其結(jié)果,無(wú)法通過(guò)閾值來(lái)判斷直線的真假.而對(duì)圖像進(jìn)行形態(tài)學(xué)分割也只適用于條紋清晰的木板,適用范圍窄,不能用于工廠的自動(dòng)化.
為了檢測(cè)木板的條紋,將條紋定為特征,為準(zhǔn)確尋找圖像中的特征點(diǎn),本文提出一種改進(jìn)直方圖算法,利用python編程,與David Lowe提出的SIFT算法和直方圖算法對(duì)比來(lái)分析其效果[8].
SIFT算法即尺度不變特征轉(zhuǎn)換,是通過(guò)在尺度空間內(nèi)找尋不會(huì)對(duì)旋轉(zhuǎn)、尺度縮放、亮度變化而產(chǎn)生變化的特征點(diǎn)[9-10].SIFT算法是通過(guò)高斯卷積核來(lái)對(duì)圖像進(jìn)行高斯平滑,然后在此基礎(chǔ)上進(jìn)行尺度的變換,高斯卷積核公式為
1)利用雙線性插值將源圖像放大一倍,再進(jìn)行σ=1.62-(0.5×2)2的高斯模糊,生成基礎(chǔ)圖像.其中初始σ=1.6.
2)計(jì)算高斯金字塔組數(shù)n,每組圖像的長(zhǎng)度和寬度為下一組的兩倍,并使得頂組的圖像長(zhǎng)寬在8像素左右.
3)構(gòu)造高斯金字塔.每組有(s+3)層,第(s+1)層圖像為下一組的第一層圖像.每一層高斯模糊參數(shù)
4)構(gòu)造差分高斯金字塔.將每組的高斯金字塔圖像相減,得到n組(s+2)層差分高斯金字塔.高斯差分算子為:
其中I為原圖像.
1)找尋極值點(diǎn).將圖像的像素點(diǎn)與前后兩幅圖像與自身周?chē)?6個(gè)鄰域像素點(diǎn)比較,記錄極值點(diǎn).
2)對(duì)極值點(diǎn)精確.離散空間的極值點(diǎn)并不是真正的極值點(diǎn).利用子像素插值得到真正的極值點(diǎn).
對(duì)尺度空間DoG函數(shù)進(jìn)行曲線擬合,其Taylor展開(kāi)式為:
其 中X=(x,y,σ)T.
對(duì)其求導(dǎo),令方程等于零可得到
其對(duì)應(yīng)的方程值為:
3)過(guò)濾掉邊緣點(diǎn).利用Hessian矩陣H的軌跡和行列式,去除不穩(wěn)定的邊緣響應(yīng)點(diǎn).
其中α為H的最大特征值,β為H的最小特征值,令α=rβ,則
D的主曲率和H的特征值成正比,則公式(r+1)2/r的值在兩個(gè)特征值相等時(shí)最小,隨著r的增大而增大.(r+1)2/r值越大,說(shuō)明兩個(gè)特征值的比值越大,即在某一個(gè)方向的梯度值越大,而在另一個(gè)方向的梯度值越小,而邊緣恰恰就是這種情況.所以為了剔除邊緣響應(yīng)點(diǎn),需要讓該比值小于一定的閾值,因此,為了檢測(cè)主曲率是否在某閾值r下,取r=10,若
則特征點(diǎn)保留.
該算法所得特征點(diǎn)如圖1~2所示.從圖1可看出,SIFT算法對(duì)條紋較清晰的木材特征點(diǎn)找尋是很精確的,但在圖1所示的最左側(cè),可以發(fā)現(xiàn)特征點(diǎn)的找取是不準(zhǔn)確的,反光還是會(huì)對(duì)其產(chǎn)生影響.如圖2所示,SIFT算法對(duì)條紋不清晰的木材的特征點(diǎn)找尋則十分不理想,準(zhǔn)確率達(dá)不到50%,且對(duì)于樣板3、4完全找不到特征點(diǎn).故此方法不適用.
圖1 SIFT算法特征點(diǎn)
圖2 SIFT算法特征點(diǎn)效果圖
灰度直方圖則是通過(guò)疊加每行像素的灰度值,通過(guò)每行灰度總值的變化來(lái)找尋特征點(diǎn).對(duì)于條紋較淺的木板,這樣可以加深特征.
而對(duì)灰度直方圖算法來(lái)說(shuō),如何消除干擾點(diǎn)是一個(gè)難題.如果只是找尋極小值,一張圖片就存在上百個(gè)極小值點(diǎn),如圖3所示.本研究需要的是在某一局部的最小,而每一個(gè)木材的條紋數(shù)是不確定的,故局部范圍不能確定.
圖3 灰度直方圖極小值點(diǎn)
從圖3可看出,所需要的特征點(diǎn)在這些極小值點(diǎn)中,但這些極小值點(diǎn)分布特別密集,可以通過(guò)設(shè)定閾值,使得下一個(gè)極小值點(diǎn)的像素位置減去該極小值點(diǎn)像素位置大于某一閾值的極小值點(diǎn),則判斷該極小值點(diǎn)為所需特征點(diǎn).具體步驟如下:
1)對(duì)灰度圖像進(jìn)行分段,每100列像素點(diǎn)為一段,計(jì)算每行像素點(diǎn)的灰度值之和,如圖4所示.
2)記錄極小值所在的點(diǎn)及其值.
3)尋找特征點(diǎn).如果極小值點(diǎn)減下一個(gè)極小值點(diǎn)的值大于某個(gè)閾值,則判斷該極小值為所需的特征點(diǎn).
圖4 灰度直方圖
從圖5與圖6可以看出,該方法很不穩(wěn)定,并沒(méi)有很好地把特征點(diǎn)提取出來(lái),還是存在很多干擾點(diǎn),且閾值要手動(dòng)設(shè)置,不同的閾值對(duì)結(jié)果影響很大.過(guò)小無(wú)法消除干擾點(diǎn),過(guò)大則錯(cuò)過(guò)了特征點(diǎn).
圖5 淺條紋樣本灰度直方圖算法特征點(diǎn)
圖6 深條紋樣本灰度直方圖算法特征點(diǎn)
灰度直方圖的所有極小值之中一定包含所需要的特征點(diǎn).由于木材的紋理不平滑會(huì)產(chǎn)生干擾點(diǎn),可從圖4看出這些干擾點(diǎn)會(huì)在真正的極小值點(diǎn)附近波動(dòng).這些干擾點(diǎn)與下一個(gè)極大值的距離是遠(yuǎn)小于真正極小值點(diǎn)與下一個(gè)極大值點(diǎn)的距離的.因此通過(guò)設(shè)定閾值可以較好地消除干擾點(diǎn).具體步驟如下:
1)對(duì)灰度圖像進(jìn)行分段,每100列像素點(diǎn)為一段,計(jì)算每行像素點(diǎn)的灰度值之和,如圖4所示.對(duì)圖像分段進(jìn)行灰度值累加是為了確保能夠準(zhǔn)確將條紋分離出來(lái),拉大灰度直方圖的相鄰極大極小值的差.灰度值越小則圖像越黑,累加之后有條紋的區(qū)域的值會(huì)處于極小.
2)分別記錄極大值和極小值所在的點(diǎn)及其值.
3)設(shè)定閾值.記錄極大值點(diǎn)的值減下一個(gè)極小值點(diǎn)值的絕對(duì)值.如果大于閾值,則判斷該極小值為所需的特征點(diǎn),如圖7與圖8所示.其中,閾值為所有極大值減相鄰極小值的差值由小到大排序后位于80%位置的差值的1/3.
圖7 淺條紋樣本改進(jìn)灰度直方圖算法特征點(diǎn)
圖8 深條紋樣本改進(jìn)灰度直方圖算法特征點(diǎn)
圖1與圖2所示為SIFT算法找尋的特征點(diǎn),圖7與圖8所示為改進(jìn)灰度直方圖找尋的每段的特征點(diǎn).通過(guò)對(duì)比可以看出,對(duì)于條紋清晰的木板SIFT算法和改進(jìn)直方圖算法的效果類(lèi)似,都對(duì)左側(cè)存在反光的區(qū)域無(wú)法準(zhǔn)確找尋,在光線穩(wěn)定的區(qū)域特征點(diǎn)找尋準(zhǔn)確率可達(dá)90%以上;對(duì)于條紋不清晰的木板SIFT算法則比改進(jìn)直方圖方法差得多,大部分條紋的特征點(diǎn)如圖2無(wú)法標(biāo)記,而改進(jìn)直方圖方法能很好地標(biāo)記出特征點(diǎn).通過(guò)改進(jìn)的直方圖方法對(duì)樣板進(jìn)行處理得到其準(zhǔn)確率及偏差率,見(jiàn)表1.條紋檢測(cè)的準(zhǔn)確率=特征點(diǎn)在條紋上的個(gè)數(shù)/條紋個(gè)數(shù).偏差率=特征點(diǎn)不在條紋的個(gè)數(shù)/條紋個(gè)數(shù).
表1 樣板的準(zhǔn)確率及偏差率 (單位:%)
隨機(jī)選取11張樣板進(jìn)行測(cè)試,樣板原圖如圖9所示,改進(jìn)的直方圖效果如圖10所示.對(duì)于條紋特征明顯的木板如樣板2、3、4、5、8、11,檢測(cè)的準(zhǔn)確率可達(dá)94%以上.但是樣板的色度不均性會(huì)模糊條紋邊界,對(duì)偏差率影響較大,如樣板4和8.對(duì)于條紋極細(xì)的樣板如1、6、7、10,有的條紋邊界模糊,幾近沒(méi)有條紋,但是改進(jìn)直方圖算法還是可以較好地檢測(cè)出來(lái),準(zhǔn)確率可達(dá)85%且偏差率在1%以內(nèi).對(duì)于條紋特征不太清晰,但條紋間距較大的木板如樣板9,其準(zhǔn)確率有93.7%,偏差率3.9%.
圖9 樣板原圖
圖10 改進(jìn)直方圖效果圖
上述灰度直方圖法只能對(duì)斜率在±10°范圍內(nèi)的木板進(jìn)行條紋檢測(cè),故需要對(duì)木材的圖片預(yù)先進(jìn)行旋轉(zhuǎn),才能較好地進(jìn)行檢測(cè).
木板的紋理是由均勻的直線分布而成,為了能將這些直線旋轉(zhuǎn)成斜率在所需范圍內(nèi),首先需要檢測(cè)這些條紋斜率的大概范圍.
GLCM(灰度共生矩陣)可以描述具有某種空間位置關(guān)系兩個(gè)像素灰度的聯(lián)合分布.根據(jù)這一概念,先把圖像的像素分為兩級(jí).木板有條紋的部分灰度值較深且出現(xiàn)的概率比其他的灰度低,因此將灰度值按從小到大的順序?qū)ふ业狡涓怕蕜偤么笥诘扔?.005的灰度x,這個(gè)灰度x就是所需的分割點(diǎn).再將小于該分割點(diǎn)的灰度值改為0,其他的改為255,得到二值圖像,灰度級(jí)為2,如圖11所示.最后將通過(guò)循環(huán)法尋找相同元素出現(xiàn)的次數(shù),該次數(shù)與循環(huán)次數(shù)的比值為所需的值.如斜率為零,則通過(guò)對(duì)比該像素點(diǎn)和往右的第10個(gè)像素點(diǎn)的值是否一樣;斜率為無(wú)窮,則通過(guò)對(duì)比該像素點(diǎn)和往下的第10個(gè)像素點(diǎn)的值是否一樣;斜率為45°,則通過(guò)對(duì)比該像素點(diǎn)和往左10個(gè)像素點(diǎn)再往下10個(gè)像素點(diǎn)的值是否一樣.
圖11 灰度級(jí)為2的二值圖像
從樣板中隨機(jī)選取10張圖片,如圖12所示.對(duì)其旋轉(zhuǎn)一定角度進(jìn)行方向性測(cè)試,結(jié)果見(jiàn)表2.其中概率數(shù)值最大的角度為該木板的斜率,可以發(fā)現(xiàn)所測(cè)試的10張圖片中的方向性準(zhǔn)確率可達(dá)91%.通過(guò)同一塊木板不同斜率的概率值可以發(fā)現(xiàn)最大與最小的概率值相差不是特別大,特別是條紋細(xì)密的木板,如樣板4.
圖12 測(cè)試圖片
表2 測(cè)試圖片方向分布特征值
木板方向性準(zhǔn)確率高的前提是光照均勻,否則會(huì)極大影響二值化的圖像,使得二值化后的圖像條紋沒(méi)有規(guī)律性、方向性.
通過(guò)對(duì)木材圖像進(jìn)行SIFT算法和改進(jìn)直方圖算法得到的特征點(diǎn),可以看出:
1)改進(jìn)直方圖算法相比SIFT算法在木材條紋檢測(cè)上更有效,算法更加簡(jiǎn)單,故具有可行性,對(duì)木材條紋的檢測(cè)有較好的指引作用.
2)改進(jìn)直方圖算法是對(duì)某一段灰度值的橫向相加,其分析的是橫向條紋的檢測(cè),對(duì)斜率在±10°范圍內(nèi)的條紋還是可以檢測(cè)的,但通過(guò)方向性可以確定其大概的斜率范圍,將其旋轉(zhuǎn)之后再進(jìn)行檢測(cè),可大大提高準(zhǔn)確率;光照不均,反光大則會(huì)影響其結(jié)果,因此,在今后的實(shí)驗(yàn)中可對(duì)其方向性做進(jìn)一步的改進(jìn).