操作符列表
add_samples_image_class_gmm
将图像中的训练样本添加到高斯混合模型的训练数据中。
add_samples_image_class_knn
将图像中的训练样本添加到kNN(最近邻)分类器的训练数据中。
add_samples_image_class_mlp
将图像中的训练样本添加到多层感知器的训练数据中。
add_samples_image_class_svm
将图像中的训练样本添加到支持向量机的训练数据中。
class_2dim_sup
使用二维像素分类分割图像。
class_2dim_unsup
通过聚类分割两个图像。
class_ndim_norm
使用超球体或超立方体对像素进行分类。
classify_image_class_gmm
用高斯混合模型对图像进行分类。
classify_image_class_knn
用kNN分类器对图像进行分类。
classify_image_class_lut
使用查找表对字节图像进行分类。
classify_image_class_mlp
用多层感知器对图像进行分类。
classify_image_class_svm
用支持向量机对图像进行分类。
learn_ndim_norm
为class_ndim_norm构造类。
操作符列表
detect_edge_segments
检测直边段。
hysteresis_threshold
对图像执行迟滞阈值操作。
nonmax_suppression_amp
抑制边缘上的非最大值点。
nonmax_suppression_dir
使用方向图像抑制边缘上的非最大值点。
操作符列表
segment_image_mser
使用最大稳定极值区域(MSER)分割图像。
操作符列表
expand_gray
填充区域之间的空白(取决于灰度值或颜色)或分割重叠区域。
expand_gray_ref
填充区域之间的空白(取决于灰度值或颜色)或分割重叠区域。
regiongrowing
使用区域生长对图像进行分割。
regiongrowing_mean
使用平均灰度值执行区域生长。
regiongrowing_n
对多通道图像使用区域生长来分割图像。
本章描述阈值运算符。
对图像进行分割的一种方法是使用阈值算子。这样,根据灰度值,在图像中确定满足特定阈值条件的区域。
为了适应不同的任务和图像属性,提供了一组阈值运算符。
下面的段落通过区分基于直方图的方法和局部方法来概述这些操作符,并仔细研究其中最重要的操作符。
基于直方图的阈值分割不考虑位置,只考虑像素值。因此,通过调整阈值以适应图像的直方图来确定阈值。
阈值
通过使用Threshold,可以选择用户设置的灰度值间隔内的所有像素。
(1)输入图像,(2)输入图像的直方图,人工确定阈值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获取直方图中局部最小值的灰度值。
字符阈值(Character Threshold)
要在浅色背景上分割深色文本,char_threshold是一个有用的工具。直方图中的最大峰对应于浅色背景。假设文本比背景暗,检查最大值左侧的平滑直方图。考虑到灰度值的频率,参数Percent决定了距离设置的最大阈值有多远。
(1)输入图像,(2)平滑直方图并识别全局最大值,(3)参数Percent确定最大值左阈值,(4)生成图像。
Dual-Threshold
从另一张图像中减去一张图像或使用边缘检测算子(如laplace_of_gauss)通常会导致生成的图像为负值。操作符dual_threshold适合于有符号图像的分割,同时也考虑了最小区域大小。
带有Threshold(内边界)和MinGray的有符号图像直方图。像素只有在满足灰度值和区域大小的条件时才会被选中。
(1)带符合的输入图像(用sub_image创建),(2)应用双阈值后的结果。
与基于直方图的阈值算子不同,局部阈值还考虑到像素的位置或邻域,以将它们分配到适当的区域。与应用于每个像素的全局阈值不同,有时根据图像的局部特征调整阈值会更有用。
局部阈值
local_threshold考虑了局部均值和标准偏差,并为每个像素计算一个单独的阈值。邻域的大小由用户设置。当光照条件或背景不均匀时,该算子特别适用于文本分割。
(1)输入图像;(2)全局阈值分割不单独选择想要的文本;(3)阈值单独适应每个像素的邻域;(4)文本分割。
操作符var_threshold以类似的方式工作,除了它选择图像中满足特定条件的点(关于它们的局部标准偏差和亮度)。
动态阈值
使用dyn_threshold可以检查图像之间的差异。通常输入图像和滤波后的图像,例如图像的均值,是逐像素比较的。参数LightDark用于确定图像中哪些变化是相关的。算子的灵敏度由参数Offset控制。
(1)输入图像,(2)由于光照条件不均匀,无法对划痕进行全局阈值分割,(3)逐像素检测原始图像(左)与图像均值(中)的灰度值差,以分割超出Offset(图像细节)的区域(右),(4)选择想要的区域后的结果。要了解更多细节,请查看示例surface_scratch.hdev。
类似的操作符是check_difference。操作符显示两幅图像之间的绝对差异。特别适合于连续采集图像的变化检测。
过零阈值
像laplace_of_gauss这样用于边缘检测的运算符返回带符号的图像,其中边缘位于零点交叉处。zero_crossing和zero_crossing_sub_pix可以用来提取这些边缘,同时考虑到单个的4邻域。
(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
从亚像素精度的图像中提取零交叉。
操作符列表
critical_points_sub_pix
亚像素精确检测图像中的关键点。
local_max
检测图像中的所有局部最大值。
local_max_sub_pix
亚像素精确检测图像中的局部最大值。
local_min
检测图像中的所有局部最小值。
local_min_sub_pix
亚像素精确检测图像中的局部最小值。
lowlands
检测所有灰度值低地。
lowlands_center
检测所有灰度值低地的中心。
plateaus
检测所有的灰度值平台。
plateaus_center
检测所有灰度值平台的中心。
pouring
通过“倒水”来分割图像。
saddle_points_sub_pix
亚像素精确检测图像中的鞍点。
watersheds
从图像中提取流域和盆地。
watersheds_marker
基于标记提取流域和组合流域。
watersheds_threshold
使用阈值从图像中提取流域盆地。