【机械视觉】Halcon—【六、交集并集差集和仿射变换】

【机械视觉】Halcon—【六、交集并集差集和仿射变换】

目录

【机械视觉】Halcon—【六、交集并集差集和仿射变换】

介绍

交集并集差集介绍:

1. 交集(Intersection)

2. 并集(Union)

3. 差集(Difference)

交集并集差集实例

仿射变换

介绍

例子:

旋转变换例子:

平移、缩放、斜切变换例子

Vector_angle_to_rigid-既可以旋转-也可以实现平移

多次变换实例


介绍

在图像处理和计算机视觉领域,交集、并集和差集是基本的集合操作,它们在图像分析中尤为重要,特别是在图像分割、特征提取和对象识别等任务中。Halcon(现为MVTEC Vision++)是一个强大的机器视觉软件,提供了丰富的图像处理函数,可以用来执行这些集合操作。

交集并集差集介绍:

1. 交集(Intersection)

交集操作是指两个图像或图像区域的重叠部分。在Halcon中,可以使用intersection函数来获取两个区域的交集。

示例代码:

read_image(Image1, 'path_to_image1')read_image(Image2, 'path_to_image2')intersection(Image1, Image2, ImageIntersection)

这里,ImageIntersection将包含Image1Image2的交集部分。

2. 并集(Union)

并集操作是指两个图像或图像区域的合并部分,包括它们重叠的部分。在Halcon中,可以使用union1union2函数来获取两个区域的并集。

示例代码:

read_image(Image1, 'path_to_image1')read_image(Image2, 'path_to_image2')union1(Image1, Image2, ImageUnion)

或者使用union2

union2(Image1, Image2, ImageUnion)

这里,ImageUnion将包含Image1Image2的并集部分。

3. 差集(Difference)

差集操作是指从一个图像或图像区域中减去另一个图像或图像区域的部分。在Halcon中,可以使用difference函数来获取差集。

示例代码:

read_image(Image1, 'path_to_image1')read_image(Image2, 'path_to_image2')difference(Image1, Image2, ImageDifference)

这里,ImageDifference将包含在Image1中但不在Image2中的部分。

交集并集差集实例

dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Image, 'clip')
threshold (Image, Region, 0, 128)*connection算子是Halcon中用于区域连通性分析的核心算子,它能够:* 将输入区域分割成互不连通的独立区域* 识别并标记图像中所有的连通组件* 为后续的形状选择和特征分析提供基础
connection (Region, ConnectedRegions)* 合并区域
union1 (ConnectedRegions, RegionUnion)gen_circle (Circle, 200, 200, 100.5)
gen_circle (Circle1, 300, 200, 90.5)* 交集
intersection (Circle, Circle1, RegionIntersection)* 反选
complement (Circle, RegionComplement)* 差集
difference (Circle, Circle1, RegionDifference)dev_clear_window ()
dev_display (RegionComplement)

仿射变换

介绍

在Halcon中,仿射变换是一种常用的图像处理技术,用于对图像进行缩放、旋转、平移、斜切等操作。Halcon是一个强大的机器视觉软件库,它提供了丰富的函数来执行各种图像处理任务,包括仿射变换。

例子:

仿射变换分为三步: 初始化矩阵--->旋转变换---->应用

* 第一步先创建一个初始化的矩阵(齐次矩阵)
hom_mat2d_identity (HomMat2DIdentity)
* 第二步旋转变换
* 参数1 原始的矩阵
* 参数2 旋转的弧度数 rad(90)
* 参数3 变换的中心点
* 参数4 生成的旋转的变换矩阵
hom_mat2d_rotate (HomMat2DIdentity, rad(30), Row, Column, HomMat2DRotate)* 第三步 旋转矩阵应用到图片上
* 参数1 应用到的图片
* 参数2 输出图片
* 参数3 要应用的旋转矩阵
* 参数4 边界的处理方式* 'constant' 填充空白区域为灰色的
* 参数5 是否自动适应变换结果* 'false' 输出图和输入图像尺寸一样* 'true' 自动调整尺寸以显示完整的变换结果
affine_trans_image (Image, ImageAffineTrans, HomMat2DRotate, 'constant', 'false')

