本章描述阈值算子。
对图像进行分割的一种方法是使用阈值算子。通过这种方式,可以在图像中确定满足特定阈值条件的区域,该条件取决于灰度值。
为适应不同任务和图像特性,提供了一组阈值算子。
下文将通过区分基于直方图和局部的方法来概述这些算子,并重点探讨其中最重要的几种。
基于直方图的阈值分割仅考虑像素值而非位置信息。因此阈值是通过调整图像直方图来确定的。
通过使用 ,您可以选取用户设定的灰度值区间内的所有像素。
threshold
| ( 1) | ( 2) | ( 3) |
MinGray 和 MaxGray 处理后的输入图像直方图,(3) 输入图像的最终分割结果。
算子 同样采用两个手动设定的阈值,但使用了另一种计算算法。
fast_threshold
为将图像划分为明暗区域,
会自动计算阈值以分离前景与背景。
binary_threshold
| ( 1) | ( 2) | ( 3) |
使用 分割法同样将图像划分为前景与背景,但能以亚像素精度输出分离边界。阈值需手动设定。
threshold_sub_pix
通过计算图像直方图中的局部极小值来确定阈值。通过平滑直方图,您可以影响输入图像中检测到的类别数量。
auto_threshold
| ( 1) | ( 2) | ( 3) | ( 4) |
| ( 1) | ( 2) | ( 3) |
使用 获取直方图中局部极小值的灰度值。
histo_to_thresh
要对浅色背景上的深色文本进行分割,
是一个有用的工具。直方图中的最大峰值对应浅色背景。假设文本比背景更暗,则需检查平滑直方图中最大峰值左侧的部分。参数
char_threshold 决定阈值设置在最大峰值多远的位置,同时考虑灰度值的频率分布。
Percent
| ( 1) | ( 2) |
| ( 3) | ( 4) |
Percent 百分比决定最大值左侧的阈值,(4) 生成图像。
从一张图像中减去另一张图像,或使用 等边缘检测算子,通常会在结果图像中产生负值。算子 laplace_of_gauss 既适用于带符号图像的分割,又能同时考虑最小区域尺寸。
dual_threshold
Threshold (内部边界)和 MinGray 的有符号图像直方图。仅当像素满足灰度值和区域大小条件时才会被选中。
| ( 1) | ( 2) |
sub_image 创建),(2) 应用双阈值后的结果。
与基于直方图的阈值算子不同,局部阈值还会考虑像素的位置或邻域关系,从而将其分配到相应的区域。相较于对每个像素应用全局阈值,根据图像局部特征调整阈值有时更为有效。
会考虑局部均值和标准差,为每个像素计算独立阈值。邻域大小由用户设定。该算法特别适用于文本分割场景,尤其在光照条件或背景不均匀的情况下效果显著。
local_threshold
| ( 1) | ( 2) |
| ( 3) | ( 4) |
算子 的工作原理与此类似,但它会选择那些满足特定局部标准差和亮度条件的图像点。
var_threshold
使用 可检测图像间的差异。通常将输入图像与其滤波版本(例如图像均值)进行逐像素比较。参数 dyn_threshold 用于确定图像中哪些变化具有相关性。算子的灵敏度由参数 LightDark 控制。
Offset
| ( 1) | ( 2) |
| ( 3) | ( 4) |
Offset 的区域(右)(图像细节),(4) 选取目标区域后的结果。更多细节请参阅示例 surface_scratch.hdev。
类似的算子是 。该算子显示两幅图像之间的绝对差异,特别适用于连续采集图像的变化检测。
check_difference
用于边缘检测的运算符(如 )会返回有符号图像,其中边缘位于零交叉点处。可通过
laplace_of_gauss 和 zero_crossing 提取这些边缘,同时考虑单个像素点的 4 邻域特征。
zero_crossing_sub_pix
| ( 1) | ( 2) |
| ( 3) | ( 4) |
zero_crossing(红色)与
zero_crossing_sub_pix(绿色)所得结果的图像细节。
auto_threshold自动阈值binary_threshold二值阈值char_threshold字符阈值check_difference检查差异dual_threshold双阈值dyn_threshold动态阈值fast_threshold快速阈值histo_to_thresh直方图至阈值local_threshold局部阈值threshold阈值threshold_sub_pix阈值亚像素var_threshold可变阈值zero_crossing零交叉点zero_crossing_sub_pix零交叉点亚像素