halcon学习笔记(7)——学习particle例子的动态阈值分割dyn_threshold

本文介绍了一种处理含有大小不等颗粒的图像的方法。首先通过灰度阈值去除大颗粒,然后利用动态阈值分割技术提取小颗粒。具体步骤包括读取图像、显示图像、灰度阈值分割、圆角膨胀、显示分割结果、补充图像、减少运算域、平滑处理、动态阈值分割、消除小区域、显示联通区域等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

手册里面的particle例子,例子的任务是分析颗粒在液体中。在这个应用程序的主要困难:存在两种类型的对象:大明亮物体和较低的小物体的对比。此外噪音使分割的存在困难;无法使用全局灰度阈值threshold进行分割;所以采用先将大块不需要检测的部分去除掉,再通过灰度动态阈值dyn_threshold分割图像得到想要的内容。

处理图片和结果图片:


以下是代码:

read_image (Image, 'particle')
*获取图像

dev_display (Image)
*显示图像

threshold (Image, Large, 110, 255)
*灰度阈值分割图像

dilation_circle (Large, LargeDilation, 7.5)
*圆角膨胀

dev_display (Image)
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_color ('red')
dev_display (LargeDilation)
dev_set_draw ('fill')
*显示图像

complement (LargeDilation, NotLarge)
*返回补充图像,即获得去除大斑点后的图像NotLarge

reduce_domain (Image, NotLarge, ParticlesRed)
*减去除了NotLarge图像,即去除大斑点后的图像,减少运算

mean_image (ParticlesRed, Mean, 31, 31)
*平滑处理图像

dyn_threshold (ParticlesRed, Mean, SmallRaw, 3, 'light')
*选择灰度阈值;网友详解:当前背景之间差异明显时,可以设定全局阈值进行threshold,但很多情况下由于背景不均一,
*目标体经常表现为比背景局部亮一些或暗一些,无法确定全局阈值操作,需要通过其邻域找到一个合适的阈值进
*行分割。ThresholdImage是参考图像,通过与OrigImage对比找到领域确定阈值,一般采用平滑滤波算子
*(如mean_image)获取参考图像。offset设定邻域比较的区间范围,灰度值变化在offset范围内均是可以接受的。

opening_circle (SmallRaw, Small, 2.5)
*消除小区域(小于圆形结构元素)和光滑的边界地区

connection (Small, SmallConnection)
*显示联通区域

dev_display (Image)
*这句不加窗口显示效果会有雪花

dev_set_colored (12)
dev_display (SmallConnection)
*显示结果图像

下图是只用threshold时候的实验效果,无法分割出小斑点:


### 关于 Halcon `dyn_threshold` 函数的使用说明 #### 函数概述 `dyn_threshold` 是 HALCON 中用于执行自适应阈值处理的功能,该操作依据输入图像及其均值图像来动态决定二值化过程中的阈值。这使得对于具有复杂光照条件或背景变化较大的场景下的图像分割更为有效[^1]。 #### 参数详解 - **Input Image (Image)**: 输入待处理的灰度级图片。 - **Mean Image (ImageMean)**: 对应位置像素点邻域内的平均亮度值构成的新图;一般通过对原图做平滑滤波获得。 - **Output Region (RegionDynThresh)**: 输出的结果区域对象,表示经过动态阈值得到的目标物前景部分。 - **Threshold Delta**: 设定一个固定差值Δ作为判断标准,即当某处实际强度减去其所在窗口内均值大于等于此参数时视为目标成分保留下来。 - **Mode ('lighter'/'darker'/'not_equal')**: 控制比较方式的选择——分别对应“更亮”、“较暗”以及两者皆可的情况。 ```cpp // C++ code example using the dyn_threshold operator in HALCON. HObject ho_Image, ho_MeanImage, ho_Regions; double ThresholdDelta = 15; // Set threshold delta value string Mode = "not_equal"; read_image(&ho_Image,"photometric_stereo/embossed_01"); mean_image(ho_Image,&ho_MeanImage,60,60); dyn_threshold(ho_Image,ho_MeanImage,&ho_Regions,ThresholdDelta,Mode.c_str()); ``` 上述代码片段展示了如何利用 `dyn_threshold` 来分离出特定特征如盲文字母等细节结构[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值