圖像預處理(二值化)
本文的實驗室主要通過opencv與python3實現,相關的代碼可以在GitHub中找到。
1. 圖像獲取與灰度化
通過攝像頭獲取到的圖像為彩色的圖像。彩色圖像主要分為兩種類型,RGB及CMYK。其中RGB的彩色圖像是由三種不同顏色成分組合而成,一個為紅色,一個為綠色,另一個為藍色。而CMYK類型的圖像則由四個顏色成分組成:青C、品M、黃Y、黑CMYK類型的圖像主要用於印刷行業。
每個圖像的像素通常對應於二維空間中一個特定的位置,並且有一個或者多個與那個點相關的采樣值組成數值。灰度圖像,也稱為灰階圖像,圖像中每個像素可以由0(黑)到255(白)的亮度值(Intensity)表示。0-255之間表示不同的灰度級。
將彩色圖像轉化成為灰度圖像的過程稱為圖像的灰度化處理。灰度化,在RGB模型中,如果R=G=B時,則彩色表示一種灰度顏色,其中R=G=B的值叫灰度值,因此,灰度圖像每個像素只需一個字節存放灰度值(又稱強度值、亮度值),灰度范圍為0-255。彩色圖像中的每個像素的顏色有R、G、B三個分量決定,而每個分量有255個值可取,這樣一個像素點可以有1600多萬(255255255)的顏色的變化范圍。而灰度圖像一個像素點的變化范圍為255種,所以在數字圖像處理種一般先將各種格式的圖像轉變成灰度圖像以使后續的圖像的計算量變得少一些。灰度圖像的描述與彩色圖像一樣仍然反映了整幅圖像的整體和局部的色度和亮度等級的分布和特征。對於灰度化的方式有分量法、最大值法、平均值法,加權平均法等。本文使用平均值法對圖像進行灰度化。
對於平均值法,將彩色圖像中的R、G、B三個分量的亮度求簡單的平均值,將得到的值作為灰度值輸出而得到灰度圖。其實現的表達式如下:
通過實驗得到得到如下圖所示,灰度化前后:(實現代碼)


2.二值化
通過以上對彩色圖片進行灰度化以后,把獲取到的灰度圖像進行二值化處理。對於二值化,其目的是將目標用戶背景分類,為后續車道的識別做准備。灰度圖像二值化最常用的方法是閾值法,他利用圖像中目標與背景的差異,把圖像分別設置為兩個不同的級別,選取一個合適的閾值,以確定某像素是目標還是背景,從而獲得二值化的圖像。
對於閾值法二值化,假設閾值設置為T,就可以以T為邊界,把數值分為兩個部分,則二值化的公式如下:
式中,Gray(i,j)表示在圖片(i,j)處的灰度值,Ϝ(i,j)表示二值化后的值,只能取0或者1。在閾值二值化中,最主要的是選取合適的閾值,這也是二值化的難點所在。常用的二值化閾值選取方法有雙峰法、p參數法、大律法(Otsu法)、最大熵閾值法、迭代法等。
2.1 雙峰法選取閾值T
如果給定的圖像的灰度分布是比較有規律,苗木表和背景在圖像的直方圖各自形成一個波峰,他們之間存在波谷。那么,閾值T可以在波谷取值,如下圖所示:
實現的表達式如下:
式中,T表示閾值,Gray(i,j)表示原始圖像的灰度值,G(i,j)表示二值化后的灰度值。通過實驗獲取得到的道路圖像的直方圖灰度分布,如圖所示。
從圖中可以看出,在道路圖像二值化中不適合使用雙峰法選取閾值。
2.2 P參數法選取閾值T
若已知目標區域的P值,則可以采用P參數的法進行分割。假設已知直方圖中目標區域所占的比例為P_1,則該算法實現的步驟如下:
(1). 計算圖像直方圖的分布P(t),其中t = 0,1,2...255,表示圖像的灰度值;
(2). 從t=0開始,計算圖像的累積分布直方圖,實現的表達式為:
(3). 計算閾值T,
得到的T值也表示P_1最接近累積分布的灰度分布值t。
2.3 大律法(Otsu法)選取閾值T
Otsu算法的基本思想是用某一假定的灰度值t將圖像的灰度分為兩組,當兩組的類間方差最大時,此灰度值t就是圖像二值化的最佳閾值。假設圖像有L個灰度值,那么灰度值的取值范圍為0L-1,在此范圍內取灰度值T,將圖像分成兩組G_1和G_2其中G_1包含的像素值在0T,G_2的灰度值在T+1~ L-1,用N表示圖像圖像像素總數,n_i表示灰度值為i的像素的個數。求值過程如下:假設每一個灰度值i出現的概率p_i= n_i/N,G_1和G_2兩組像素個數在整體圖像中所占的百分比為ω_1和ω_2,兩組平均灰度值為μ_1和μ_2,則:
占比:
平均值灰度值:
圖像總灰度值:
類間方差:
最佳閾值:獲取類方差最大值時對應的灰度值t:
通過以上的步驟即可得到最佳的T值。
2.4 最大熵閾值法求T值
在信息論中的Shannon entropy概念用於圖像分割,依據是使得圖像中目標與背景分布的信息量最大,即通過測試圖像灰度直方圖的熵,找出最佳的閾值T。對於灰度值范圍為0,1,2...L-1的圖像,其直方圖熵的定義為:
其中p_i為像素值為i的像素占整個圖像的概率。設閾值t將圖像划分為目標O和背景B兩類,他們的概率分布分別為:
所以目標O和背景B的熵函數分別為:
其中,
圖像的總熵為:
此方法不需要先驗知識,而對非理想的雙峰直方圖也可以進行較好的分割,但不適合信噪比較低的圖像分割。
通過實驗,對灰度化的圖像進行二值化后的效果如下,
可以自己調整閾值來到達更好的二值化效果。相關代碼,與API在GitHub中可以找到。
未完待續。