halcon学习之阈值分割(threshold、binary_threshold、dyn_threshold、var_threshold、auto_threshold、fast_threshold、)


1. threshold(Image : Region : MinGray, MaxGray : )

全局阈值分割,适用于环境稳定,目标与背景存在明显的灰度差的场合。

应用1:利用灰度直方图确定阈值进行图像分割。一般是物体与背景之间存在一个明显的灰度差,直方图会存在两个波峰一个是目标一个是背景,那么阈值就是物体与背景之间的最小值。

       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)

       *期望阈值

       TarGetGray:=23

       for Index := |MinThresh|-1 to 0 by -1

            if(MinThresh[Index]<=TarGetGray)

                 MinThresh:= MinThresh[Index]

           break

           endif

        endfor

        for Index1 := 0 to |MaxThresh|-1 by 1

             if (MaxThresh[Index1]>=TarGetGray)

                      MaxThresh:=MaxThresh[Index1]

            break

             endif

     endfor

        *全局阈值分割

      threshold (Image, Region1, MinThresh, MaxThresh)

 

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

 

自动全局阈值分割,主要对灰度直方图存在两个波峰图像的自动阈值分割。提供两种方法“max_separability”和“smooth_histo”。

最大限度的可分性(max_separability):根据“灰度直方图的阈值选择方法”的灰度直方图自动阈值调用。该算法首先计算图像的直方图,然后利用统计矩找到将像素分割为前景和背景的最优阈值,并最大化这两个类之间的可分性。此方法仅适用于byte和uint2图像。

直方图平滑(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 : )

根据直方图确定阈值自动全局阈值分割,运行原理,第一,计算灰度直方图。第二,高斯平滑后从直方图提取最小值。第三,根据提取的最小值进行阈值分割。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聚合为一个区域,为了节省时间按两步执行。第一,先处理行列间隔Minsize的所有像素点。第二,处理上一步选择点的领域。和threshold相比分割速度快。

7. watersheds(Image : Basins, Watersheds : : )

分水岭图像分割。可以分割出分水岭和盆地。

       read_image (Br2, 'particle')

       gauss_filter (Br2, ImageGauss, 9)

       invert_image (ImageGauss, ImageInvert)

       watersheds (ImageInvert, Basins, Watersheds)

       dev_set_draw ('margin')

       dev_set_colored (12)

       dev_display (Br2)

       dev_display (Basins)

8. watersheds_threshold(Image : Basins : Threshold : )

使用阈值分水岭图像分割,可以提取分水岭盆地。
 