旋转变换例子:

* 仿射变换就是在图形中的变换包括: 平移、缩放、旋转、斜切(将斜体字导正)
dev_clear_window ()
read_image (Image, 'C:/Users/86152/Desktop/HALCON/一、课件/2025.5.29-/yuanx.jpg')* 获取图像中心点
area_center (Image, Area, Row, Column)* 第一步先创建一个初始化的矩阵(齐次矩阵)
hom_mat2d_identity (HomMat2DIdentity)
* 第二步旋转变换
* 参数1 原始的矩阵
* 参数2 旋转的弧度数 rad(90)
* 参数3 变换的中心点
* 参数4 生成的旋转的变换矩阵
hom_mat2d_rotate (HomMat2DIdentity, rad(30), Row, Column, HomMat2DRotate)* 第三步 旋转矩阵应用到图片上
* 参数1 应用到的图片
* 参数2 输出图片
* 参数3 要应用的旋转矩阵
* 参数4 边界的处理方式* 'constant' 填充空白区域为灰色的
* 参数5 是否自动适应变换结果* 'false' 输出图和输入图像尺寸一样* 'true' 自动调整尺寸以显示完整的变换结果
affine_trans_image (Image, ImageAffineTrans, HomMat2DRotate, 'constant', 'false')

平移、缩放、斜切变换例子

dev_clear_window ()
read_image (Image, 'C:/Users/86152/Desktop/HALCON/一、课件/2025.5.29-/yuanx.jpg')* 1 创建一个初始化矩阵
hom_mat2d_identity (HomMat2DIdentity)* 2 创建一个平移矩阵
* 参数2 竖直方向移动
* 参数3 水平移动
*hom_mat2d_translate (HomMat2DIdentity, 64, 0, HomMat2DTranslate)* 3 应用平移矩阵
*affine_trans_image (Image, ImageAffineTrans, HomMat2DTranslate, 'constant', 'false')* -------------------------------------------
* 缩放变换
* 参数2、3  水平和竖直方向缩放的倍数
* 参数4、5  变换的中心点
*hom_mat2d_scale (HomMat2DIdentity, 2, 2, 0, 0, HomMat2DScale)
*affine_trans_image (Image, ImageAffineTrans1, HomMat2DScale, 'constant', 'false')*-------------------------------------------
* 斜切变换
hom_mat2d_slant (HomMat2DIdentity, rad(20), 'x', 0, 0, HomMat2DSlant)affine_trans_image (Image, ImageAffineTrans, HomMat2DSlant, 'constant', 'false')

Vector_angle_to_rigid-既可以旋转-也可以实现平移

dev_clear_window ()
read_image (Image, 'C:/Users/86152/Desktop/HALCON/一、课件/2025.5.29-/车牌.png')
* 获取图片中心坐标
area_center (Image, Area, Row, Column)
* 获取角度
orientation_region (Image, Phi)* 求平移或旋转矩阵
* 参数1、2  起始点的变换中心
* 参数3  原始图片旋转角度
* 参数4、5  变换到的位置
* 参数6 变换之后的角度
vector_angle_to_rigid (Row,Column,Phi ,Row ,Column ,rad(190) , HomMat2D)
affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')

多次变换实例

