一、算子auto_threshold简介

auto_threshold 使用多个阈值分割单通道图像。首先,确定灰度值的绝对直方图。然后,从直方图中提取相关最小值,这些最小值被连续用作阈值操作的参数。用于byte图像的阈值为 0、255,以及从直方图中提取的所有最小值(在直方图使用标准偏差 Sigma 的高斯滤波器平滑之后)。对于每个灰度值区间,都会生成一个区域。因此,区域的数量是最小值 + 1 的数量。

对于 uint2 图像(int 型图像),上述过程类似地使用。然而,这里的最高阈值是 65535。此外,对于 uint2 图像,Sigma 的值(实际上)是指具有 256 个值的直方图,尽管内部使用了具有更高分辨率的直方图。这样做是为了便于在图像类型之间进行切换,而无需更改参数 Sigma。

对于float图像,阈值是图像中的最小和最大灰度值以及从直方图中提取的所有最小值。这里,参数Sigma的缩放是指图像的原始灰度值。选择的 Sigma 值越大,提取的区域就越少。如果要提取的区域表现出相似的灰度值(同质区域),则此运算符很有用。

二、实际案例

read_image (Image, 'fabrik')
median_image (Image, Median, 'circle', 3, 'mirrored')
auto_threshold (Median, Seg, 5)
connection (Seg, Connected)

三、用自己的代码实现(做个练习)

这里按照 auto_threshold的官方解释,用户自己实现该算子的原理。注意,通过以下算法已经将auto_threshold的意义完全表述出来。

read_image (Image, 'fabrik')
median_image (Image, Median, 'circle', 3, 'mirrored')
get_image_size(Median, Width, Height)
gen_rectangle1(Rectangle, 0, 0, Width, Height)gray_histo(Rectangle,Image, AbsoluteHisto, RelativeHisto)
create_funct_1d_array(RelativeHisto, Function)
smooth_funct_1d_gauss(Function, 4, SmoothedFunction)derivate_funct_1d( SmoothedFunction, 'first',function1_der)
derivate_funct_1d( SmoothedFunction, 'second',function2_der)
funct_1d_to_pairs( function1_der, XValues1, YValues1)
funct_1d_to_pairs( function2_der, XValues2, YValues2)tuple_length(XValues2, Length)xx:=[]
for I:=0 to Length-1 by 1if (  ( abs(YValues1[I]) < 0.001 )  and (YValues2[I]>0.00001 ) )xx:=[xx,I]endifendforstop()
offset:=6
var:=xx[0]
mm:=[]
mm:=[mm,var]i:=1
tuple_length(xx,len)
len:=len-1
while(i<len)while(abs(xx[i]-var)<offset and  i<len  )var:=xx[i]i:=i+1endwhile      if(i<len)mm:=[mm,xx[i]]var:=xx[i]endif
endwhile
stop()tlow:=[0,mm]
thigh:=[mm,255]
threshold(Image,Region, tlow,thigh)connection (Region, Connected)

四、以上关键代码解析

1)median_image (Image, Median, 'circle', 3, 'mirrored') 中值滤波,扩大信号,降低噪声。

2)gray_histo(Rectangle,Image, AbsoluteHisto, RelativeHisto)对图Image生成直方图,其中相对直方图是连续函数。

3)create_funct_1d_array(RelativeHisto, Function)用相对直方图生成一个一维函数,这里注意,RelativeHisto是一个列组,Function是函数,两者不同。区别在于凡是一维函数上的变换,都无法在列组上进行。

4)smooth_funct_1d_gauss(Function, 4, SmoothedFunction)对一维函数进行高斯平滑,作用与1条类似

5)funct_1d_to_pairs( function1_der, XValues1, YValues1)
funct_1d_to_pairs( function2_der, XValues2, YValues2)以上两条求出函数的一阶导数,二阶导数。

6) if (  ( abs(YValues1[I]) < 0.001 )  and (YValues2[I]>0.00001 ) )求解出函数中:一阶导数等于零,且二阶导数大于0

7)此段代码保证上边获得的极值点已经存入xx中,这里将距离太近的极值点合并。

tuple_length(xx,len)
len:=len-1
while(i<len)while(abs(xx[i]-var)<offset and  i<len  )var:=xx[i]i:=i+1endwhile      if(i<len)mm:=[mm,xx[i]]var:=xx[i]endif
endwhile

8)将区域按照xx中的极小值点间隔分割图像。

tlow:=[0,mm]
thigh:=[mm,255]
threshold(Image,Region, tlow,thigh)

参考文章:

