圖像分割中的 regiongrowing 與動態閾值算法詳解對比
在使用 HALCON 進行圖像處理時,圖像分割是最常見也最關鍵的操作之一。本文將深入講解 regiongrowing
算子的原理與使用方法,并與另一常見方法——動態閾值 (dyn_threshold
) 進行詳細對比,幫助你根據不同應用場景選擇合適的分割策略。
一、regiongrowing
算子詳解
1. 算子功能
regiongrowing
是基于區域生長的分割方法,能將圖像中灰度值相近的相鄰像素塊合并成一個連通區域,適用于灰度變化平緩、結構清晰的目標提取。
2. 算子格式
regiongrowing(Image : Regions : Row, Column, Tolerance, MinSize)
參數說明:
- Image:輸入的單通道圖像(支持 byte, int1, int2, real 等類型)
- Regions:輸出的區域集合(Region數組)
- Row, Column:指定柵格大小(必須為奇數),控制比較粒度,默認通常為 3
- Tolerance:灰度值差異容差,決定是否合并相鄰塊
- MinSize:過濾小區域的最小像素數閾值
3. 算法原理
- 將圖像劃分為
Row x Column
的小塊; - 比較相鄰塊的中心像素灰度值;
- 若差值小于等于 Tolerance,則合并區域;
- 最后剔除面積小于 MinSize 的區域。
4. 示例代碼
read_image(Image, 'fabrik')
mean_image(Image, Mean, 5, 5)
regiongrowing(Mean, Regions, 5, 5, 6.0, 100)
二、dyn_threshold
算子簡介
1. 功能概述
動態閾值通過比較當前像素與模糊背景圖的灰度差異,實現前景/背景分離,適用于背景不均但結構明顯的目標提取。
2. 算子格式
dyn_threshold(Image, Background, RegionDynThresh, Threshold, 'light')
- Image:原圖
- Background:模糊圖像或局部平均圖像
- RegionDynThresh:輸出的前景區域
- Threshold:差值閾值(像素 - 背景 > 閾值 即為前景)
3. 示例代碼
mean_image(Image, Background, 15, 15)
dyn_threshold(Image, Background, RegionDynThresh, 10, 'light')
三、兩者詳細對比
特性 | regiongrowing | dyn_threshold |
---|---|---|
核心思想 | 從種子點開始區域擴展 | 前景/背景灰度差判斷 |
操作單位 | 塊級別區域合并 | 單像素灰度比較 |
是否考慮連通性 | ? | ? |
是否自動生長 | ? | ? |
是否依賴模糊圖像 | ?(可選預處理) | ?(必須) |
輸出結果 | 多區域(Region數組) | 二值區域(Region) |
使用場景對比
場景 | 更適合 regiongrowing | 更適合 dyn_threshold |
---|---|---|
背景復雜、目標灰度一致 | ? | ? |
背景光照不均勻 | ? | ? |
連通區域提取需求強 | ? | ? |
實時性能要求 | ? | ? |
類比通俗理解
regiongrowing
類似“從一點開始涂色”,相近顏色會不斷擴展;dyn_threshold
更像是“背景圖減原圖”,亮出前景。
四、總結
對比維度 | regiongrowing | dyn_threshold |
---|---|---|
連通區域分割 | ? | ? |
灰度不均背景 | ? | ? |
算法邏輯 | 局部相似性擴張 | 背景減法式閾值 |
應用舉例 | 焊點、顆粒提取 | 字符、污點檢測 |
建議:
- 若需區域結構連通且灰度一致,可選
regiongrowing
- 若背景不均,目標明顯,可用
dyn_threshold