天天看點

Halcon門檻值分割方法簡析

1. 基于直方圖的自動門檻值分割

1.1 關鍵算子

auto_threshold(Image : Regions : Sigma : ):使用多門檻值分割單通道圖像。

首先,計算圖像的灰階直方圖。

然後,使用标準差為Sigma的一維高斯濾波器對直方圖進行濾波。

進而,從直方圖中提取相關灰階極小值,依次作為門檻值操作的參數。每個灰階值區間生成一個區域。是以,區域的數目就是極小值數加一。

binary_threshold(Image : Region : Method, LightDark : UsedThreshold)

全局自動門檻值分割,對灰階直方圖存在兩個波峰按照不同的方法進行分割。

1: 計算圖像的灰階直方圖。

2:使用max_separability方法(最大限度可分OTSU),适用于直方圖存在兩個波峰的情況,即圖像前景背景的有明顯差別。方法是利用統計矩找到将像素分割為前景和背景的最優門檻值,并最大化這兩個類之間的可分性。此方法僅适用于byte和uint2圖像。

3:smooth_histo方法(直方圖平滑),直方圖提取最小值,作為門檻值操作的參數。為了減少最小值,直方圖用高斯函數平滑處理。在平滑直方圖中,掩模尺寸增大,直到找到最小值。然後,門檻值設定為這個最小值的位置。

LightDark:表示提取的是黑色部分還是白色部分。

threshold(Image : Region : MinGray, MaxGray : )

根據圖像的灰階确定門檻值進行分割。用于物體與背景存在明顯灰階差的圖像。

fast_threshold(Image : Region : MinGray, MaxGray, MinSize : )

快速全局門檻值分割。灰階值滿足MinGray<=g<=MaxGray則分割為一個區域,為了節省時間按兩步執行。

第一,先處理行列間隔Minsize的所有像素點。

第二,處理上一步選擇點的領域。

2.局部自動門檻值分割

2.1 關鍵算子

dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )

實際項目中由于圖像背景不一緻,目标經常表現為比背景局部亮一些或暗一些,無法通過全局門檻值操作進行分割,這時需要通過求原像素值與濾波後像素值的差找到一個局部門檻值進行分割。

其方法為:

1:将OrigImage進行濾波平滑處理,得到ThresholdImage 。

2:用OrigImage和ThresholdImage 逐像素進行比較,根據參數Offset(鄰域比較的區間範圍)和LightDark分割出相關區域。

當選擇light時,就篩選出相對參考圖更亮的區域,dark相反。選equal時,選取和參考圖差不多的區域。

var_threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark : )

該算子為基于圖像均值和标準偏差的局部門檻值分割,能夠較好的分開目标和背景。

MaskWidth、 MaskHeight:掩膜單元;

StdDevScale:标準差乘數因子;

AbsThreshold:絕對門檻值;

LightDark:表示希望分割的灰階值亮弱。

具體方法:用掩膜區域周遊整幅圖像,與原始圖像的區域灰階值進行對比,當原圖灰階比掩膜區域的灰階均值低(0.2,12)個灰階時,即可分割出該區域。

1、當标準差因子StdDevscale>=0時, v(x.y)取(StdDevscale标準差)和AbsThreshold中較大的那個 ;

2、當标準差因子StdDevScale<= 0時, v(xy)取(StdDevscale标準差)和AbsThreshold中較小的那個。

watersheds_threshold(Image : Basins : Threshold : )

分水嶺算法。

1:通過分水嶺算法watersheds()擷取圖像的盆地。

2:若盆地部分的灰階小于設定的門檻值Threshold,則被合并到一起。

繼續閱讀