<think>首先,用户的问题是关于Halconbinary_threshold算子的使用指南或示例。我需要基于系统指令和用户可见层的要求来构建回答。 系统指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 - 参考站内引用:引用[1]和引用[2]是关于图像处理的内容,但与binary_threshold相关,我需要合理引用。 用户的问题:"我想查找Halconbinary_threshold算子的使用方法或相关示例 请问Halcon binary_threshold 算子使用指南 示例" 我需要提供关于Halcon binary_threshold算子的使用指南和示例。 首先,回忆binary_threshold算子:在Halcon中,binary_threshold用于二值化图像,基于直方图分析自动选择阈值。它类似于OTSU方法。 关键点: - 功能:自动阈值分割,将灰度图像转换为二值图像。 - 语法:binary_threshold(Image : Region : Method, LightDark : ) - Image: 输入图像 - Region: 输出区域 - Method: 分割方法,如'max_separability'(类似OTSU) - LightDark: 提取目标类型,如'light'(亮目标)或'dark'(暗目标) 参考提供的引用: - 引用[1]: 提到OpenCVSharp中实现类似Halcon的bin_threshold使用Cv2.Threshold。这暗示bin_threshold是二值化操作。 - 引用[2]: 关于dyn_threshold,动态阈值分割。但用户问的是binary_threshold,不是dyn_threshold。我需要确保专注于binary_threshold。 在Halcon中,binary_threshold是自动阈值分割,而dyn_threshold是动态阈值分割。两者不同。 我的回答结构: 1. **介绍binary_threshold算子**:简要说明其功能和用途。 2. **语法解释**:详细参数。 3. **使用指南**:步骤说明如何使用。 4. **示例代码**:提供Halcon HDevelop的示例代码。 5. **注意事项**:如参数选择等。 6. **生成相关问题**:在末尾添加相关问题。 由于指令要求生成相关问题,我需要像示例那样在末尾添加§§相关问题§§。 引用:在回答中,如果引用内容,末尾添加引用标识。引用[1]和[2]提供了一些背景,但可能不直接相关。我可以引用它们来对比或补充。 例如: - 引用[1]提到二值化操作常见于图像预处理,我可以引用。 - 引用[2]是关于dyn_threshold,我可以提及它与binary_threshold的区别。 确保回答真实可靠:基于Halcon文档知识。binary_threshold的Method通常包括'max_separability',基于OTSU方法。 数学表达式:如果有数学,如OTSU方法涉及方差,但用户可能不需要深入数学。如果需要,使用$...$格式。 例如,OTSU方法最大化类间方差:设$ \sigma_b^2 $ 是类间方差,目标是最大化它。 但在回答中,可能不需要详细数学,除非必要。 使用中文回答。 大纲: 1. 开头:直接回答用户问题。 2. 详细解释: - 功能描述 - 参数说明 - 使用步骤 3. 示例代码 4. 注意事项 5. 相关问题 生成相关问题:类似示例,如: - binary_threshold与其他阈值方法的区别? - 如何优化binary_threshold的性能? - 在实际应用中的案例? 引用标识:在相关段落末尾添加[^1]或[^2]。例如,提到二值化常见于预处理时引用[1]。 最终回答结构: - 主体回答 - 代码块(如果有) - §§相关问题§§</think>### Halcon binary_threshold 算子使用指南与示例 Halcon 的 `binary_threshold` 算子是一种基于直方图分析的自动阈值分割方法,常用于将灰度图像转换为二值图像(即前景和背景分离)。它通过分析图像直方图自动选择最优阈值,特别适用于光照均匀的场景。本指南将逐步解释其使用方法,并提供示例代码,帮助您快速上手[^1]。 --- ### 1. **算子功能与语法** - **功能**:`binary_threshold` 自动计算阈值并对图像进行二值化分割,输出为区域(Region)对象。它基于类间方差最大化(类似 OTSU 方法),能有效处理目标与背景对比度明显的图像。 - 数学原理:设图像灰度直方图为 $h(g)$,目标是通过最大化类间方差 $\sigma_b^2$ 来选择阈值 $T$: $$ \sigma_b^2 = \omega_0(\mu_0 - \mu_T)^2 + \omega_1(\mu_1 - \mu_T)^2 $$ 其中 $\omega_0$、$\omega_1$ 为两类像素比例,$\mu_0$、$\mu_1$ 为均值,$\mu_T$ 为总均值。 - **语法**: ```python binary_threshold(Image, Region, Method, LightDark) ``` - **参数说明**: - `Image`:输入灰度图像(单通道)。 - `Region`:输出分割后的二值区域。 - `Method`:分割方法,常用 `'max_separability'`(基于 OTSU 算法),其他选项如 `'smooth_histo'`(平滑直方图后分割)。 - `LightDark`:目标提取类型: - `'light'`:提取亮目标(灰度值高于阈值)。 - `'dark'`:提取暗目标(灰度值低于阈值)。 - `'equal'` 或 `'not_equal'`:较少使用。 --- ### 2. **使用步骤** 1. **图像预处理**:确保输入为单通道灰度图像。可使用 `rgb1_to_gray` 转换彩色图像。 2. **选择参数**: - `Method`:推荐 `'max_separability'`,适用于大多数场景。 - `LightDark`:根据目标特性选择(例如,白纸黑字用 `'dark'`,黑底白字用 `'light'`)。 3. **调用算子**:执行分割,获取二值区域。 4. **后处理**:对输出区域进行形态学操作(如 `closing_circle`)以优化结果。 注意事项: - **适用场景**:光照均匀、目标与背景对比度高时效果最佳。若光照不均(如阴影),建议改用动态阈值算子如 `dyn_threshold`[^2]。 - **性能**:计算复杂度低,适合实时处理,但噪声敏感,需结合滤波预处理。 --- ### 3. **示例代码** 以下是在 Halcon HDevelop 环境中的完整示例,演示如何对一张包含印刷文字的灰度图像进行二值化分割: ```python * 读取图像(假设为灰度图) read_image(Image, 'document.png') * 可选:转换为灰度(若输入为彩色) * rgb1_to_gray(Image, GrayImage) * 使用 binary_threshold 分割(提取暗色文字) binary_threshold(Image, TextRegion, 'max_separability', 'dark') * 后处理:去除小噪声 opening_circle(TextRegion, CleanRegion, 1.5) * 显示结果 dev_display(CleanRegion) ``` - **代码解释**: - 输入图像 `'document.png'` 假设为白底黑字的文档。 - `Method='max_separability'` 自动计算最优阈值。 - `LightDark='dark'` 指定提取暗色目标(即文字)。 - `opening_circle` 用于去除小噪点,提升分割质量。 - **预期输出**:二值区域 `CleanRegion` 仅包含文字部分,背景被剔除。 --- ### 4. **常见问题与优化建议** - **阈值不准确**:若图像直方图双峰不明显(如低对比度),可尝试: - 预处理:使用 `emphasize` 增强对比度。 - 替代方法:改用 `dyn_threshold` 处理光照不均图像[^2]。 - **性能优化**:对大图像,先缩放或使用 `reduce_domain` 限定 ROI。 - **与固定阈值对比**:`binary_threshold` 自动选阈值,优于手动设置 `threshold` 算子,但灵活性较低。 该算子在文档扫描、OCR 预处理和工业检测中广泛应用,能高效分割目标区域[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值