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,則被合并到一起。