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

Halcon图像分割总结

摘要

在机器视觉项目当中,选定特定的图像区域,再此基础上做进一步处理,需要对图像区域分割,分割的方法有很多种,对于具体项目而言,不同的图像分割方法适用的场景不同,因此需要对特定的场景选择特定的图像分割方法,这里对图像区域分割方法做总结。

全局阈值分割

全局阈值分割:在整幅图像中根据灰度阈值进行分割;

  1. 适用场景
    光照均匀,想要提取的目标区域与背景之间灰度差异较大,且目标区域的灰度值范围集中且稳定。不适用于环境光变化的场景。
  2. 相关算子
threshold(Image,Region,grayMin,grayMax);

提取灰度值范围在grayMin到grayMax的区域。
可以直接在主程序窗口输入,也可以采用halcon提供的灰度直方图窗口拉拖最大最小值范围,可以实时的看到提取的区域的变化。
在这里插入图片描述
选中阈值,可以实时看到选中的区域变化
在这里插入图片描述

自动二值阈值分割

适合于直方图存在两个波峰的情况,即图像前景背景的区别较大

  1. 适用场景:
    整幅图像黑白对比明显,所要提取的区域与背景灰度值差异很大,且成像稳定、
  2. 相关算子
binary_threshold(Image,Region,Method,LightDark,UsedThreshold)

可以根据第四个参数选择是要提取亮的区域还是暗的区域。
其中,第三个参数为’max_separability’时,就是非常有名的大津法,Otsu法。
当选择dark时,分割的结果为:
在这里插入图片描述
当选择light时,分割的结果为:
在这里插入图片描述

动态阈值分割

动态阈值分割的方法有很多种,不同动态阈值分割的方法鲁棒性不同。总的来说,动态阈值分割是为了对光照不均匀,图像灰度值变化较大的场景自动分割的方法。

dyn_threshold

  1. 适用场景
    适用于无法使用单一的阈值分割的情况,如背景比较复杂

  2. 相关算子

dyn_threshold(OrigImage,thresholdImage,regionDynthresh,Offset,lightdark)

在这个算子里面第二个参数是阈值图像,一般在动态分割之前,需要做一个图像均值平滑处理,使用算子mean_image。了解过图像底层算法的人都知道,mean_image的参数代表掩膜窗口,其数值越大,能平滑掉更多的噪点,但是会影响边缘的对比度,一般参数设置为排除掉噪点即可。
因此这里需要结合图像平滑处理

mean_image (Image, ImageMean, 3, 3)
dyn_threshold (Image, ImageMean, RegionDynThresh, 5, 'dark')

在这里插入图片描述

var_threshold

  1. 适用场景
    利用局部均值和标准差分割,适用于光照不均匀的场景同时目标区域与周围区域有较大灰度差。
  2. 相关算子
var_threshold (Image, Region, 15, 15, 0.2, 50, 'dark')

图像效果
在这里插入图片描述
动态阈值分割的方法有很多,基本效果和以上几个算子效果都差不多,这里就不赘述了…

亚像素轮廓分割

亚像素轮廓是halcon的一种数据结构,它不是基于像素的,在像素内部相邻元素之间做边缘拟合,可以具体到像素内部,因此被称为亚像素轮廓。
相关算子

threshold_sub_pix(Image,Region,128)

这里的含义是将小于128阈值的灰度区域分割成区域。
图像效果
在这里插入图片描述

相关文章:

  • 5 h0255. 迷宫问题,6 h0253. 鸣人和佐助(广度优先搜索)
  • 《数据结构》堆栈(铁路、洗牌、汉诺塔、走迷宫)全解析
  • 基于时序行为的协同过滤推荐算法(Python)
  • Vue--》计算属性与监视(侦听)属性的使用
  • 【状语从句练习题】because / because of / although / in spite of
  • Web前端开发基础教程二
  • MyBatis-写分页的几种方法,怎么写分页最简单
  • 狗厂员工来面试本想难为一下,结果被虐得连console.log也不敢写了
  • Pytorch(Tensor)-Numpy(ndarrays) API对照表
  • RK3399驱动开发 | 14 - AP6255 SDIO WiFi 调试(基于linux5.4.32内核)
  • _cpp 红黑树快速了解底层结构
  • SQL学习笔记(未完待续)
  • 虚幻引擎图文笔记:动画资源中Force Root Lock的作用
  • 一起Talk Android吧(第四百零五回:画布的变换)
  • [Rust学习:二]变量和传参
  • JavaScript-如何实现克隆(clone)函数
  • [deviceone开发]-do_Webview的基本示例
  • 4. 路由到控制器 - Laravel从零开始教程
  • Codepen 每日精选(2018-3-25)
  • gulp 教程
  • HTML-表单
  • Javascript Math对象和Date对象常用方法详解
  • Linux中的硬链接与软链接
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 智能网联汽车信息安全
  • # 飞书APP集成平台-数字化落地
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • ###STL(标准模板库)
  • #define
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (Java)【深基9.例1】选举学生会
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (正则)提取页面里的img标签
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)为C# Windows服务添加安装程序
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .NET 5种线程安全集合
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • [ Linux ] Linux信号概述 信号的产生
  • [20140403]查询是否产生日志
  • [Angular 基础] - 表单:响应式表单
  • [ComfyUI进阶教程] animatediff视频提示词书写要点
  • [C语言]——分支和循环(4)
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [emacs] CUA的矩形块操作很给力啊