Halcon粘连木材图像的目标分割计数

Halcon粘连木材图像的目标分割计数

文章目录

  • Halcon粘连木材图像的目标分割计数
    • 1. 提取面积较小区域
    • 2. 分割较大区域
    • 3. 区域合并与计数

本文以一个实际场景图片为例,介绍阈值处理与形态学计算的应用。案例图像如图所示,图(a)为输入的原始图像,图(b)为处理结果。图中计算出了木材的数量,并以不同的颜色对分割出的区域进行了区分。
在这里插入图片描述
首先,从阈值处理开始,图(a)在进行全局阈值处理之后出现了一些问题。阈值设得高了,会蛮化边角的一些木头的局部区域;设得低了,会造成一些区域的粘连。另外,图像中还有一些木棍等小面积物体的干扰。如何在保留边角局部信息的情况下尽可能地防止粘连,是一个要仔细考虑的问题。
结合这个问题,本例的思路分两步走:先把边角一些小的木头区域提取出来,再专门解决粘连的问题。

1. 提取面积较小区域

区分大小的依据主要是面积,在做了一些基本的图像预处理之后,可以把面积较小的一部分图像。如靠近 4个边的部分木头先分割出来。在这个过程中,需要对木头边缘做一些处理,去掉外圈的树皮和一些干扰的区域,提取出木头截面的大块部分。图 (a)为初步阈值分割的结果,图(b)是根据面积的大小,提取出的比较小的,即比较独立的区域。
在这里插入图片描述

2. 分割较大区域

这一步比较简单,针对粘连的情况,可以通过腐蚀操作让边缘更加清晰。图(a)是提取出的面积较大的区域,可见单个木材区域发生了粘连,对其做腐蚀运算,提取出独立的区域,效果如图(b)所示。
在这里插入图片描述

3. 区域合并与计数

把上一步割出的大小区域分别合并,即可得到木头的总数。实现代码如下:

dev_close_window ()
*读取图像,将其转化为灰度图像并显示出来
read_image (Image, 'data/logs')
get_image_size (Image, Width, Height)
rgbl_to_gray(Image, grayImage)
*进行全局阈值分割,将亮色区域提取出来
threshold (grayImage, Bright, 60, 255)
*进行开运算处理,去除边缘毛刺
opening_rectanglel (Bright, Cut, 1, 7)
*将非连通区域分割成独立区域
connection (Cut, ConnectedRegions)
*选择截面比较小的木材的区域
select_shape (ConnectedRegions, smallRegions, 'area', 'and', 500, 20000)
*对粘连区域做腐蚀操作,根据腐蚀的情况和面积选出截面区域
*count_obj(SelectedRegions2,number1)
*选择截面比较大的木材的区域,可能有粘连和区域重叠的情况
select_shape (ConnectedRegions, largeRegions, 'area', 'and', 20000, 1000000)
erosion_circle(largeRegions,erisionedLargeRegions,8.5)
*将非连通区域分割成独立区域
connection (erisionedLargeRegions, ConnectedRegions2)
*再次选择符合面积条件的区域,排除杂点
select_shape (ConnectedRegions2, SelectedRegions3, 'area', 'and', 150, 200000)
*区域合并
concat_obj(smallRegions, SelectedRegions3, ObjectsConcat)
*区域计数
count _obj (ObjectsConcat,number3)
*创建窗口用于显示结果
dev_open_window (0, 0, Width, Height, 'black', Windowiandle)
dev display(ObjectsConcat)
set_display_font (WindowHandle,18,'mono''true','true')
*显示计数的结果,程序结束
disp_message (WindowHandle,'Number of logs : '+number3, 'image', 30, 50, 'blue','true')

本例以木材截面区域的面积为分割依据,通过形态学运算将单个木材的截面区域提取出来,这样可方便进行木材的计数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/597833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MacOS M1/M2 Go Debug 配置

前言 换电脑,Go 环境带来一些麻烦,耽误很多时间,稍作记录。 原始电脑是 Mac 旧款,CPU x86 构型,新电脑 M2,因为旧电脑里本地文件很多,为了简化搬迁,还是用了 Mac 自带的迁移&#x…

Spring 应用合并之路(一):摸石头过河 | 京东云技术团队

公司在推进降本增效,在尝试多种手段之后,发现应用太多,每个应用都做跨机房容灾部署,则最少需要 4 台机器(称为容器更合适)。那么,将相近应用做一个合并,减少维护项目,提高…

Spring的依赖注入(DI)

1.DI 概述:DI(Dependency Injection)依赖注入,在Spring创建对象的同时,为其属性赋值,称之为依赖注入。 1.1构造函数注入 顾名思义,就是使用类中的构造函数,给成员变量赋值。注意&…

Java ArrayList 面试题

Java ArrayList 面试题 文章目录 Java ArrayList 面试题ArrayList源码分析成员变量构造方法ArrayList源码分析面试题-ArrayList listnew ArrayList(10)中的list扩容几次面试题-如何实现数组和List之间的转换 ArrayList源码分析 分析ArrayList源码主要从三个方面去翻阅&#xf…

FindBugs问题EQ_COMPARETO_USE_OBJECT_EQUALS的解决方法

