1. 程式人生 > 其它 >halcon——常見閾值分割總結

halcon——常見閾值分割總結

引言

主要講述幾種halcon中經常用到的一些閾值分割運算元。


1,全域性閾值分割

  • threshold(Image : Region : MinGray, MaxGray : )

全域性閾值分割,適用於環境穩定,目標與背景存在明顯的灰度差的場合。(即根據高低雙閾值將影象分為前景和背景)

利用灰度直方圖確定閾值進行影象分割。一般是物體與背景之間存在一個明顯的灰度差,直方圖會存在兩個波峰一個是目標一個是背景,那麼閾值就是物體與背景之間的最小值。

read_image (Image, 'clip')
gray_histo (Image, Image, AbsoluteHisto, RelativeHisto)
gen_region_histo (Region, AbsoluteHisto, 
255, 255, 1) *利用直方圖獲取閾值 histo_to_thresh (AbsoluteHisto,10, MinThresh, MaxThresh) *全域性閾值分割 threshold (Image, Region1, MinThresh, MaxThresh)

2,自動全域性閾值分割

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

自動全域性閾值分割,主要對灰度直方圖存在兩個波峰影象的自動閾值分割。提供兩種方法“max_separability”和“smooth_histo”

  1. 最大限度的可分性(max_separability):根據“灰度直方圖的閾值選擇方法”的灰度直方圖自動閾值呼叫。該演算法首先計算影象的直方圖,然後利用統計矩找到將畫素分割為前景和背景的最優閾值,並最大化這兩個類之間的可分性。此方法僅適用於byte和uint2影象。
  2. 直方圖平滑(smooth_histo):首先確定灰度值的相對直方圖。然後,從直方圖提取相關的最小值,作為閾值操作的引數。為了減少最小值,直方圖被平滑處理為一個高斯函式,就像在auto_threshold中一樣。在平滑直方圖中,掩模尺寸增大,直到得到2個波峰的最小值。然後,閾值設定為這個最小值的位置。
read_image (Image, 'clip')
binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold)

3,區域性閾值分割

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

區域性閾值分割,當前背景之間差異明顯時,可以設定全域性閾值進行threshold,但很多情況下由於背景不均一,目標體經常表現為比背景區域性亮一些或暗一些,無法確定全域性閾值操作(無法通過單個高低閾值對整幅影象分割),需要通過其鄰域找到一個合適的閾值進行分割這時就要用到區域性閾值分割了。

4,均值和標準偏差區域性閾值分割

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

均值和標準偏差區域性閾值分割,能夠較好的分開目標和背景,對不適合的引數設定不敏感。

引數列表:

MaskWidth、 MaskHeight是用於濾波平滑的掩膜尺寸;

StdDevScale是標準差乘數因子(簡稱標準差因子);

AbsThreshold是設定的絕對閾值;

LightDark有4個值可選,’light’、’dark’、’equal’、’not_equal’。

需要強調的是var_threshold運算元和dyn_threshold運算元極為類似。不同的是var_threshold整合度更高,並且加入了“標準差×標準差因子”這一變數。可以有效地減少噪聲對分割的影響。

5,自動全域性閾值分割

  • auto_threshold(Image : Regions : Sigma : )

自動全域性閾值分割(根據直方圖確定閾值),執行原理:

  1. 計算灰度直方圖。
  2. 高斯平滑後從直方圖提取最小值。
  3. 根據提取的最小值進行閾值分割。sigma越大提取區域越少。
read_image (Image, 'fabrik')
median_image (Image, Median, 'circle', 3, 'mirrored')
auto_threshold (Median, Regions, 3)

6,快速全域性閾值分割

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

快速全域性閾值分割,灰度值滿足MinGray<=g<=MaxGra聚合為一個區域,為了節省時間按兩步執行。

  1. 先處理行列間隔Minsize的所有畫素點。
  2. 處理上一步選擇點的領域。和threshold相比分割速度快。

7,分水嶺閾值分割

  • watersheds_threshold(Image : Basins : Threshold : )

分水嶺閾值分割,可以提取分水嶺盆地。其原理:

  1. 通過分水嶺演算法watersheds()獲取影象的盆地。
  2. 根據第一步分水嶺演算法分離結果,若盆地部分的灰度< threshold,則被合併到一起。

總結:

綜上所述,全域性threshold分割和區域性的dyn_threshold分割用的比較多。尤其是圖片光照不均勻,而dyn_threshold選對兩個分割圖,再對結果做些篩選處理,效果會很好。一般用適當尺度的均值濾波圖和原圖,還有用灰度開閉的圖來區域性分割。


轉載於:說說幾個常用的閾值分割運算元 - 機器長眼睛 - 部落格園 (cnblogs.com)