楊慶江, 楊 碩, 王衛(wèi)鑫
(黑龍江科技大學(xué) 電子與信息工程學(xué)院, 哈爾濱 150022)
隨著光學(xué)技術(shù)的不斷發(fā)展,對(duì)條紋的處理方法也越來越多,對(duì)檢測(cè)精度的要求也越來越高。目前,比較流行的檢測(cè)方法主要有條紋中心線法[1]和全灰度法[2]。在全灰度法中主要分為相移法[3]和傅里葉變換法[4]。雖然這兩種方法的精度比較高,但是相移法的檢測(cè)精度依賴于條紋圖數(shù)量,傅里葉變換法比較容易受到噪聲的影響。條紋中心線法是一種直接測(cè)量條紋位移的方法,但是光干涉型甲烷測(cè)定儀[5]的光源是由一個(gè)小燈泡發(fā)出的,不能準(zhǔn)確得到光源的實(shí)際波長(zhǎng),這就給中心線的提取帶來了困難。利用工業(yè)相機(jī)采集光干涉型甲烷測(cè)定儀的干涉條紋,在圖像處理技術(shù)的基礎(chǔ)上,采用邊緣檢測(cè)算子對(duì)圖像進(jìn)行邊緣檢測(cè),但傳統(tǒng)的Sobel邊緣檢測(cè)算子對(duì)圖像邊緣的方向特征考慮較少, 常丟失部分邊緣細(xì)節(jié),使檢測(cè)到的位移量有著很大的誤差。筆者在傳統(tǒng)Sobel算子的基礎(chǔ)上,提出一種多方向的邊緣檢測(cè)算法,以提升檢測(cè)條紋邊緣的完整性與連續(xù)性。
文中利用工業(yè)相機(jī)對(duì)干涉圖像進(jìn)行采集,然后對(duì)采集到的圖像進(jìn)行預(yù)處理,預(yù)處理包括灰度化,中值濾波以及二值化。利用改進(jìn)的Sobel算法對(duì)二值化后的圖像進(jìn)行邊緣檢測(cè),得到白色條紋的坐標(biāo),從而計(jì)算出條紋的位移量。其設(shè)計(jì)算法的具體實(shí)現(xiàn)流程如圖1所示。
圖1 條紋處理過程Fig. 1 Stripe processing
采集到的干涉條紋是一幅包含大量的R、G、B的彩色圖像。為了使資源最大化與減少處理時(shí)間需要先對(duì)圖像進(jìn)行灰度化處理?;叶然髨D像的亮度信息與原圖像保持一致,只是由原來的具有三個(gè)通道的圖像變?yōu)榱藘H有一個(gè)灰度通道的圖像。灰度化后的圖像特征是通過灰度的強(qiáng)度信息來體現(xiàn)的,它的每一個(gè)像素的位置都在0~255之間。其中圖像中白色的部分代表著它的灰度是255,黑色的部分代表著它的灰度為0,其余的部分則在0~255之間。通過對(duì)采集到的圖像分析,發(fā)現(xiàn)在所包含的眾多噪聲中,椒鹽噪聲占據(jù)了非常大的比例,為了減少噪聲對(duì)后面邊緣檢測(cè)的影響,故選用中值濾波器對(duì)圖像進(jìn)行預(yù)處理[6]。為了增加識(shí)別效率,需要對(duì)圖像進(jìn)行二值化處理。大津法(OTSU)是一種確定圖像二值化分割閾值的算法,OSTU算法又稱最大類間方差法[7]。它計(jì)算簡(jiǎn)單快捷,不會(huì)因?yàn)閳D像的亮度和對(duì)比度的破壞而受到影響,OSTU二值化法是在圖像的直方圖上進(jìn)行處理的。
OSTU算法利用閾值把圖像分為目標(biāo)和背景分割成兩個(gè)部分。目標(biāo)和背景之間的類間方差越大,構(gòu)成圖像的兩部分的差別就越大,如果將部分的目標(biāo)錯(cuò)分成了背景或者把部分的背景錯(cuò)分成了目標(biāo)都會(huì)導(dǎo)致這兩部分的差別變得很小。所以使用這種方法分割最大的優(yōu)點(diǎn)是錯(cuò)分幾率非常小。預(yù)處理后的圖像如圖3所示。
圖2 原圖像Fig. 2 Original image
圖3 預(yù)處理后圖像Fig. 3 Pre-processed image
Sobel算子是一種基于圖像梯度的邊緣檢測(cè)算法,它利用離散型的差分算子計(jì)算圖像亮度函數(shù)的灰度近似值,在圖像的每一個(gè)角落使用這個(gè)算子,都會(huì)產(chǎn)生與之相匹配的法矢量。Sobel算法主要是采用Sobel邊緣檢測(cè)算子對(duì)圖像的橫向與縱向2個(gè)方向與圖像進(jìn)行平面卷積[8]。用B作為原始圖像,Gx代表橫向檢測(cè)的圖像灰度值,Gy代表縱向檢測(cè)的圖像灰度值,其關(guān)系式為:
Sobel算子根據(jù)像素點(diǎn)上下、左右鄰點(diǎn)灰度加權(quán)差,在邊緣處達(dá)到極值這一現(xiàn)象檢測(cè)邊緣。對(duì)噪聲具有平滑作用,提供較為精確的邊緣方向信息。但是該算法也存在兩個(gè)些缺點(diǎn):(1)Sobel算法使用的是水平方向和垂直方向的3×3模板與鄰域卷積運(yùn)算,當(dāng)進(jìn)行其它方向的檢測(cè)時(shí)效果一般。(2)Sobel邊緣檢測(cè)算法判定邊緣點(diǎn)的依據(jù)是只要通過Sobel邊緣檢測(cè)算子計(jì)算出的像素點(diǎn)梯度值大于閾值。閾值的選擇關(guān)乎到最終結(jié)果的成敗,使用單一的閾值會(huì)非常容易的把一些應(yīng)該是噪聲的點(diǎn)給認(rèn)為是邊緣的點(diǎn)。所以當(dāng)有很多噪聲的時(shí)候,Sobel邊緣檢測(cè)算法檢測(cè)出的邊緣信息效果就會(huì)非常的不好。
文中提到的Sobel算法采用了3×3算子模板檢測(cè)圖像邊緣,這種方法很容易提取到錯(cuò)誤的信息。因此,為了提高邊緣信息的精度,增加抗噪性,使用了5×5的模板來代替原有的3×3的模板,而且在傳統(tǒng)的基礎(chǔ)上增加了十二個(gè)方向上的梯度運(yùn)算,相當(dāng)于八個(gè)方向的梯度檢測(cè),分別為0°、22.5°、45°、67.5°、90°、112.5°、135°、157.5°、180°、202.5°、225°、247.5°、270°、292.5°、315°、337.5°十六個(gè)方向的模板進(jìn)行檢測(cè),擴(kuò)大了檢測(cè)的方向范圍,不僅提高了魯棒性,而且錯(cuò)檢率在一定程度上得到了大大的減少。改進(jìn)的像素模板如圖4所示。
傳統(tǒng)的Sobel邊緣檢測(cè)采用的是單閾值分割。這種分割方式不僅不能保證誤檢率與錯(cuò)檢率同時(shí)最小,而且在提取邊緣的連續(xù)上也有一定的缺陷。閾值的選取非常重要,選得過低,會(huì)誤選許多錯(cuò)誤邊緣信息,為后續(xù)的處理帶來困難;閾值選取過高,則會(huì)漏選邊緣信息。
文中設(shè)計(jì)了一種自適應(yīng)能力較強(qiáng)的自適用閾值分割算法。本次邊緣檢測(cè)是在二值化后的圖像上進(jìn)行的,因?yàn)樵诙祷臅r(shí)候,已經(jīng)對(duì)圖像進(jìn)行了第一輪的閾值處理,現(xiàn)在圖像的灰度不是雜亂無章的,只有0和1兩個(gè)像素,利用3×3的矩陣,在圖像范圍內(nèi)求和,如果為1,則當(dāng)前設(shè)為0,若不為1,則不進(jìn)行閾值處理。圖5為不同Sobel算子邊緣檢測(cè)圖。由圖5可以看出,邊緣遠(yuǎn)遠(yuǎn)大于傳統(tǒng)的Sobel邊緣檢測(cè)算子,為后續(xù)測(cè)量干涉條紋的位移量打下了堅(jiān)實(shí)的基礎(chǔ)。
圖4 十六方向算子模板及模板值Fig. 4 Sixteen-direction operator template and template value
圖5 不同的邊緣檢測(cè)算子Fig. 5 Different edge detection operator
從圖5可以清楚的看到,本系統(tǒng)的邊緣檢測(cè)算子可以較好地檢測(cè)到干涉條紋的邊緣。
經(jīng)過二值化處理后的數(shù)據(jù)成方波狀。對(duì)處理過的數(shù)據(jù)進(jìn)行查詢,記錄每個(gè)方波波峰,最開始的位置Xi,波峰的長(zhǎng)度Li,iN。將這些組的數(shù)據(jù)長(zhǎng)度進(jìn)行對(duì)比,找出其中的最大長(zhǎng)度Lmax,這個(gè)Lmax就是上面提到的白色條紋所在的位置如圖6所示。將這個(gè)位置記錄下來,然后與標(biāo)準(zhǔn)的位置進(jìn)行比對(duì),由于線陣CMOS的像素位置是整齊排列的,完全可以利用像素值來求得白色條紋移動(dòng)的距離,這樣就可以得到條紋偏移的距離
S=(X2-X2′)×σ,
(1)
式中:S——條紋偏移的距離;
X2——條紋移動(dòng)前Lmax的初始位置;
X2′——在條紋發(fā)生移動(dòng)后,Lmax的初始位置;
σ——相機(jī)相鄰像元的中心距。
圖6 干涉條紋偏移前后位置Fig. 6 Interference fringes shifted back and forth
利用本系統(tǒng)的方法進(jìn)行測(cè)驗(yàn)的結(jié)果如表1所示。
表1 水平位移實(shí)驗(yàn)結(jié)果
由表1可以看出,使用本系統(tǒng)測(cè)量位移的方法,誤差可以達(dá)到 0.01 mm,如果采用性能更好的工業(yè)相機(jī)其精度就會(huì)達(dá)到更高。
在對(duì)干涉條紋的位移檢測(cè)中,改進(jìn)了傳統(tǒng)的Sobel邊緣檢測(cè)算子,給出一種多方向的邊緣檢測(cè)算子,改進(jìn)的算子減少了邊緣斷點(diǎn)的產(chǎn)生,能夠比較穩(wěn)定地檢測(cè)出完整的邊緣。通過重新設(shè)置傳統(tǒng)Sobel 算子的閾值,使其變?yōu)樽赃m應(yīng)閾值,使檢測(cè)出的邊緣更加變清晰,大大降低噪聲和偽邊緣對(duì)其干擾,利用文中提出的邊緣檢測(cè)算法成功獲得了干涉條紋的位移量,達(dá)到了預(yù)期的效果。