概述
將256個(gè)亮度等級(jí)的灰度圖像通過(guò)適當(dāng)?shù)拈撝颠x取而獲得仍然可以反映圖像整體和局部特征的二值化圖像。在數(shù)字圖像處理中,二值圖像占有非常重要的地位,首先,圖像的二值化有利于圖像的進(jìn)一步處理,使圖像變得簡(jiǎn)單,而且數(shù)據(jù)量減小,能凸顯出感興趣的目標(biāo)的輪廓。其次,要進(jìn)行二值圖像的處理與分析,首先要把灰度圖像二值化,得到二值化圖像。
所有灰度大于或等于閾值的像素被判定為屬于特定物體,其灰度值為255表示,否則這些像素點(diǎn)被排除在物體區(qū)域以外,灰度值為0,表示背景或者例外的物體區(qū)域。1
原理圖像的二值化處理就是將圖像上的點(diǎn)的灰度置為0或255,也就是將整個(gè)圖像呈現(xiàn)出明顯的黑白效果。即將256個(gè)亮度等級(jí)的灰度圖像通過(guò)適當(dāng)?shù)拈撝颠x取而獲得仍然可以反映圖像整體和局部特征的二值化圖像。在數(shù)字圖像處理中,二值圖像占有非常重要的地位,特別是在實(shí)用的圖像處理中,以二值圖像處理實(shí)現(xiàn)而構(gòu)成的系統(tǒng)是很多的,要進(jìn)行二值圖像的處理與分析,首先要把灰度圖像二值化,得到二值化圖像,這樣子有利于在對(duì)圖像做進(jìn)一步處理時(shí),圖像的集合性質(zhì)只與像素值為0或255的點(diǎn)的位置有關(guān),不再涉及像素的多級(jí)值,使處理變得簡(jiǎn)單,而且數(shù)據(jù)的處理和壓縮量小。為了得到理想的二值圖像,一般采用封閉、連通的邊界定義不交疊的區(qū)域。所有灰度大于或等于閾值的像素被判定為屬于特定物體,其灰度值為255表示,否則這些像素點(diǎn)被排除在物體區(qū)域以外,灰度值為0,表示背景或者例外的物體區(qū)域。如果某特定物體在內(nèi)部有均勻一致的灰度值,并且其處在一個(gè)具有其他等級(jí)灰度值的均勻背景下,使用閾值法就可以得到比較的分割效果。如果物體同背景的差別表現(xiàn)不在灰度值上(比如紋理不同),可以將這個(gè)差別特征轉(zhuǎn)換為灰度的差別,然后利用閾值選取技術(shù)來(lái)分割該圖像。動(dòng)態(tài)調(diào)節(jié)閾值實(shí)現(xiàn)圖像的二值化可動(dòng)態(tài)觀察其分割圖像的具體結(jié)果。1
形成方法像素值法該方法非常簡(jiǎn)單,對(duì)RGB彩色圖像灰度化以后,掃描圖像的每個(gè)像素值,值小于127的將像素值設(shè)為0(黑色),值大于等于127的像素值設(shè)為255(白色)。該方法的好處是計(jì)算量少速度快。缺點(diǎn)更多首先閾值為127沒(méi)有任何理由可以解釋?zhuān)浯瓮耆豢紤]圖像的像素分布情況與像素值特征??梢哉f(shuō)該方法是史最弱智的二值處理方法一點(diǎn)也不為過(guò)。
平均值法最常見(jiàn)的二值處理方法是計(jì)算像素的平均值K,掃描圖像的每個(gè)像素值如像素值大于K像素值設(shè)為255(白色),值小于等于K像素值設(shè)為0(黑色)。該方法相比方法一,閾值的選取稍微有點(diǎn)智商,可以解釋。但是使用平均值作為二值化閾值同樣有個(gè)致命的缺點(diǎn),可能導(dǎo)致部分對(duì)象像素或者背景像素丟失。二值化結(jié)果不能真實(shí)反映源圖像信息。
直方圖法使用直方圖方法來(lái)尋找二值化閾值,直方圖是圖像的重要特質(zhì),直方圖方法選擇二值化閾值主要是發(fā)現(xiàn)圖像的兩個(gè)最高的峰,然后在閾值取值在兩個(gè)峰之間的峰谷最低處。該方法相對(duì)前面兩種方法而言稍微精準(zhǔn)一點(diǎn)點(diǎn)。結(jié)果也更讓人可以接受。
實(shí)驗(yàn)效果:
Means方法使用近似一維Means方法尋找二值化閾值,該方法的大致步驟如下:
1.一個(gè)初始化閾值T,可以自己設(shè)置或者根據(jù)隨機(jī)方法生成。
2.根據(jù)閾值圖每個(gè)像素?cái)?shù)據(jù)P(n,m)分為對(duì)象像素?cái)?shù)據(jù)G1與背景像素?cái)?shù)據(jù)G2。(n為行,m為列)
3.G1的平均值是m1, G2的平均值是m2
4.一個(gè)新的閾值T’ = (m1 + m2)/2
5.回到第二步,用新的閾值繼續(xù)分像素?cái)?shù)據(jù)為對(duì)象與北京像素?cái)?shù)據(jù),繼續(xù)2~4步,直到計(jì)算出來(lái)的新閾值等于上一次閾值。
實(shí)驗(yàn)效果:
OpenCVOpenCV中有兩個(gè)函數(shù)可以實(shí)現(xiàn)圖片的二值化:
(1)cvThreshold( dst, dst,230 , 255, CV_THRESH_BINARY_INV);
(2)cvAdaptiveThreshold( dst, dst, 255, CV_ADAPTIVE_THRESH_MEAN_C,CV_THRESH_BINARY, 9, -10);
方法(1)是手動(dòng)指定一個(gè)閾值,以此閾值來(lái)進(jìn)行二值化處理。其中的第四個(gè)參數(shù)決定了該方法的結(jié)果:
threshold_type=CV_THRESH_BINARY:
dst(x,y) = max_value, if src(x,y)>threshold 0, otherwise.
threshold_type=CV_THRESH_BINARY_INV:
dst(x,y) = 0, if src(x,y)>threshold; dst(x,y) = max_value, otherwise.
threshold_type=CV_THRESH_TRUNC:
dst(x,y) = threshold, if src(x,y)>threshold; dst(x,y) = src(x,y), otherwise.
threshold_type=CV_THRESH_TOZERO:
dst(x,y) = src(x,y), if (x,y)>threshold ; dst(x,y) = 0, otherwise.
threshold_type=CV_THRESH_TOZERO_INV:
dst(x,y) = 0, if src(x,y)>threshold ; dst(x,y) = src(x,y), otherwise.
值得一說(shuō)的是threshold_type可以使用CV_THRESH_OTSU類(lèi)型,這樣該函數(shù)就會(huì)使用大律法OTSU得到的全局自適應(yīng)閾值來(lái)進(jìn)行二值化圖片,而參數(shù)中的threshold不再起 作用。比如:cvThreshold( dst, dst,300 , 255, CV_THRESH_OTSU | CV_THRESH_BINARY_INV);這種方法對(duì)于灰度直方圖呈現(xiàn)二峰特征的圖片處理起來(lái)效果很好。
方法(2)是一個(gè)自適應(yīng)閾值二值化方法,通過(guò)設(shè)定最后兩個(gè)參數(shù)來(lái)調(diào)整效果.