Halcon根据特征值选择区域select_shape

Halcon根据特征值选择区域

关于提取图像的特征,比较常用的一个算子是select_shape算子,它能高效地根据特征提取出符合条件的区域。该算子的原型如下:

select_shape (Regions : SelectedRegions : Features, Operation, Min, Max :)

参数1和参数2分别表示输入和输出的区域,值得关注的是参数3Features。这里提供了一个包括多种特征参数的列表,基本包括了区域的常用特征,使用者只需要选择需要的特征,并设置筛选条件,就能得到需要的区域。
(1)area:输入区域的面积。
(2)row:输入区域中心点的行坐标。
(3)column:输入区域中心点的列坐标。
(4)width:输入区域的宽度。
(5)height:输入区域的高度。
(6)circularity:输入区域的圆度。
(7)compactness:输入区域的紧密度。
(8)convexity:输入区域的凸包性。
(9)rectangularity:输入区域的矩形度。
(10)outer_radius:输入区域的最小外接圆的半径。
(11)inner_radius:输入区域的最大内接圆的半径。
(12)inner_width:输入区域的与坐标轴平行的最大内接矩形的宽度。
(13)inner_height:输入区域的与坐标轴平行的最大内接矩形的宽度。
(14)connect_num:输入区域中非连通区域的数量。
(15)holes_num:输入区域包含的孔洞数量。
(16)max_diameter:输入区域的最大直径。
在检测中,常常使用某个特征值作为分割的依据,这时使用select_shape算子就非常高效,仅用简洁的代码就能将这些区域提取出来。例如,我们常利用面积特征来筛选出较大的前景目标,移除杂点和小区域。使用select_shape算子进行面积筛选,无须单独计算每个区域的具体面积,代码也非常简洁。
下面是一个使用select_shape算子进行特征筛选的例子,如图所示。图(a)为输入的彩色图像,图中有若干个孔洞。为了将最大的孔洞从图中提取出来,可以先使用阈值处理,从感兴趣区域中提取出较亮的区域;然后使用select_shape 算子根据面积arca筛选,将大部分杂点排除掉,得到图(b)所示的形状;接着再用一次select_shape 算子,使用区域宽度width作为判断条件,选择出大的孔。图(c)为使用select_shape算子进行特征提取的图像,经过第二次筛选,将包含较大孔洞的区域提取出来。
在这里插入图片描述
上述过程的代码如下:

*清空显示窗口
dev_close_window ()
*读取待检测的图像
read_image (Image, 'data/crossShape')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
*设置绘制的颜色
dev_set_color ('white')
*将彩色图像转化为灰度图像,这是为了后面的图像二值化
rgbl_to_gray (Image, GrayImage)
*创建矩形选区,选择感兴趣区域
gen_rectanglel (Rectangle, 100, 127, 325, 490)
reduce_domain (GrayImage, Rectangle, ROI)
gen_image_proto (ROI, Imagecleared, 0)
*进行阈值处理,提取出图中较暗的包含孔洞的区域
threshold (ROI, Regions, 50, 255)
*将不连通的部分独立分割出来,成为一组区域
connection (Regions, ConnectedRegions)
*设置绘制的颜色,为了标记选择的区域
dev_set_color ('yellow')
*方法一
*将阈值处理的结果区域作为select_shape算子的输入,根据区域的宽度选择出目标
select_shape (ConnectedRegions, SelectedRegionsl, 'area','and', 1000, 99999)
*方法二
*先计算面积,再选择出面积最大的目标
area_center (ConnectedRegions, Area, Row, Column)
select_shape (ConnectedRegions, SelectedRegions2,'area','and', max(Area), 99999)
*方法三
*选择面积最大的形状区域作为目标
select_shape_std (SelectedRegionsl, SelectedRegion3, 'max_area', 70)
dev_clear_window ()
dev_display (SelectedRegion3)

