算子var_threshold
算子var_threshold
名称
var_threshold
— 通过局部均值和标准差分析对图像进行阈值处理。
签名
var_threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark : )
描述
使用 var_threshold
算子,可以选择输入图像 Image
中满足以下条件的像素:
具有较高的局部标准差(当
StdDevScale
为正值时),或者具有较低的局部标准差(当StdDevScale
为负值时)。根据
LightDark
参数,在局部区域内为亮像素或暗像素。
因此,该算子能够在不均匀、有噪声或光照不均匀的背景下分割出目标区域。
输入参数提示
MaskWidth
,MaskHeight
:由
MaskWidth
和MaskHeight
定义的滤波模板大小决定了要分割对象的最大尺寸。然而,如果模板选择得过大,彼此非常接近的对象可能会被合并。(1)原始图像;目标是对垂直线条进行计数。(2)
MaskWidth
设为 12,MaskHeight
设为 12,StdDevScale
设为 0.1,所有垂直线条都被正确分割。(3)如果模板尺寸选择得过小(设为 3),则无法正确选择所需区域。(4)如果模板尺寸过大(设为 40),彼此非常接近的对象可能会被合并。如果
MaskWidth
或MaskHeight
为偶数,则会使用下一个更大的奇数。总体而言,3 可以被认为是最小的合理值。
StdDevScale
:局部标准差用于衡量图像中的噪声。可以通过
StdDevScale
对其进行缩放,以反映所需的灵敏度。值越高,意味着只选择与周围像素差异非常大的像素。对于参数
StdDevScale
,取值在 -1.0 到 1.0 之间是比较合理的选择,建议值为 0.2。如果该参数设置得过高或过低,可能会返回空区域或全区域。(1)如果
StdDevScale
设置得过高(设为 1.3),算子会变得“挑剔”,只选择与周围像素非常相似的像素。(2)如果StdDevScale
设置得过低(设为 -0.3),会错误地选择过多与周围像素有些相似的像素。
AbsThreshold
:在图像的均匀区域中,标准差较低,因此单个灰度值的影响较大。为了降低算子在均匀区域的灵敏度,可以调整
AbsThreshold
参数。这样,就可以忽略均匀背景中较小的灰度值变化。需要注意的是,当StdDevScale
为负值时,AbsThreshold
也应选择负值。
LightDark
:'light'
或'dark'
分别返回比其周围像素更亮或更暗的所有像素。'equal'
返回未被上述两种选项选中的所有像素,即与周围像素相对相等的像素。'not_equal'
返回'light'
和'dark'
的组合结果,即所有与周围像素不同的像素。
计算过程
(1)初始图像。(2)经过阈值处理后的图像(
StdDevScale
设为 0.6,MaskWidth
设为 15,MaskHeight
设为 15,AbsThreshold
设为 10)。以下图像以示例方式展示了沿蓝色箭头方向的结果是如何得到的。var_threshold
算子从输入图像Image
中选择满足阈值条件的区域Region
。阈值是根据每个像素 (x, y) 周围大小为MaskWidth
xMaskHeight
的局部模板内的平均灰度值和标准差计算得出的。
设:
g(x,y)
为输入图像Image
中位置 (x, y) 处的灰度值。m(x,y)
为相应的平均灰度值。d(x,y)
为该像素周围模板内的相应标准差。
即这些像素周围模板内的原始灰度值、相应的平均灰度值和相应的标准差。
那么,可变阈值 v(x,y)
定义如下
v(x,y) = max(StdDevScale * d(x,y), AbsThreshold) \;\ for \;\ StdDevScale \geqslant 0
$$
or
v(x,y) = min( StdDevScale * d(x,y), AbsThreshold) \;\; for \;\; StdDevScale \leqslant 0
$$
解释:当
StdDevScale
为正值时,会分析每个像素。确定用户定义的AbsThreshold
和缩放后的标准差哪个更大,选择较大的值作为可变阈值v(x,y)
。当StdDevScale
为负值时,则选择相应的较小值。
可以使用 StdDevScale
对标准差进行缩放。
可变阈值是根据缩放后的标准差和 AbsThreshold
来选择的。
根据可变阈值选择哪些像素由参数 LightDark
决定:
'light'
:$$
g(x,y) \ge m(x,y)+v(x,y)
$$解释:如果某个像素比其周围像素亮
v(x,y)
个灰度值,则该像素被选中。
'dark'
:$$
g(x,y) \le m(x,y)-v(x,y)
$$解释:如果某个像素比其周围像素暗
v(x,y)
个灰度值,则该像素被选中。
LightDark = 'equal'
:$$
m(x,y)-v(x,y)\le g(x,y)\le m(x,y)+v(x,y)
$$解释:精确选择那些未被
'light'
和'dark'
选中的像素,即与周围像素相对相等的像素。
'not_equal'
:$$
m(x,y)-v(x,y)\ge g(x,y) \; \or \: g(x,y) \ge m(x,y)+v(x,y)
$$解释:选择
'light'
和'dark'
两种情况下的所有像素,即所有与周围像素相差v(x,y)
个灰度值的像素。
'light'
和 'dark'
是根据相应的平均灰度值和可变阈值计算得出的。
例如,如果选择了 “暗(dark)” 选项,那么所有 “暗曲线” 高于 “灰度值曲线” 的像素都会被选中
注意事项
请注意,如果使用具有缩小定义域的图像作为输入,滤波算子可能会返回意外结果。请参考“滤波器”章节。
参数
Image
(输入对象) 单通道图像(数组) → 对象(byte
/int2
/int4
/uint2
/real
)输入图像。
Region
(输出对象) 区域(数组) → 对象分割后的区域。
MaskWidth
(输入控制) 范围.x → (整数)用于计算均值和标准差的模板宽度。
默认值:15
建议值:9, 11, 13, 15
限制条件:
MaskWidth >= 1
MaskHeight
(输入控制) 范围.y → (整数)用于计算均值和标准差的模板高度。
默认值:15
建议值:9, 11, 13, 15
限制条件:
MaskHeight >= 1
StdDevScale
(输入控制) 数值 → (实数 / 整数)灰度值标准差的缩放因子。
默认值:0.2
建议值:-0.2, -0.1, 0.1, 0.2
AbsThreshold
(输入控制) 数值 → (实数 / 整数)与均值的最小灰度值差异。
默认值:2
建议值:-2, -1, 0, 1, 2
LightDark
(输入控制) 字符串 → (字符串)阈值类型。
默认值:
'dark'
取值列表:
'dark'
,'equal'
,'light'
,'not_equal'
复杂度
设 A 为输入区域的面积,则运行时间为 O(A)。
结果
如果所有参数正确,var_threshold
算子返回 2 (H_MSG_TRUE
)。可以通过 set_system
函数设置标志 'no_object_result'
、'empty_region_result'
和 'store_empty_region'
的值来确定对输入图像和输出区域的处理方式。必要时会抛出异常。
替代算子
dyn_threshold
,threshold
参考文献
W.Niblack,《数字图像处理导论》,第 115 - 116 页,新泽西州恩格尔伍德克利夫斯,普伦蒂斯·霍尔出版社,1986 年
模块
基础模块
HDevelop 例程
var_threshold.hdev
:使用根据局部均值和标准差计算得到的局部阈值对图像进行分割。label_word_process_mlp.hdev
:使用基于多层感知器(MLP)的 OCR 分类器和词典读取保质期标签,以提高识别结果。check_smd_tilt.hdev
:检查表面贴装器件(SMD)是否倾斜。check_blister.hdev
:检查自动填充的泡罩包装的内容物。
算子var_threshold的更多相关文章
- Halcon阈值化算子dual_threshold和var_threshold的理解
Halcon中阈值二值化的算子众多,通常用得最多的有threshold.binary_threshold.dyn_threshold等. threshold是最简单的阈值分割算子,理解最为简单:bin ...
- HALCON中的算子大全(中英对照)
HALCON中的算子大全(中英对照) Chapter 1 :Classification1.1 Gaussian-Mixture-Models1.add_sample_class_gmm功能:把一个训 ...
- HALCON学习之算子大全
1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样本添加到一个高斯混合模型的训练数据上. 2.classify_class_gmm ...
- halcon 算子功能查找大全中文版(可直接下载)
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11543364.html haicon算子中文查找大全百度云链接 链接:https://pan. ...
- Halcon斑点分析涉及算子及其高阶运用
涉及算子 获取图像 使用ROI 对齐ROI或图像 校正图像 基础内容这里不再重述 预处理图像(过滤) 基础: mean_image(平均平滑过滤),gauss_filter(高斯滤波),binomia ...
- (八)map,filter,flatMap算子-Java&Python版Spark
map,filter,flatMap算子 视频教程: 1.优酷 2.YouTube 1.map map是将源JavaRDD的一个一个元素的传入call方法,并经过算法后一个一个的返回从而生成一个新的J ...
- opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较
opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较 参考: http://wenku.baidu.com/link?url=1aDYAJBCrrK-uk2w3sSNai7h52x_ ...
- 特征描述算子-sift
特征描述算子-sift http://boche.github.io/download/sift/Introduction%20to%20SIFT.pdf
- EasyPR--开发详解(3)高斯模糊、灰度化和Sobel算子
在上篇文章中我们了解了PlateLocate的过程中的所有步骤.在本篇文章中我们对前3个步骤,分别是高斯模糊.灰度化和Sobel算子进行分析. 一.高斯模糊 1.目标 对图像去噪,为边缘检测算法做准备 ...
- Spark算子选择策略
摘要 1.使用reduceByKey/aggregateByKey替代groupByKey 2.使用mapPartitions替代普通map 3.使用foreachPartitions替代forea ...
随机推荐
- 理解 ASP.NET Core:Cookie 认证
理解 ASP.NET Core:Cookie 认证 ASP.NET Core 内置提供了基于 Cookie 的认证支持.在使用 Cookie 验证的时候,相关的三要素: 认证模式名称:CookieAu ...
- 【C#】【平时作业】习题-2-数据类型运算符表达式
目录 1.请设计程序,验证算数运算符和赋值运算符. Int a,b,c C=a+b += privatevoid button1_Click(object sender, EventArgse) { ...
- 【电脑问题】开机自动进入BIOS,按下Ctrl+ALt+Del键可以正常进入系统
问题描述:开机自动进入BIOS,按下Ctrl+ALt+Del键可以正常进入系统 Ctrl+Alt+Del 作用:立即终结电脑的异常状态,包括宕机 按法①:三个键一起按 按法 ②:先按住Ctrl和Alt ...
- 用SQL命令查看Mysql数据库大小 统计数据库空间占用
-- 1. 进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; -- 2. 查询所有数据的大小: select concat( ...
- MyBatisPlus中updateById与updateAllColumnById方法区别
实现 updateById方法在插入时,会根据实体类的每个属性进行非空判断,只有非空的属性所对应的字段才会出现在SQL语句中. updateAllColumnById方法在插入时,不管属性是否为空,属 ...
- Windows 记录开机后应用启动慢的问题
最近大屏产品经常报一些开机启动的问题,工厂反馈厂测软件有些模块测试不通过,家里开发测试均发现Launcher等软件首次启动需要加载10多秒. 经过小伙伴们排查,发现是刷母盘后首次开机问题概率比较大.使 ...
- Gitlab 实现仓库完全迁移
方法一:最快 gitlab用url导入注意事项看图 方法二 首先需要在新的服务服务器上新建一个项目 然后用 Git Bash 执行以下命令 git clone --mirror 项目原代码仓库地址 / ...
- Qt通用方法及类库10
函数名 //获取保存的文件 static QString getSaveName(const QString &filter, QString defaultDir = QCoreApplic ...
- linux:计划任务
at 计划执行一次性任务 at + time 表示方法: atq -c:查看目前等待执行的任务 atrm 任务编号 :删除at任务 [root账户才能删除,其他用户只能查询] crontab ...
- 从零开始构建一个gradle工程
gradle init --type java-application 首先,确保您已经安装了Java和Gradle.您可以从官方网站下载并按照说明进行安装. 创建一个新的项目文件夹,并进入该文件夹. ...