一、threshold 全局阈值

threshold(Image : Region : MinGray, MaxGray : )  对应参数分别为输入图像、输出区域、阈值下限、阈值上限

使用全局阈值分割图像,阈值选择输入图像中灰度值g满足以下条件的像素:

图像中所有满足条件的点会被作为一个整体区域被返回,对于矢量图像,阈值不是对应于灰度值,而是对应于矢量的长度。

注意点:MaxGray >= MinGray,MaxGray和MinGray的值可以是浮点类型也可以是整数类型,如果图像是整数类型的,MaxGray和MinGray的值类型应当为整数类型,如果是浮点类型,小数部分会被舍弃;

二、dyn_threshold 局部阈值

dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : ) 对应参数分别为原始图像、阈值图像、输出区域、偏移量、输出类型

使用局部阈值分割图像,dyn_threshold从输入图像中选择满足条件的区域方法如下:

注意:g0是原始图片,gt是阈值图片,通常,阈值图像是原始图像的平滑版本,可以利用 mean_image, binomial_filter, gauss_filter等来创建阈值图片;

当LightDark = 'light' 时 g0 >= gt+Offset;

当LightDark = 'dark' 时 g0 <= gt-Offset;

当LightDark = 'equal' 时 gt-Offset <= g0 <= gt+Offset;

当LightDark = 'not_equal' 时 gt+Offset < g0 或者 g0 < gt-Offset;

利用dyn_threshold可以提取目标图片的轮廓,如下图

代码如下:

