單德強 胡 超 劉飛飛
(1.江西理工大學電氣工程與自動化學院 贛州 341000)
(2.浙江大學寧波理工學院 寧波 315100)
隨著現代技術的發展,數字圖像處理技術[1]在工業測量中的運用得到了越來越多的應用。而使用光斑作為特征標志物在工業上來對目標對象進行測量時需要檢測光斑的位移,對采集到的光斑圖像進行處理得到所需要的測量結果。光斑圖像的處理包括圖像的預處理、圖像的分割、二值化以及計算光斑的中心坐標位置。圖像的預處理主要是圖像的去噪,采用閾值分割并進行二值化是比較關鍵的環節,二值化閾值的選取關系到光斑坐標計算的精確度。光斑圖像是具有目標亮度較高且面積相對小,背景亮度較暗且面積大的特點,現有的迭代法、最大熵法等閾值分割[2]對于光斑圖像的分割效果并不好,本文提出一種適用于鏡片屈光度檢測中光斑圖像的閾值分割方法。光斑圖像經過閾值分割后,對光斑點進行輪廓尋找[3],提取光斑點的邊緣,再計算光斑中心點的坐標位置。
閾值分割方法的原理如下:設原始灰度圖像為f(x,y),以一定的準則在f(x,y)中找出一個灰度值T 作為閾值,將圖像分割成為兩個部分,灰度值大于T 的部分為1(白色),灰度值小于T 的部分為0(黑色)。分割后的二值化圖像g(x,y)即為

目前,對于閾值分割選區進行了大量的研究,也提出了許多的經典的算法。例如OTSU 法[4]、迭代法等許多類型的閾值選取的方法。
OTSU法是日本的大津展之提出的最大類間方差閾值方法[5],是一種自適應閾值確定的方法,也是一種基于全局的二值化算法。其原理是根據圖像的灰度特性,將圖像分為前景和背景兩部分,把圖像的灰度數按照灰度級數分為兩個部分,使得兩個部分之間的灰度值差異最大,每個部分之間的灰度差異最小,通過方差的計算來尋找一個合適的灰度級別來劃分[6]。這種算法計算簡單,不受圖像亮度和對比度的影響,被認為是圖像分割中閾值選取的最優方法[7]。
迭代法選取閾值的方法也是一種較為經常使用的閾值選取的方法。迭代法是首先猜測一個初始的閾值,再通過對圖像的多次計算再對閾值進行不斷地修改的過程[8]。重復地對圖像進行閾值操作,將圖像分割為對象類和背景類,然后來利用每一個類中的灰階級別對閾值進行改進。其算法的處理流程如下:
1)為全局閾值選擇一個初始估計值T(圖像的平均灰度);
2)用T 分割圖像。產生兩組像素:G1 由灰度值大于T 的像素組成,G2 由灰度值小于等于T 的像素組成;
3)計算G1 和G2 像素的平均灰度值m1 和m2;
4)計算一個新的閾值:

5)重復步驟2)和4),直到連續迭代中的T 值間的差小于一個預定義參數為止[9]。
本文提出的閾值分割方法是在基本的全局閾值分割法的基礎上增加了OTSU 算法,基本的全局閾值分割法是目前最為簡單且較為普遍的閾值分割方法,不過這種方法主要適用于圖像直方圖有明顯波谷[10],而OTSU 算法能夠自適應閾值,對于一些圖像直方圖波谷不明顯的情況也能很好地降低錯分的概率,與基本的全局閾值分割方法二者相結合是相得益彰[11]。
設一幅灰階為L 的圖像各個像素灰度值為[1 ,2,…,L],像素灰度值為i 的像素點數量為ni。對所有像素點歸一化[12]后得到:

把所有的像素以灰度值k 為界限分為兩個部分C0和C1,C0所含的像素點灰度值為[1 ,…,k ],C1所含的像素點灰度值為[k +1,…,L] 。由此可以得出像素被分配到C0和C1中的概率分別為

則分配給C0和C1的像素的平均灰度值為


為了尋找最優閾值k,此時引入參數η。


由式(6)可以看出,μ0和μ1相差越大,越大,表明類間方差是類之間的可分性度量[13]。但是一個常數,因此最大化η 等價于最大化。由此引入閾值k,是k 的函數,于是可得出:

所以上述問題也就轉換為計算k 值來使目標函數η 最大化。將k 作為閾值來對原始圖像進行二值化分割,即為

在對原始圖像進行二值化處理之后,需要找出原始圖像的光斑輪廓,以便于下一步進行光斑特征點中心坐標的尋找,依據八連通來檢測二值化處理過后的圖像中每一個像素和其周圍直接鄰域的狀態[14]。假若一個像素不為零且其周圍連通的區域至少有一個零像素,那么這個像素就是位于光斑圖像的輪廓邊界,由此可以得出光斑圖像的輪廓邊界[15]。本文在圖像處理時使用了OpenCV 庫,OpenCV 庫中自帶有輪廓尋找函數cv2.f ind Contours()可以直接對二值化處理后的光斑圖像進行光斑邊緣輪廓的尋找,該函數返回光斑圖像上每一個光斑點對應的邊界點[16](即為輪廓)。經cv2.f ind Contours()函數返回一個二元元組,元組的第一個元素(索引0)是輪廓列表,遍歷所有的輪廓,使用函數cv2.moments()計算輪廓區域圖像的矩[17]。在計算機視覺和圖像處理領域,圖像的矩經常是被用來描述圖像中某個對象的形狀。這些矩描述了形狀的基本統計特征,包括對象的面積、形心(即對象的中心坐標(x,y))、取向連同其他有用的特征。函數cv2.moments()會將計算得到的矩以一個字典的形式返回,根據返回的矩的值,可以計算出對象的重心(即為中心坐標):

其中M00是0階矩,M10和M01均為1階矩。
使用python 2.7 實現基本全局閾值選取、自適應閾值選取和本文提出的基于OTSU 算法的閾值選取方法,對實際拍攝所得到的圖像分別使用不同的方法進行處理,得到的幾種方法圖像分割以后的結果以及特征點中心提取的結果如圖1~6所示。
實驗中采用同一幅光斑大小不同圖像進行處理,由下列閾值分割結果可以明顯看出大津法的分割效果是比較好的,與本文所使用的方法閾值最為接近,但是仍存在不準確性,而兩種自適應閾值方法效果是最差的。對每種分割方法計時后,大津法所用時間最短,而本文方法所用時間相對比大津法長,但是比基本全局閾值分割法短。

圖1 原始圖像

圖2 基本全局閾值法

圖3 平均自適應閾值法

圖4 高斯自適應閾值法

圖5 OTSU法

圖6 本文方法

圖7 特征點中心坐標
經過實驗的對比分析,本文提出的在基本的全局閾值分割方法的基礎上增加OTSU 算法的混合閾值分割方法能夠更加準確地分割光斑圖像,同時在圖像處理地時間上也是具有一定地優勢。除此之外,本文討論的光斑中心點坐標計算方法能夠快速準確地計算光斑點的中心坐標,實驗結果如圖7所示。通過輪廓尋找計算圖像的矩,再去求取光斑中心坐標,可以避免大量的數值排序和迭代計算,大大提高了運算速度。