摘要:本文通過比較不同邊緣檢測算法的實際效果,來選擇一種運算速度快、邊緣定位準確、噪聲抑制能力強的邊緣檢測算法,實現結構光調制圖像標定數據的提取。
關鍵詞:結構光;邊緣檢測;邊界搜索
1 引言
按照系統結構光三維重建系統設計,用邊緣提取方法實現光條邊緣位置信息精確提取是獲取標定用樣本數據的一個重要環節。圖1所示的就是待處理的經過灰度化的結構光調制圖像的圖像。本文通過對實際實驗圖像處理效果的比較,選擇合適的圖像處理[1]方法來實現結構光光條邊緣位置信息的提取。
2 光條邊緣位置提取的實現流程
結構光調制圖像中光條邊緣位置坐標[2]的提取實現流程如圖2所示,有如下四個步驟:圖像濾波、圖像增強、邊緣檢測、邊界搜索。
1)圖像濾波
從圖1所示來看,待處理圖像處在的噪聲還是相當明顯的,需要用圖像濾波的方法來平滑圖像,常用方法即采用均值濾波或中值濾波[3]。實驗通過對兩種方法的比較,在采用較大滑動窗口時,均值濾波的方法容易使圖像邊緣變得模糊,而中值濾波其濾除噪聲的能力下降。
實驗通過對不同滑動窗口的濾波效果比較發現,采用3×3滑動窗口的均值濾波器和中值濾波器都可以獲得比較好的濾波效果。具體采用哪種濾波器還要參考圖像增強后的效果。
2)圖像增強
圖像增強的目的是為了使圖像的邊緣、輪廓線以及圖像的細節變得清晰。實驗發現拉普拉斯高通濾波器能使圖中各區域的邊界得到較明顯增強的同時慮除低頻分量,使圖中原來比較平滑區域內部的灰度動態范圍被壓縮。
圖3所示的是經過3×3中值濾波圖像采用拉普拉斯圖像增強的結果,而圖4所示為經過3×3均值濾波圖像的拉普拉斯圖像增強效果。通過比較兩圖,發現中值濾波的圖像還存在較強的噪聲,所以對本圖像采用均值濾波的方法可以取得比較好的效果。
3)邊緣檢測
在MATLAB環境下,edge函數利用前面介紹的邊緣檢測算子來檢測圖像邊緣。edge函數可以指定一個灰度閾值,只有滿足這個閾值條件的點才視為邊界點。edge函數對灰度圖像I進行邊緣檢測,返回與I大小相同的二值圖像,其中1表示I中的邊緣,0代表非邊緣。
在邊緣檢測中邊緣定位能力和噪聲抑制能力是一對矛盾體,就各種算法而言,有的邊緣定位能力比較強,有的抗噪聲能力比較好;而對某些算子,參數的選擇也直接影響到邊緣定位能力和噪聲抑制能力的強弱。以下就實際測試結果,具體介紹各個算子[7]的特點:
Roberts該算子對具有陡峭的低噪聲圖像響應最好,邊緣定位精度較高,但容易丟失一部分邊緣,如圖5(a)所示,其中部分邊緣沒有被檢測出來,造成邊緣斷裂。
Marr-Hildreth算子[4]:如圖5(b)所示該算子對噪聲的抑制作用比較明顯,但同時也可能將原有的邊緣也平滑了,造成某些邊緣無法檢測到。此外,對于高斯函數中方差參數 的不同選擇,對圖像邊緣檢測效果有很大的影響。
Canny算子[5]:所采用的一階微分算子的方向性較M-H算子要好,因此邊緣定位準確性較高,如圖5(c)所示,其檢測效果優于其它檢測算子。
通過實驗結果可以看出,Canny算子是傳統邊緣檢測算子中效果較好的算子之一,在本系統的實際數據提取時用的就是基于Canny算子的邊緣檢測方法。
4) 圖像的邊界搜索
經過邊緣檢測得到的圖像是二值圖像,用一個由0和1組成的二維矩陣表示。對于邊緣檢測后的二值圖像,要實現邊緣的坐標信息的提取,首先需要通過膨脹、腐蝕和細化這三種形態學處理法去除二值圖像中噪聲點、毛刺等不需要的部分,再通過邊界搜索的方法獲得圖像邊緣的坐標信息。
二值圖像的膨脹、腐蝕和細化膨脹和腐蝕是關于集合補和反轉的對偶,這兩種運算是緊密聯系在一起的,一種運算對目標的操作相當于另一種運算對圖像背景的操作。
細化處理是指在不影響紋線連通性的基礎上,刪除紋線的邊緣像素,直到紋線為單像素寬為止。理想細化后的紋線骨架應該是原始紋線的中間位置,并保持紋線的連接性、拓撲結構和細節特征。
從圖6(a)(b)可以看出二值圖像經過圖像膨脹后邊緣擴充,然后用同一個結構元素進行圖像腐蝕,腐蝕后的圖像邊緣比較線性,但還是存在邊緣的多像素寬,因此要采用圖像細化來處理。如圖6(c)所示,圖像細化后邊緣紋線都是單像素寬,多余的部分已被慮除。這樣的圖像就可以通過邊界搜索去尋找邊界的坐標位置。
2 二值圖像的邊界搜索
由于邊緣都是單像素寬,且圖像中不存在毛刺、孤立噪聲點,圖6(c)所示的二值圖象的邊界搜索算法很簡單:我們把一個自身為1而其上一個像素為0的像素定義為邊界點,按從上到下,從左到右的順序對二值圖像進行掃描,發現這樣的像素點存儲其坐標值。按照這樣掃描方式,如果發現第一個從0開始變為1的像素一定是最左上角的邊界。
參考如圖7所示的邊界搜索流程圖,二值圖像邊界搜索具體步驟如下:
從二值圖像的最左邊從上到下進行掃描,如果完成一列掃描沒有發現邊界點則繼續搜索右邊一列。
在搜索到第一個邊界點后,繼續向下搜索,將從0開始變為1 的像素記錄下來,將搜索到的邊界點按順序存到矩陣P(K)中,K代表的是在一列中發現的第K個邊界點。這么做是為了將同一光條邊緣的邊界點存儲到一個矩陣中,方便后續的數據處理。
直到搜索到x=1024,y=768說明搜索已經遍歷了整副圖像,搜索結束。
參考文獻
[1] 章毓晉. 圖象處理和分析[M]. 北京: 清華大學出版社, 1999, 179-182
[2] 孫慧, 周紅霞, 李朝暉 圖象處理中邊緣檢測技術的研究[J], 電腦開發與應用, 2002 ,Vol.15 (10) : 7-9
[3] 李輝,蔣秀明,高殿斌等. Matlab語言在數字圖像中值濾波中的應用研究[J]. 天津工業大學學報, 2003, 22(1):87-88
[4] 董漢莉. Marr-Hildreth算子邊緣精確定位的研究[J]. 鄭州工業大學學報, 1999 Vol.14(2):3-6.
[5] 林卉,趙長勝,舒寧.基于Canny算子的邊緣檢測及評價[J]. 黑龍江工程學院學報, 2003, Vol.17(2):3-6.
[6] 周心明, 蘭賽, 徐燕. 圖象處理中幾種邊緣檢測算法的比較[J]. 現代電力, 2000, Vol.17 (3):65~69.
作者簡介:夏冰冰,男, 講師 1980年2月生,碩士,2006年畢業于浙江工業大學信息與控制工程系,現為寧波職業技術學院海天學院教師,研究方向:模式識別及工業檢測。