该段代码中列举了3种选择最大目标的方法。方法一是直接根据面积的值设置选择标准;方法二分为两步操作,先计算面积,再选择出面积最大的形状;方法三是通过在select shape_std算子中设置max_area,直接提取出面积最大的形状。3种方法得到的结果相同。这样即可将符合条件的区域提取出来。注意,可以根据检测需要组合使用多种选择条件,多次使用selec_shape算子,以筛选出合适的区域。

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

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

相关文章

win和linux打印tree命令目录结构命令

win 输入tree: cmd: tree 显示文件夹不显示文件 可以用相对路径:tree .\test_pipreqs 省略.\也可以:tree test_pipreqs 显示文件 上面只显示文件夹未能显示文件。我们继续看下面: cmd: tree [path] [/f] [/a] ----------/f 显示每个文件中文件…

修改 Git 仓库的远程地址

要修改 Git 仓库的远程地址&#xff0c;你可以使用以下命令&#xff1a; 首先&#xff0c;查看当前的远程地址列表&#xff0c;使用命令 git remote -v。如果你想修改已存在的远程地址&#xff0c;可以使用命令 git remote set-url <remote_name> <new_url>。在这…

【论文阅读笔记】Mip-NeRF 360: Unbounded Anti-Aliased Neural Radiance Fields

目录 概述摘要引言参数化效率歧义性 mip-NeRF场景和光线参数化从粗到细的在线蒸馏基于区间的模型的正则化实现细节实验限制总结&#xff1a;附录退火膨胀采样背景颜色 paper&#xff1a;https://arxiv.org/abs/2111.12077 code&#xff1a;https://github.com/google-research/…

【LeetCode】601. 体育馆的人流量

表&#xff1a;Stadium ------------------------ | Column Name | Type | ------------------------ | id | int | | visit_date | date | | people | int | ------------------------ visit_date 是该表中具有唯一值的列。 每日人流量…

Android 项目工程配置签名文件

1. Android签名证书(.keystore) Android平台打包发布apk应用&#xff0c;需要使用数字证书&#xff08;.keystore文件&#xff09;进行签名&#xff0c;用于表明开发者身份。   Android证书的生成是自助和免费的&#xff0c;不需要审批或付费。   可以使用JRE环境中的keyto…

【UML建模】部署图(Deployment Diagram)

1.概述 部署图是一种结构图&#xff0c;用于描述软件系统在不同计算机硬件或设备上的部署和配置情况&#xff0c;以图形化的方式展示系统中组件、节点和连接之间的物理部署关系。 通过部署图&#xff0c;可以清晰地了解系统的物理结构和部署方式&#xff0c;包括系统组件和节…

使用免费工具在 Windows 11/10/8/7 中扩展 C 盘的 3 种方法

越来越多的Windows 10笔记本电脑和台式机使用SSD作为系统盘&#xff0c;这对于提高计算机性能很有用&#xff0c;因为SSD的读写速度要快得多。但另一方面&#xff0c;SSD价格更高&#xff0c;因此比传统机械硬盘体积更小。当然C盘空间不足的可能性更大。在这种情况下&#xff0…

在Docker中安装和配置InfluxDB,设置SSL和密码保护

在Docker中安装和配置InfluxDB&#xff0c;设置SSL和密码保护 引言 InfluxDB是一个开源的时间序列数据库&#xff0c;常用于存储和查询大量时序数据。通过使用Docker&#xff0c;我们可以轻松地部署和管理InfluxDB容器&#xff0c;并配置SSL以及设置用户名和密码进行保护。本博…

45. 跳跃游戏 II(Java)

题目描述&#xff1a; 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到…

四种“栈溢出检测方法”实现分析(2种纯软件、一种纯硬件、一种软硬件结合)

1、两种纯软件的栈溢出检测方法 参考博客&#xff1a;《freeRTOS的栈溢出检测机制》&#xff1b; 2、纯硬件&#xff1a;使用栈限制寄存器 2.1、工作逻辑分析 前提条件&#xff1a;使用满减栈硬件上提供栈限制寄存器&#xff08;用SP_limit表示&#xff09;&#xff0c;可以…

