当前位置: 首页 > ai >正文

【机械视觉】Halcon—【七、blob阈值分割】

【机械视觉】Halcon—【七、blob阈值分割】

目录

【机械视觉】Halcon—【七、blob阈值分割】

介绍

步骤

1. 读取图像

2. 转换到灰度图(如果需要)

3. 应用阈值分割

4. 分析Blob

5. 可视化结果

完整示例代码:

自动阈值分割

算子介绍

例子


介绍

在图像处理中,Blob(Binary Large Object)分析是一种常见的用于分割和测量图像中特定形状区域的技术。Halcon是一个强大的机器视觉软件库,提供了丰富的工具和函数来处理图像,包括Blob分析。在Halcon中,使用阈值分割是实现Blob分析的第一步,下面是如何在Halcon中实现基于阈值的图像分割的步骤:

步骤

1. 读取图像

首先,需要使用Halcon的函数读取图像。这可以通过read_image函数完成。

read_image(Image, 'path_to_your_image')
2. 转换到灰度图(如果需要)

如果你的图像是彩色的,通常需要将其转换为灰度图,因为Blob分析通常在灰度图上进行。

rgb1_to_gray(Image, GrayImage)
3. 应用阈值分割

使用threshold函数对图像应用阈值分割。你需要指定阈值和可能的区域填充值。

threshold(GrayImage, Region, 100, 255)  // 假设我们选择100作为阈值
4. 分析Blob

一旦你有了分割的二值图像(即包含了目标的区域),你可以使用count_obj、select_obj等函数来分析这些区域。

count_obj(Region, Number)  // 计算区域数量
select_obj(Region, SelectedRegions, 1)  // 选择最大的区域(如果有多个Blob)
5. 可视化结果

最后,你可以使用dev_display或dev_set_color等函数来可视化结果。

dev_display(SelectedRegions)  // 显示选定的区域
dev_set_color('green')  // 设置颜色为绿色
dev_display(SelectedRegions)  // 再次显示以应用颜色设置


完整示例代码:

read_image(Image, 'path_to_your_image')
rgb1_to_gray(Image, GrayImage)
threshold(GrayImage, Region, 100, 255)
count_obj(Region, Number)
select_obj(Region, SelectedRegions, 1)  // 选择最大的Blob(如果有多个)
dev_display(SelectedRegions)
dev_set_color('green')
dev_display(SelectedRegions)  // 以绿色显示选定的Blob区域

通过上述步骤,可以在Halcon中实现基于阈值的Blob分割。根据实际情况,你可能需要调整阈值或预处理步骤(如滤波、增强对比度等)来优化分割效果。Halcon提供了丰富的图像处理函数,可以灵活应对各种复杂的图像分析需求。

自动阈值分割

算子介绍

auto_threshold (Image, Regions, sigma)

自动阈值分割原理: 主要使用在自动分割多阈值的情况下

  • 1 计算图像灰度直方图
  • 2 高斯函数平滑直方图
  • 3 在平滑后直方图当中寻找波谷作为阈值
  • 4 使用找到阈值对图像进行多级阈值分割

建议 sigma

  • 高对比度图像 使用较小值(3-5) 保留了更多细节 产生更多阈值
  • 低对比度图像 使用较大值(6-10)平滑效果更强,产生阈值就少

例子

read_image (Image, 'egypt1')sigma:=4
*自动阈值分割原理: 主要使用在自动分割多阈值的情况下
*1 计算图像灰度直方图
*2 高斯函数平滑直方图
*3 在平滑后直方图当中寻找波谷作为阈值
*4 使用找到阈值对图像进行多级阈值分割
*建议 sigma*高对比度图像 使用较小值(3-5) 保留了更多细节 产生更多阈值*低对比度图像 使用较大值(6-10)平滑效果更强,产生阈值就少*sigma高斯平滑值
auto_threshold (Image, Regions, sigma)*绘制输入图像的灰度直方图
*AbsoluteHisto 绝对分布 0-255灰度值个数
*RelativeHisto 相对分布 0-255灰度值 比例
gray_histo (Image, Image, AbsoluteHisto, RelativeHisto)*绘制 中间没有进行高斯平滑操作
*gen_region_histo (Region, AbsoluteHisto, 255, 255, 1)dev_clear_window ()
*对绝对分布进行平滑操作*把绝对分布生成一个一唯函数
create_funct_1d_array (AbsoluteHisto, Function)*对函数进行高斯平滑
smooth_funct_1d_gauss (Function, sigma, SmoothedFunction)*把SmoothedFunction转成点的形式
*XValues x值 灰度值
*YValues y值  某个灰度值高斯平滑之后值
funct_1d_to_pairs (SmoothedFunction, XValues, YValues)
*YValues 生成一个直方图
gen_region_histo (Region, YValues, 255, 255, 1)

http://www.xdnf.cn/news/12213.html

相关文章:

  • nginx 同时支持ipv4与ipv6 配置
  • SLG游戏分析
  • Seata 分布式事务 AT 模式
  • IP如何挑?2025年海外专线IP如何购买?
  • python打卡day45@浙大疏锦行
  • Vehicle HAL(5)--vhal 实现设置属性的流程
  • Silicon EFR32xG22 错误问题和解决办法汇总
  • Linux目录结构
  • ROS2里面与话题 /move_base_simple/goal 和 /move_base/status 相对应的话题名字及其含义
  • 整理几个概念:DCU DTK HIP hipcc ROCm LLVM Triton MIGraphX 怎么增加GStreamer插件
  • 可穿戴设备:健康监测的未来之眼
  • 2025年阿里最新软件测试面试题:Web 测试+接口测试+App 测试
  • DAY 22 复习日
  • 获取第三方图片接口文件流并保存服务器
  • 8天Python从入门到精通【itheima】-71~72(数据容器“序列”+案例练习)
  • 串:BF算法(朴素的魔术匹配算法)
  • 【深度学习-Day 23】框架实战:模型训练与评估核心环节详解 (MNIST实战)
  • MQTTX连接移动云的例子
  • JMeter 实现 MQTT 协议压力测试 !
  • 云服务器Xshell登录拒绝访问排查
  • 使用 Deleaker 精准定位内存与 GDI 资源泄漏
  • Matplotlib 库来可视化频谱泄漏和加窗的效果
  • 【如何做好应用架构?】
  • RTOS:创建队列(含源码分析)
  • 搭建DNS域名解析服务器(正向解析资源文件)
  • 数据结构:递归:泰勒展开式(Taylor Series Expansion)
  • 如何搭建自动化测试框架?
  • simulink有无现成模块可以实现将三个分开的输入合并为一个[1*3]的行向量输出?
  • nginx 服务启动失败问题记录
  • 华新精科IPO“上会” 四大疑惑待解