對(duì)于各種圖形進(jìn)行處理操作的過(guò)程中参歹,我們常常需要對(duì)圖像中的像素做出取舍與決策仰楚,直接剔除一些低于或者是高于一定值得像素。
閾值可以視為最簡(jiǎn)單的圖像的分割方法犬庇。比如從一幅圖像中利用閾值分割出我們需要的物體部分(當(dāng)然這里的物體可以是一部分或者是整體)僧界。這樣的圖像分割方法基于圖像中物體與背景之間的灰度差異,而且此分割屬于像素的分割械筛。為了從一幅圖像中提取出我們需要的部分捎泻,應(yīng)該用圖像中的一個(gè)像素點(diǎn)的灰度值與選取的閾值進(jìn)行比較,并作出相應(yīng)的判斷埋哟。
閾值化主要5種類(lèi)型
普通灰度圖(圖中的藍(lán)色水平線(xiàn)代表著具體的一個(gè)閾值)
二進(jìn)制閾值化(圖中的藍(lán)色水平線(xiàn)代表著具體的一個(gè)閾值)
解釋?zhuān)涸谶\(yùn)用該閾值類(lèi)型的時(shí)候笆豁,先要選定一個(gè)特定的閾值量,比如:125赤赊,這樣,新的閾值產(chǎn)生規(guī)則可以解釋為大于125的像素點(diǎn)的灰度值設(shè)定為最大值(如8位灰度值最大為255)抛计,灰度值小于125的像素點(diǎn)的灰度值設(shè)定為0。
反二進(jìn)制閾值化
解釋?zhuān)涸撻撝祷c二進(jìn)制閾值化相似瘦陈,先選定一個(gè)特定的灰度值作為閾值,不過(guò)最后的設(shè)定值相反蛾默。(在8位灰度圖中捉貌,例如大于閾值的設(shè)定為0,而小于該閾值的設(shè)定為255)牧挣。
截?cái)嚅撝祷?/b>
解釋?zhuān)和瑯邮紫刃枰x定一個(gè)閾值瀑构,圖像中大于該閾值的像素點(diǎn)被設(shè)定為該閾值统求,小于該閾值的保持不變。(例如:閾值選取為125,那小于125的閾值不改變另假,大于125的灰度值(230)的像素點(diǎn)就設(shè)定為該閾值)。
閾值化為0
解釋?zhuān)合冗x定一個(gè)閾值己莺,然后對(duì)圖像做如下處理:1 像素點(diǎn)的灰度值大于該閾值的不進(jìn)行任何改變凌受;2 像素點(diǎn)的灰度值小于該閾值的思杯,其灰度值全部變?yōu)?。
反閾值化為0
解釋?zhuān)涸眍?lèi)似于0閾值誊册,但是在對(duì)圖像做處理的時(shí)候相反案怯,即:像素點(diǎn)的灰度值小于該閾值的不進(jìn)行任何改變澎办,而大于該閾值的部分金砍,其灰度值全部變?yōu)?恕稠。
函數(shù)說(shuō)明
固定閾值操作:threshold
使用threshold函數(shù)完成
double threshold(InputArray src,// 輸入的灰度圖像
? ? ? ? ? ? ? ? ? ? ? ? ? ? OutputArray dst,// 輸出處理圖像
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?double thresh,// 閾值大小
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?double maxval,// 設(shè)定的最大灰度值(該參數(shù)運(yùn)用在二進(jìn)制與反二進(jìn)制閾值操作中)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int type );// 閾值的類(lèi)型(上面介紹的五中類(lèi)型)
上述標(biāo)識(shí)符以次取值為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);
自適應(yīng)閾值操作函數(shù):
void adaptiveThreshold( InputArray src,?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OutputArray dst,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? double maxValue,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int adaptiveMethod,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int thresholdType,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int blockSize,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? double C );
參考資料