先看var_threshold算子的签名:
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集成度更高,并且加入了“标准差×标准差因子”这一变量。
举例:
read_image (Image, ‘C:/1.png’) 2 var_threshold (Image, Region, 4, 4, 0.2, 12, ‘dark’)
在该程序中,先用4×4的掩膜在图像上逐像素游走,用原图中的当前像素和对应掩膜中16个像素的灰度均值对比,找出暗(dark)的区域。当原图像素灰度比对应的掩膜灰度均值低(0.2,12)个灰阶时,该区域被分割出来。本程序中StdDevScale = 0.2, AbsThreshold = 12,问题的关键就是理解如何通过StdDevScale和AbsThreshold来确定用于分割的阈值。

var_threshold的帮助文档中是这么写的:
1、d(x,y)指的是遍历每个像素时,掩膜覆盖的那些像素块(本例中是4×4 = 16个像素)灰度的标准差;StdDevScale 是标准差因子。
2、当标准差因子StdDevScale ≥ 0 时,v(x,y) 取(StdDevScale ×标准差)和AbsThreshold 中较大的那个。
3、当标准差因子StdDevScale < 0 时,v(x,y) 取(StdDevScale ×标准差)和AbsThreshold 中较小的那个。实测发现,这里的比较大小是带符号比较,由于标准差是非负数,当StdDevScale < 0 时,(StdDevScale ×标准差)≤ 0恒成立。所以此时的取值就是(StdDevScale ×标准差)。

帮助文档中StdDevScale 的推荐值范围是-1~1,一般通过上面的例子可知,一般的明显的黑白过度处的标准差在50左右,乘以StdDevScale即-50 ~ 50 ,50的灰度差异,对于分割来说一般是够了的。
文档还说:推荐的值是0.2,如果参数StdDevScale太大,可能分割不出任何东西;如果参数StdDevScale太小(例如-2),可能会把整个图像区域全部输出,也就说达不到有效分割的目的。(……with 0.2 as a suggested value. If the parameter is too high or too low, an empty or full region may be returned.)

最后再看看是怎么分割像素的:
其中g(x,y)指的是原始图像当前像素的灰度值;m(x,y)指的是遍历像素时,掩膜覆盖的像素的平均灰度值(mean)。
以LightDark = ‘dark’为例,当满足m(x,y) - g(x,y) ≥ v(x,y)时(即原始图像对应像素灰度比掩膜像素灰度均值低v(x,y)个灰度值以上),相应的灰度值低的暗像素被分割出来。

最后看几个例子体会一下:(对比之前的例子var_threshold (Image, Region, 4, 4, 0.2, 12, ‘dark’)的效果)
① 将AbsThreshold 由12改成30,此时分割出的区域变小。
1 read_image (Image, ‘C:/1.png’) 2 var_threshold (Image, Region, 4, 4, 0.2, 30, ‘dark’)
② AbsThreshold 保持12不变,将StdDevScale由0.2改成0.7,此时分割出的区域变小。
③ 将参数改为var_threshold (Image, Region, 4, 4, -0.01, 12, ‘dark’),此时分割出的区域大大增加,由前面的分析可知,此时参数AbsThreshold = 12无效,事实上,此时将AbsThreshold 改为1、50甚至200都对最终结果没有任何影响。
通过本人的分析,我认为StdDevScale取负值意义不大,因为它会分割出大量的不需要的区域,故一般推荐使用该算子时,StdDevScale取正值。

需要强调的是:在黑白过渡处,一般掩膜覆盖的像素的标准差较大,而在其他平缓的地方,标准差较小;因此最终采用的分割阈值随着掩膜在不断遍历像素的过程中,在(StdDevScale×标准差)和AbsThreshold 之间不断切换。

var_threshold和dyn_threshold的区别和联系:
dyn_threshold是将原图和滤波平滑后的图对比,var_threshold是将原图和对应像素掩膜覆盖的像素的平均灰度值对比。
在算子var_threshold中,如果参数StdDevScale = 0,那么就可以用动态阈值的方式非常近似地模拟。以下两种算法的效果极为类似:
1 read_image (Image, ‘C:/1.png’) 2 var_threshold (Image, Region, 4, 4, 0, 12, ‘dark’)
1 read_image (Image, ‘C:/1.png’) 2 mean_image (Image, ImageMean, 4, 4) 3 dyn_threshold (Image, ImageMean, RegionDynThresh, 12, ‘dark’)
两种方法的效果图:
那么当StdDevScale > 0 时,var_threshold对比dyn_threshold还存在什么优点呢?我认为是在黑白过渡处能减少分割出不需要的区域的概率。(因为黑白过渡处标准差大,当然前提是StdDevScale 不能设置得太小)