如何将支持标准可观测性协议的中间件快速接入观测

前言 作为一名云原生工程师&#xff0c;如何将支持标准可观测性协议的中间件快速接入观测云呢&#xff1f;答案是只需要三步。 首先&#xff0c;需要确定您要观测的中间件类型。支持标准可观测性协议中间件可通过观测云的 DataKit 采集到中间件的关键指标。有些中间件自带可观…

数据库备份规范

备份方式 1、周期性例行备份 生产数据库例行备份统一使用定时任务备份&#xff0c;备份时间定时到业务低峰期。每天备份一次&#xff0c;保留7天的备份&#xff0c;超过7天的备份包括binlog上传到s3存储上。 2、线上数据库变更前备份。 分为自动变更和手动变更&#xff0c;遵…

【c++】入门3

引用 1.swap交换两个变量值的时候可以用引用 2.例题中通过前序遍历数组构建二叉树&#xff0c;可以用引用传别名. #include <stdio.h> #include <stdlib.h> typedef struct BinaryTreeNode {char data;struct BinaryTreeNode* left;struct BinaryTreeNode* right; …

八、Lua脚本详解—— 超详细操作演示!

八、Lua脚本详解 —— 超详细操作演示&#xff01; 八、Lua脚本详解8.1 Lua 简介8.2 Linux 系统的Lua8.2.1 Lua 下载8.2.2 Lua 安装8.2.3 Hello World 8.3 Win 系统的Lua8.4 Lua 脚本基础8.4.1 注释8.4.2 数据类型8.4.3 标识符8.4.4 运算符8.4.5 函数8.4.6 流程控制语句8.4.7 循…

Java web项目openSession和getCurrentSession切换

一.openSession 在配置文件配置sessionFactory-hibernateProperties添加 <prop key"hibernate.current_session_context_class">thread</prop> 二 .getCurrentSession 第一步&#xff1a; 去掉配置&#xff1a; <prop key"hibernate.current…

MinIO 批处理框架添加了对过期时间的支持

您现在可以使用 MinIO 批处理框架执行 S3 删除操作&#xff0c;以通过单个 API 请求删除大量对象。借助 MinIO 批处理框架&#xff0c;可以快速轻松地在 MinIO 部署中执行重复或批量操作&#xff0c;例如批量复制和批量密钥轮换。MinIO 批处理框架处理所有手动工作&#xff0c;…

【大数据进阶第二阶段之Hadoop学习笔记】Hadoop 运行环境搭建

【大数据进阶第二阶段之Hadoop学习笔记】Hadoop 概述-CSDN博客 【大数据进阶第二阶段之Hadoop学习笔记】Hadoop 运行环境搭建-CSDN博客 【大数据进阶第二阶段之Hadoop学习笔记】Hadoop 运行模式-CSDN博客 1、模板虚拟机环境准备 1.1、 hadoop100 虚拟机配置要求如下 &…

小兔鲜儿 uniapp - 项目打包

目录 微信小程序端​ 核心步骤​ 步骤图示​ 条件编译​ 条件编译语法​ 打包为 H5 端​ 核心步骤​ 路由基础路径​ 打包为 APP 端​ 微信小程序端​ 把当前 uni-app 项目打包成微信小程序端&#xff0c;并发布上线。 核心步骤​ 运行打包命令 pnpm build:mp-weix…

Day13- 二叉树part02

一、二叉树的层序遍历 题目一&#xff1a;102. 二叉树的层序遍历 102. 二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 实现二叉树的层序遍历通常使用队列&#xf…

Java 如何实现微信支付功能代码示例

微信支付是由中国的腾讯公司推出的一种移动支付方式。它允许用户通过在微信应用中绑定银行卡或其他支付方式来进行交易&#xff0c;包括在线购物、转账、付款码支付等。微信支付的特点包括便捷、安全、快速和全面&#xff0c;使用户可以随时随地完成交易。用户可以通过扫描商家…