對於各種圖形進行處理操作的過程中,我們常常需要對影象中的畫素做出取捨與決策,直接剔除一些低於或者是高於一定值得畫素。
閾值可以視為最簡單的影象的分割方法。比如從一幅影象中利用閾值分割出我們需要的物體部分(當然這裡的物體可以是一部分或者是整體)。這樣的影象分割方法基於影象中物體與背景之間的灰度差異,而且此分割屬於畫素的分割。為了從一幅影象中提取出我們需要的部分,應該用影象中的一個畫素點的灰度值與選取的閾值進行比較,並作出相應的判斷。
閾值化主要5種型別
普通灰度圖(圖中的藍色水平線代表著具體的一個閾值)
二進位制閾值化(圖中的藍色水平線代表著具體的一個閾值)
解釋:在運用該閾值型別的時候,先要選定一個特定的閾值量,比如:125,這樣,新的閾值產生規則可以解釋為大於125的畫素點的灰度值設定為最大值(如8位灰度值最大為255),灰度值小於125的畫素點的灰度值設定為0。
反二進位制閾值化
解釋:該閾值化與二進位制閾值化相似,先選定一個特定的灰度值作為閾值,不過最後的設定值相反。(在8位灰度圖中,例如大於閾值的設定為0,而小於該閾值的設定為255)。
截斷閾值化
解釋:同樣首先需要選定一個閾值,影象中大於該閾值的畫素點被設定為該閾值,小於該閾值的保持不變。(例如:閾值選取為125,那小於125的閾值不改變,大於125的灰度值(230)的畫素點就設定為該閾值)。
閾值化為0
解釋:先選定一個閾值,然後對影象做如下處理:1 畫素點的灰度值大於該閾值的不進行任何改變;2 畫素點的灰度值小於該閾值的,其灰度值全部變為0。
反閾值化為0
解釋:原理類似於0閾值,但是在對影象做處理的時候相反,即:畫素點的灰度值小於該閾值的不進行任何改變,而大於該閾值的部分,其灰度值全部變為0。
函式說明
固定閾值操作:threshold
使用threshold函式完成
double threshold(InputArray src,// 輸入的灰度影象
OutputArray dst,// 輸出處理影象
double thresh,// 閾值大小
double maxval,// 設定的最大灰度值(該引數運用在二進位制與反二進位制閾值操作中)
int type );// 閾值的型別(上面介紹的五中型別)
上述識別符號以次取值為0,1,2,3,4。
程式碼示例:
NSString*image =@"456.png";
UIImage*image1 = [UIImageimageNamed:image];
Matim;
UIImageToMat(image1, im);
if(im.empty()) {
return;
}
threshold(im,dst,125,125,CV_THRESH_BINARY);
self.secondImageView.image=MatToUIImage(dst);
自適應閾值操作函式:
void adaptiveThreshold( InputArray src,
OutputArray dst,
double maxValue,
int adaptiveMethod,
int thresholdType,
int blockSize,
double C );
參考資料