read_image (Image, 'C:/Users/86152/Desktop/HALCON/一、课件/2025.5.29-/三角.png')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)threshold (Image, Region, 128, 255)
connection (Region, ConnectedRegions)
* 合并两个区域
*union1 (ConnectedRegions, RegionUnion)* 获取连通区域的中心位置
area_center (Region, Area, Row, Column)
* 如果使用vector_angle_to_rigid算子 需要先获取初始角
*orientation_region (Region, Phi)* 生成一个初始化矩阵
hom_mat2d_identity (HomMat2DIdentity)
* 先做平移变换
hom_mat2d_translate (HomMat2DIdentity, 200, 100, HomMat2DTranslate)
affine_trans_image (Image, ImageAffineTrans_one, HomMat2DTranslate, 'constant', 'false')
dev_display (ImageAffineTrans_one)* 再次平移
hom_mat2d_translate (HomMat2DIdentity, 0, 270, HomMat2DTranslate1)
affine_trans_image (Image, ImageAffineTrans_two, HomMat2DTranslate1, 'constant', 'false')
dev_display (ImageAffineTrans_two)a:=Row+200
* 在上一次基础之上再做变换
hom_mat2d_rotate (HomMat2DIdentity, rad(180), 87,350, HomMat2DRotate)
affine_trans_image (ImageAffineTrans_two, ImageAffineTrans_three, HomMat2DRotate, 'constant', 'false')
dev_display (ImageAffineTrans_three)

 

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

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

相关文章

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.6 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.6 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图&#xff0c;等值线图。 dataframe <-data.frame…

剑指offer15_数值的整数次方

数值的整数次方 实现函数 double Power(double base, int exponent) 题目要求 计算 base exponent \text{base}^{\text{exponent}} baseexponent&#xff1a; 不得使用库函数不需要考虑大数问题&#xff0c;绝对误差不超过 10 − 2 10^{-2} 10−2不会出现底数和指数同为 0…

【Typst】1.Typst概述

概述 Typst是一种用于排版文档的标记语言&#xff0c;可以用于排版各种精美的论文、文章、书籍、报告和作业等。它是LaTex的精神续作&#xff0c;但是运行环境和编译速度都要更简单、更快捷。 它设计了一种脚本结合简单的标记语法实现复杂的排版效果。并且支持模板创建、文件…

[Java恶补day14] 56. 合并区间

以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&#xff1a;intervals [[1,3…

DiskGenius专业版v6.0.1.1645:分区管理、数据恢复、备份还原,一应俱全!

各位小伙伴&#xff0c;大家好&#xff01;今天阿灿给大家带来一款超好用的分区工具&#xff0c;DiskGenius专业版。这款工具堪称电脑管理界的“瑞士军刀”&#xff0c;功能强大&#xff0c;现在出了新版本v6.0.1.1645&#xff0c;简繁中文单文件便携版&#xff0c;使用超方便。…

azure web app创建分步指南系列之二

为注册表授权托管标识 你创建的托管标识尚未获得从容器注册表中提取数据的授权。在此步骤中,你将启用授权。 返回容器注册表的管理页面: 在左侧导航菜单中,选择“访问控制 (IAM)”。选择“添加角色分配”。此屏幕截图显示了如何为容器注册表启用添加角色分配。在角色列表中…

STM32 AD单通道与多通道实战指南

文章目录 AD单通道&#xff08;实验&#xff09;有关配置的库函数AD单通道部分主要代码 AD多通道实现多通道采集实现思路探讨单次转换非扫描模式实现AD多通道AD多通道部分代码 学习建议&#xff1a;推荐搭配 江协科技 AD单通道 AD多通道一起食用&#xff01;&#xff01;&#…

沟通频率不合适,如何找到平衡点

在团队协作中&#xff0c;沟通频率过高、信息干扰、节奏错位常常导致效率下降与成员倦怠。PMI研究指出&#xff0c;沟通不当是75%项目延误的根源&#xff0c;其中沟通频率失衡是关键变量之一。要解决这一问题&#xff0c;关键在于设定节奏、分层沟通、制定协议。其中&#xff0…

EC2 实例详解:AWS 的云服务器怎么玩?☁️

弹性计算、灵活计费、全球可用&#xff0c;AWS EC2 全攻略 在 AWS 生态中&#xff0c;有两个核心服务是非常关键的&#xff0c;一个是 S3&#xff08;对象存储&#xff09;&#xff0c;另一个就是我们今天的主角 —— Amazon EC2&#xff08;Elastic Compute Cloud&#xff09…

lvs-keepalived高可用群集

