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