read_image (Image2, 'C:/Users/Administrator/Desktop/2注册图片.bmp')
draw_rectangle1 (200000, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
reduce_domain (Image2, Rectangle, ImageReduced)
mean_image (ImageReduced, ImageMean, 3, 3)
dyn_threshold (ImageReduced, ImageMean, RegionDynThresh, 10, 'light')

MaskSize尺寸越大,发现的区域就越大,一般,MaskSize的大小应该是被提取对象直径的两倍,如下图:

代码如下:

read_image (Image2, 'C:/Users/Administrator/Desktop/2注册图片.bmp')
draw_rectangle1 (200000, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
reduce_domain (Image2, Rectangle, ImageReduced)
mean_image (ImageReduced, ImageMean, 10,10)
dyn_threshold (ImageReduced, ImageMean, RegionDynThresh,5, 'light')

注意:offset不应该设置成0,如果设置成0会有很多干扰会被一起提取出来,建议值应该是5到40,offset越大,被提取的区域就会越小,超过60可能就发现不了任何点了,整个函数的返回就是一个空区域;

三、bin_threshold

bin_threshold(Image : Region : : )对应参数为输入图像和输出区域

使用自动确定的阈值分割图像,bin_threshold已经过时,只是为了向后兼容而提供的,新的应用程序应该使用binary_threshold来替代;

bin_threshold使用自动确定的阈值分割单通道的灰度图像,首先,输入图像的相对直方图是确定的,然后,从直方图中提取相关的最小值,作为阈值操作的参数,为了减少最小值的数量,对直方图进行高斯平滑处理,掩模的大小被放大,直到平滑直方图中只有一个最小值

四、binary_threshold 二值阈值

binary_threshold(Image : Region : Method, LightDark : UsedThreshold)对应参数分别为输入图像、输出区域、使用方法、选择前景还是背景、输出使用的阈值

使用二值阈值分割图像,binary_threshold使用自动确定的全局阈值分割单通道图像,并在region中返回分割后的区域,分割所使用的阈值由method中给出的方法确定,非常适用于在均匀照明的背景下分割字符;

目前,method总共提供两种方法:'max_separability' 和 'smooth_histo',这两种方法都只能用于具有双峰直方图的图像:

'smooth_histo' 方法和bin_threshold的功能一致,可以参考bin_threshold的分割过程;

'max_separability' 方法是靠UsedThreshold来决定最小阈值的,速度比'smooth_histo'要快,对于干扰也不是那么敏感;

五、auto_theshold 直方图阈值

auto_threshold(Image : Regions : Sigma : ) 对应参数分别为输入图像、输出区域、高斯参数

利用直方图确定的阈值分割图像,通过多阈值分割单通道图像,会返回多个区域;首先输入图像的绝对直方图的灰度值是确定的,然后高斯平滑(Sigma)后从直方图中提取相关的最小值,Sigma越大,提取的区域就越小;

代码如下:

read_image (Image2, 'C:/Users/Administrator/Desktop/2注册图片.bmp')
draw_rectangle1 (200000, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
reduce_domain (Image2, Rectangle, ImageReduced)
median_image (ImageReduced, ImageMedian, 'circle', 5, 'mirrored')  为了过滤干扰因素,不进行过滤的话,会返回很多个干扰区域;
auto_threshold (ImageMedian, Regions, 5)

六、fast_threshod 全局阈值

fast_threshold(Image : Region : MinGray, MaxGray, MinSize : ) 对应参数分别为输入图像、输出区域、阈值下限、阈值上限、处理参数

基于全局阈值的图像快速阈值化,fast_threshold从输入图像中选择灰度值g满足以下条件的像素:

此方法为了节约处理时间,分成两步去阈值图像,第一步是通过MinSize的值来先处理行列间隔为Minsize的所有像素点,第二步是再处理邻域(size (2*MinSize+1) x (2*MinSize+1))的所有点;

对于不需要深入研究的人,在理解MinSize的时候,可以直接理解为就是一个加速参数,把图像分成两块来分别处理,MinSize决定了两块的比例;

虽然Fast_threshold已经分了两步去处理,但是由于多核计算机支持SSE2指令集的,所以再多核计算机上threshold的速度是大于fast_threshold的,基本上fast_threshold主要用于嵌入式系统中,速度才会快于threshold;

测试速度:

代码如下:处理一幅大图时

没有循环的情况下,只执行一遍,fast_threshold的MinSize=1,执行时间如下:

没有循环的情况下,只执行一遍,fast_threshold的MinSize=200,执行时间如下:

把fast_threshold更换成threshold (ImageReduced, Region,20, 255),执行时间如下:

注意:只是简单论证两种方式的时间,不够严谨性,如需要大量验证,必须保证条件的一致性,以及执行的次数够过才行;

七、var_threshold

var_threshold(Image : Region : MaskWidth, MaskHeight, StdDevScale, AbsThreshold, LightDark : )
分别对应于参数

输入图像、输出区域、掩膜宽度、掩膜高度、灰度值的标准差因子、与平均值的最小灰度差值、阈值类型

在不均匀的,嘈杂的,或不均匀照明的背景上分割区域是比较合适的;

通过局部均值和标准差分析阈值图像,主要通过以下几个条件来选择像素:

1、提取像素的局部灰度值是亮的还是暗的,也就是提取前景还是背景,取决于参数LightDark;

2、MaskWidth和MaskHeight如下图,其他参数相同的情况下,(1)是原始图片,(2)是MaskWidth和MaskHeight等于12,(3)是MaskWidth和MaskHeight等于3,(4)是MaskWidth和MaskHeight等于40

因此MaskWidth和MaskHeight的最小值应该要大于等于3,值3可以被认为是最小的敏感值;

3、如果StdDevScale是正值,那么像素灰度值需要具有较高的标准偏差(不均匀的图像);如果StdDevScale是负值,那么像素灰度值需要具有较低的标准偏差(均匀的图像);StdDevScale 局部标准差被用来衡量图像中的噪声,标准差可以通过StdDevScale进行缩放(最后一张图体现了缩放的意义),以反映所需的灵敏度,较高的值意味着只选择与周围环境非常不同的像素,建议值是在-1.0到1.0之间,0.2是建议值,如下图:

图(1)是StdDevScale的值过于小,导致很多像素没有被选中,图(2)是值过大,导致不需要的像素值被选中;

4、AbsThreshold 在均匀的图像中,标准差较低;因此,单个灰度值的影响较大,为了减小算子的灵敏度,需要调整AbsThreshold的值,这样单个灰度值的变化就可以被忽略;

值得注意的是,如果StdDevScale是负值,AbsThreshold也应该选择为负值,因为标准差比较低,在介绍StdDevScale时有提到;

补充:标准差可以通过StdDevScale进行缩放

结果灰度值GrayValues,经过StdDev的值来放大,主要在平均灰度值Mean的基础上,从而拉大灰度值的差距,提高对比来选出需要的区域

总结:

1、使用最多的基本就是threshold、dyn_threshold、binary_threshold和var_threshold;

2、正常干扰不多的情况下直接用threshold即可;

3、复杂情况根据具体需要选择dyn_threshold、binary_threshold、var_threshold;

Halcon算子threshold、dyn_threshold、binary_threshold、auto_threshold、fast_threshold、var_threshold相关推荐

  1. Halcon算子学习:图像阈值分割-threshold、binary_threshold、dyn_threshold算子

    Halcon算子学习:图像阈值分割算子 前言 1.threshold-全局固定阈值分割 2.Binary Threshold-自动全局阈值分割 3.dyn_threshold-局部动态阈值分割 小结: ...

  2. halcon算子中文解释

    halcon算子中文解释 comment ( : : Comment : )   注释语句 exit ( : : : )  退出函数 open_file ( : : FileName, FileTyp ...

  3. Halcon算子大全

    ##Halcon算子大全 Halcon算子大全 Chapter 1 :Classification 1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm ...

  4. Halcon算子翻译——dev_set_line_width

    名称 dev_set_line_width - 定义region,contour输出的线宽. 用法 dev_set_line_width( : : LineWidth : ) 描述 dev_set_l ...

  5. Halcon算子--图像、区域、轮廓、测量、拟合、垂足、夹角

    Halcon算子–图像.区域.轮廓.测量.拟合.垂足.夹角 read_image (Image,'fabrik') 画矩形 draw_rectangle1 (3600, Row1, Column1, ...

  6. halcon/c++接口基础 之 构造函数与Halcon算子

    Halcon/C++提供了构造函数,主要基于适合的Halcon算子.比如说HImage和HBarCode基于read_image and create_bar_code_model. 请注意当前的Ha ...

  7. Halcon算子解释大全

                                             Halcon算子解释大全 Halcon/Visionpro视频教程和资料,请访问 重码网,网址: http://www ...

  8. halcon算子翻译——dev_set_paint

    名称 dev_set_paint - 定义灰度值输出模式. 用法 dev_set_paint( : : Mode : ) 描述 dev_set_paint定义了用于在图形窗口中显示图形对象的输出模式. ...

  9. Halcon算子:min_max_gray和gray_histo的区别

    一.说明 halcon算子需要一个一个抠明白,逐步去除拦路虎.本片介绍几个算子,没看透的算子也是很唬人的. 二.算子min_max_gray min_max_gray(Regions, Image : ...

  10. Halcon算子知识:optical_flow_mg

    一.说明 本文是对halcon手册的整理,如果真正掌握光流法,恐怕一个博文是不够的.作者只能先呈现这个博文,再对文中的晦涩理论进行逐步阐述,参考文章将放在文后,期望读者能从中学到全部知识. 二.关于光 ...

最新文章

  1. Matlab:绘制简单能量的接收机工作特性曲线(Energy_detection_simulation_ok)
  2. 如何编写一份软件工程实验报告
  3. JSPatch Convertor 实现原理详解
  4. BugkuCTF-Misc:闪的好快
  5. javascript 解决IE8 兼容 placeholder 属性 含password
  6. No Thumbnails for Custom Picture Library Definition
  7. [转载] Python内置函数-min函数和max函数-详解
  8. 继承(父类为虚方法以及子类的重写)
  9. 10 个 Linux 网络和监控命
  10. Julia: array =tuple, 与 ...
  11. 2021 OpenCV人工智能竞赛优秀项目团队介绍集锦(五)
  12. 文章复现:SRCNN
  13. js清除网页广告代码
  14. CF898D. Alarm Clock(贪心 双指针)
  15. 汉诺塔怎么加计数次数c语言,C语言算汉诺塔,递归时的输出是怎么一步一步来的?如图,求大神帮忙...
  16. #Java学习#习题一
  17. STM32CubeMX HAL F103 BKP备份寄存器使用
  18. Virtio 基本概念和设备操作
  19. 机器学习(1):绪论
  20. 主句过去完成时,从句过去将来时

热门文章

  1. 思岚A2 运行cartographer
  2. 计算机用户目录是什么,c盘里面users是什么文件夹
  3. 7-3 寻找大富翁 (50分)
  4. 写了一个个人资产管理的后台系统
  5. Spring(二)控制层梳理
  6. Ubuntu修改DNS
  7. Excel 冻结首行
  8. php 如何实现 访问不带后缀名
  9. Spark/Flink/CarbonData技术实践最佳案例解析
  10. 图文并茂 RAID 技术全解 – RAID0、RAID1、RAID5、RAID100