-----------摘自Zach_ZhouY博客

var_threshold相关推荐

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

    1. threshold(Image : Region : MinGray, MaxGray : ) 全局阈值分割,适用于环境稳定,目标与背景存在明显的灰度差的场合. 应用1:利用灰度直方图确定阈值进 ...

  2. 机器视觉应用软件开发步骤及流程

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 机器视觉工程应用主要可划分为硬件和软件两大部分. 硬件:工程应用的 ...

  3. halcon算子盘点:Chapter 15灰度分割

    Chapter 15:Segmentation 15.1 Classification 1. add_samples_image_class_gmm  功能:将从图像中获取的测试样本添加到高斯混合模型的 ...

  4. halcon学习笔记——机器视觉工程应用的开发思路

    机器视觉工程应用主要可划分为硬件和软件两大部分. 硬件:工程应用的第一步就是硬件选型.硬件选型很关键,因为它是你后面工作的基础.主要是光源.工业相机和镜头选择. 软件:目前业内商业库主要有Halcon ...

  5. HALCON基础知识

    HALCON 1. 语法范式 Syntax Style 1.1. 基本格式 1.1.1. 算子格式 算子(输入图像参数:输出图像参数:输入控制参数:输出控制参数) 其中四个参数任意一个可以为空 e.g ...

  6. halcon圆环完整度检测

    文章目录 处理要求 程序源码 处理结果 博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 处理要求 查找好的圆环,检测圆环不良 程序源码 read_image (Image, 'F: ...

  7. HALCON示例程序check_blister.hdev药品胶囊检测

    HALCON check_blister.hdev药品胶囊检测 示例程序源码(加注释) 显示.读入图片.设置显示字体等,之前的帖子已经介绍过了 dev_close_window () dev_upda ...

  8. Halcon阈值分割方法简析

    1. 基于直方图的自动阈值分割 1.1 关键算子 auto_threshold(Image : Regions : Sigma : ):使用多阈值分割单通道图像. 首先,计算图像的灰度直方图. 然后, ...

  9. halcon 相似度_Halcon分类函数,shape模型

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数013,shape模型 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化::: 用符号"**&quo ...

  10. HALCON常用算子(HALCON13.0)

    HALCON常用算子(HALCON13.0) Chapter 9--Develop dev_clear_window ( : : : )功能:清除活动图形窗口的内容 dev_close_window ...

最新文章

  1. 裸奔浏览器_大概是最好用的隐私浏览器 - Firefox Focus
  2. SSAS : 使用.NET为SSAS编写自定义程序集(四)
  3. icem密度盒怎么设置_怎么做好火灾自动报警系统施工安装?
  4. 1021 个位数统计 (15 分
  5. Github Pages建立个人博客
  6. 根据字符串形式的路径导入模块(重要)
  7. 腾讯广告X中科院计算所WWW2021论文:在线广告中的探索与优化
  8. 阿里:“马云从未转让和退出”;华为三星和解;拼多多回应传闻 | 极客头条...
  9. python3.7操作kafka_python操作kafka
  10. XML特殊符号-五个xml预定义实体
  11. 微信提现显示服务器异常,微信零钱提现为什么显示提示交易异常 解决办法是什么...
  12. LeetCode热题100使用摩尔投票法的题目整理(待更)
  13. 拇指玩」制作的「谷歌安装器」app
  14. 今日头条 2018 AI Camp 视频面试
  15. Error while extracting response for type [] and content type [],json返回值被解析为xml
  16. linux下Ftp客户端程序与Makefile
  17. Spring ioc 详解
  18. STM32【复习串口】
  19. 官方2013年6月CISA考试报名时间公布
  20. Python实现Label Propagation社区划分算法

热门文章

  1. html中鼠标冒泡泡,鼠标经过出现气泡框的简单实例
  2. 如何申请CSDN博客?
  3. 360安全浏览器强制使用极速模式打开
  4. 微信小游戏跳一跳外挂辅助程序
  5. Ray Dalio:经济机器是怎样运行的 (时长30分钟)
  6. layui 表格序号累加 翻页序号也累加
  7. 三角形个数(找规律)
  8. 中缀/后缀/前缀表达式及相互转换的手算详细步骤及C代码实现
  9. 网页的背景颜色变化效果
  10. 厦门大学信息计算机学院,厦门大学信息科学与技术学院计算机科学系导师介绍:刘向荣...