本文记录的是2016年4月初发生的事情。 前几天,标准CI的静态检查页面发现一个项目组同事引入的FindBugs问题,EQ_COMPARETO_USE_OBJECT_EQUALS,CI对这个问题给出的介绍如下 Class defines compareTo(…) and uses Object.equals() 同事没见过这…

Golang 变量类型及其声明定义

变量类型 在Go语言中,变量可以是多种不同的类型。这些类型可以分为几个大类: 基本类型: 布尔型 (bool)字符串 (string)数字类型:整型 (int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, uintptr)浮点型 …

<sa8650>sa8650 CDT-之-SA8650p实战验证

<sa8650>sa8650 CDT-之-SA8650p实战验证 1 前言2 生成CDT二进制文件2.1 第一步2.2 第二步2.3 第三步2.4 第四步3 修改QNX适配新的CDT3.1 修改lemans.dtsi文件3.2 新增dalconfig库3.3 修改dalconfig库名3.4 新增dalconfig库打包4 验证4.1 编译4.2 添加cdt二进制到刷机文件中

C语言多线程编程-线程属性和优先级

概念介绍 在C语言中进行多线程编程,通常会使用POSIX线程(也称为Pthreads)库,这是在Unix-like系统中实现多线程的标准方法。在Windows系统中,会使用Windows API来进行多线程编程。注意,C语言标准库本身并不…

大语言模型占显存的计算和优化

可以优化的地方: per_device_train_batch_size(相当于batch size,越小显存占的越小) gradient_accumulation_steps(per_device_train_batch_size*gradient_accumulation_steps计算梯度的数据数) gradien…

test 系统学习-04-test converate 测试覆盖率 jacoco 原理介绍

测试覆盖率 测试覆盖率(test coverage)是衡量软件测试完整性的一个重要指标。掌握测试覆盖率数据,有利于客观认识软件质量,正确了解测试状态,有效改进测试工作。 当然,要发挥这些作用,前提是我们掌握了真实的测试覆盖…

计算机毕业设计 基于Java的供应商管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

yolov1, yolo v2 和yolo v3系列分析

目标检测模型主要分为two-stage和one-stage, one-stage的代表主要是yolo系列和ssd。简单记录下学习yolo系列的笔记。 1 yolo V1 yolo v1是2015年的论文 you only look once:unified,real-time object detection 中提出,为one-st…

BUUCTF--hitcontraining_heapcreator1

老规矩上来看保护: 64位架构并且除了PIE全开。接着黑盒测试下场景: 菜单题不用想就是堆。接着我们我们看看IDA中的逻辑: 程序的主要逻辑是增删改查。我们看看创建堆的过程: 注释我已给出,步骤大概如下: 1.…

尚硅谷大数据技术-数据湖Hudi视频教程-笔记01【概述、编译安装】

大数据新风口:Hudi数据湖(尚硅谷&Apache Hudi联合出品) B站直达:https://www.bilibili.com/video/BV1ue4y1i7na 尚硅谷数据湖Hudi视频教程百度网盘:https://pan.baidu.com/s/1NkPku5Pp-l0gfgoo63hR-Q?pwdyyds阿里…

基于单片机的智能衣柜设计

一、摘要 随着科技的不断发展,人们对于生活品质的要求越来越高。智能衣柜作为智能家居的一个重要组成部分,能够为用户提供便捷、个性化的衣物管理服务。本文主要研究了基于单片机的智能衣柜设计,通过对硬件系统和软件系统的设计与实现&#…

【Linux操作系统】探秘Linux奥秘:Linux 操作系统的解密与实战

🌈个人主页:Sarapines Programmer🔥 系列专栏:《操作系统实验室》🔖诗赋清音:柳垂轻絮拂人衣,心随风舞梦飞。 山川湖海皆可涉,勇者征途逐星辉。 目录 🪐1 初识Linux OS …

CentOs搭建Kafka集群

Centos7搭建Kafka集群 一、集群规划二、环境准备三、安装kafka集群1、下载kafka安装包2、解压3、配置环境变量4、编辑配置文件①修改broker.id②配置kafka运行日志路径③配置Zookeeper集群地址 5、启动集群6、测试kafka①、创建topic②、查看当前服务器中的所有topic③、生产者…

如何使用CapSolver解决Web爬虫中遇到的CAPTCHA问题

Web爬取是一种强大的技术,用于从网站中提取数据,但经常会遇到一个常见障碍,即CAPTCHA。CAPTCHA是“Completely Automated Public Turing test to tell Computers and Humans Apart”的缩写,旨在防止自动机器人访问网站。然而&…

月薪15000在春晚分会场西安,够花吗?

千寻的结论: 如果有房无贷,另一半也有工作收入,父母身体健康且均有不错的退休金, 满足这些条件的话,在西安月入1.5W是相当不错。

人机交互主板定制_基于MT8735安卓核心板的自助查询机方案

人机交互主板是一种商显智能终端主板,广泛应用于广告机、工控一体机、教学一体机、智能自助终端、考勤机、智能零售终端、O2O智能设备、取号机、计算机视觉、医疗健康设备、机器人设备等领域。 人机交互主板采用联发科MTK8735芯片平台,四核Cortex-A53架构…