目录 1.Keepalived 概述及安装 1.1 Keepalived 的热备方式 1.2 keepalived的安装与服务控制 &#xff08;1&#xff09;安装keep alived (2)控制 Keepalived 服务DNF 安装 keepalived 后,执行以下命令将keepalived 服务设置为开机启动。 2.使用 Keepalived 实现双机热备 …

车载诊断架构SOVD --- 车辆发现与建连

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

BUUCTF之[ACTF2020 新生赛]BackupFile

打开环境就一句话 找出源文件! 结合题目名字&#xff1a;BackupFile 先用dirsearct扫描网站文件 发现一个index.php.bak ,拼接url下载 打开发现php代码 <?php include_once "flag.php";if(isset($_GET[key])) {$key $_GET[key];if(!is_numeric($key)) {exit…

Rag技术----项目博客(六)

RAG 定义&#xff1a;检索增强生成&#xff08;Retrieval Augmented Generation&#xff09;&#xff0c;简称 RAG&#xff0c;已经成为当前最火热的LLM应用方案。 目的&#xff1a;通过提供相关领域数据库通过问题检索信息&#xff0c;将相关信息合并到Prompt中&#xff0c;…

设计模式——外观设计模式(结构型)

摘要 本文介绍了外观设计模式&#xff0c;它是一种结构型设计模式&#xff0c;通过引入一个外观类来封装复杂子系统的调用细节&#xff0c;对外提供简单统一的接口。文中通过生活类比、关键角色介绍、使用场景分析以及结构说明等方面对这一模式进行了全面阐述&#xff0c;还涉…

LabVIEW磁悬浮轴承传感器故障识别

针对工业高端装备中主动磁悬浮轴承&#xff08;AMB&#xff09;的位移传感器故障检测需求&#xff0c;基于 LabVIEW 平台构建了一套高精度故障识别系统。通过集成品牌硬件与 LabVIEW 的信号处理能力&#xff0c;实现了传感器探头故障的实时监测与精准定位&#xff0c;解决了传统…

集成学习三种框架

集成学习通过组合多个弱学习器构建强学习器&#xff0c;常见框架包括Bagging&#xff08;装袋&#xff09;、Boosting&#xff08;提升&#xff09; 和Stacking&#xff08;堆叠&#xff09; 一、Bagging&#xff08;自助装袋法&#xff09; 核心思想 从原始数据中通过有放回…

PCI DSS培训记录

22日上午: 整体PCI DSS 结构分享VISA分享全球欺诈风险动态 信用卡被偷枚举攻击依然是最为主要的安全威胁之一(枚举验证码),增加3DS验证防护勒索软件和信息泄漏攻击欺诈分子对AI技术的兴趣日益增加,如换脸软件过验证基于NFC技术利用非接交易进行欺诈成为新的攻击手段,如NF…

数据安全中心是什么?如何做好数据安全管理?

目录 一、数据安全中心是什么 &#xff08;一&#xff09;数据安全中心的定义 &#xff08;二&#xff09;数据安全中心的功能 1. 数据分类分级 2. 访问控制 3. 数据加密 4. 安全审计 5. 威胁检测与响应 二、数据安全管理的重要性 三、如何借助数据安全中心做好数据安…

黑马Java面试笔记之 微服务篇(业务)

一. 限流 你们项目中有没有做过限流?怎么做的? 为什么要限流呢? 一是并发的确大(突发流量) 二是防止用户恶意刷接口 限流的实现方式: Tomcat:可以设置最大连接数 可以通过maxThreads设置最大Tomcat连接数,实现限流,但是适用于单体架构 Nginx:漏桶算法网关,令牌桶算法自定…

PostgreSQL的扩展 passwordcheck

PostgreSQL的扩展 passwordcheck passwordcheck 是 PostgreSQL 内置的一个密码复杂度检查扩展&#xff0c;用于强制实施基本的密码策略。 一、扩展概述 功能&#xff1a;在创建或修改用户密码时检查密码复杂度目的&#xff1a;防止使用过于简单的密码适用版本&#xff1a;Po…