halcon原理:一维函数function_1d类型【1】

halcon原理:一维函数function_1d类型【2】

Halcon原理:auto_threshold算子相关推荐

  1. Halcon 3D 常见算子描述

    一.简介 halcon 中有很多常见的算子,我们经常在用,但是作为一名算法工程师我们不仅要会用,知道原理也是很重要的,所以对于很多事情我们不仅要所以然更有知其所以然. 二.算子解释 1.smooth_ ...

  2. 史上超全halcon常见3D算子汇总(一)

    读取3D模型 read_object_model_3d 此算子用于读取3D对象. read_object_model_3d( : : FileName, Scale, GenParamName, Ge ...

  3. halcon学习(算子汇总)

    from:https://www.cnblogs.com/hanzhaoxin/archive/2013/01/09/2852213.html dev_clear_obj(Objects : : : ...

  4. Halcon一些功能算子

    Chapter 1 :Classification 1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样本添加到一个高斯混合模型的训 ...

  5. halcon File文件算子,持续更新

    目录 File文件 Images图像 read_image read_sequence write_image deserialize_image serialize_image list_image ...

  6. HALCON 1D Measure 算子初识

    基本上1D Measure都是建立一个ROI(region of interest,感兴趣区域),然后在感兴趣区域提取出边界的测量.常见的ROI有矩形ROI和圆环ROI. 下图为一个矩形ROI,中间的 ...

  7. matlab canny算子原理,Canny算子边缘检测原理以及实现

    基本原理 须满足条件:抑制噪声:精确定位边缘. 从数学上表达了三个准则[信噪比准则(低错误率).定位精度准则.单边缘响应准则],并寻找表达式的最佳解. 属于先平滑后求导的方法. 算法基本步骤 1.使用 ...

  8. Halcon中Connection算子的说明

    Connection算子 Compute connected components of a region.用来计算输入区域中的所有连通域.对应的反向操作是union1. 输入:一个region: 输 ...

  9. halcon的仿射变换算子的介绍

    1. 仿射变换类型 仿射变换有:平移.旋转.缩放.斜切(就是将斜体字导正). 2. 求稳定的特征点 要进行仿射变换,必须先获取变换矩阵.要获取变换矩阵,必须先获取特征点坐标.角度等信息,几何匹配和bo ...

  10. halcon深度学习算子,持续更新

    目录 Deep Learning 深度学习 Classification:分类 apply_dl_classifier clear_dl_classifier clear_dl_classifier_ ...

最新文章

  1. Python 为什么要保留显式的 self ?
  2. pythonlistsort函数_python用List的内建函数list.sort进行排序
  3. LeetCode算法入门- Remove Element -day20
  4. 30 个惊艳的Python开源项目
  5. 修复Winsock(转)
  6. Linux修改终端提示符
  7. 【WCF】WCF中的InstanceContext与ConcurrencyMode【转】
  8. ndarray、array、asarray的区别以及查看变量地址、is和==的区别
  9. HTML/CSS/js 日期等其他函数 相关收藏
  10. 你在杠杆另外一端的位置,决定你是否能够撬动地球
  11. 阿里云DataV使用笔记
  12. Windows10 添加开始菜单未显示应用到磁贴的方法
  13. 如何内置AdobeFlashPlayer.apk
  14. 【持续更新中······】 各种模板+神奇黑科技
  15. 将excel表格数据转换为xml文本数据
  16. ultraEdit32 /uedit32 自定义快捷键/自定义注释快捷键
  17. flex实现在交叉轴上的排列
  18. Linux——内存的申请与释放
  19. ^_^ 给力,找了好久,终让我找到了,好多VB源码免费下载,路过的朋友快看看吧
  20. Agilent/安捷伦4349B电阻测试

热门文章

  1. php元换成万元,元换算成万元(元与万元的换算器)
  2. 计算机c盘用户爆满,电脑C盘又爆满了?这招让你一键清除十几G内存
  3. 图像取证:源识别和伪造检测(Image Forensics: source identification and tampering detection)
  4. python合并大量ts文件_python爬取基于m3u8协议的ts文件并合并
  5. TCP AIMD Algorithm (copy)
  6. 如何压缩tiff图片?tif图片太大了怎么压缩?
  7. 至强服务器虚拟机黑苹果,[经验] AMD/Intel CPU VMware虚拟机安装黑苹果
  8. lisp 图层字体式样替换_ps将不同图层字体修改成相同字体的方法
  9. 使用Simple Allow Copy插件在网页内复制文字
  10. aic准则python_Python数据科学:线性回归