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

news2025/6/1 10:03:53

【机械视觉】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.coloradmin.cn/o/2392639.html

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

相关文章

深度学习核心网络架构详解(续):从 Transformers 到生成模型

在上一篇文章中,我们详细介绍了卷积神经网络 (CNN)、循环神经网络 (RNN) 及其变体 LSTM 和 GRU。本文将继续探讨其他必须掌握的深度学习网络架构,包括 Transformers、生成对抗网络 (GAN)、自编码器 (Autoencoder) 以及强化学习基础。我们将深入讲解这些技…

AI智能混剪视频大模型开发方案:从文字到视频的自动化生成·优雅草卓伊凡

AI智能混剪视频大模型开发方案:从文字到视频的自动化生成优雅草卓伊凡 引言:AI视频创作的未来已来 近年来,随着多模态大模型(如Stable Diffusion、Sora、GPT-4)的爆发式发展,AI已经能够实现从文字生成图像…

allWebPlugin中间件VLC专用版之截图功能介绍

背景 VLC控件原有接口具有视频截图方法,即video对象的takeSnapshot方法,但是该方法返回的是一个IPicture对象,不适合在谷歌等现代浏览器上使用。因此,本人增加一个新的视频截图方法takeSnapshot2B64方法,直接将视频截图…

Scratch节日 | 六一儿童节

六一儿童节到啦!快来体验这款超简单又超好玩的 六一儿童节 小游戏吧!只需要一只鼠标,就能尽情释放你的创意,绘出属于你自己的缤纷世界! 🎮 玩法介绍 鼠标滑动:在屏幕上随意滑动鼠标&#xff0c…

深度解析:跨学科论文 +“概念迁移表” 模板写作全流程

跨学科论文速通!融合“概念迁移表”的写作导航模板 你的论文是否曾被导师皱眉评价为“四不像”?不同学科的术语在稿纸上打架,核心逻辑若隐若现? 别让心血沦为学术混搭的牺牲品。一张精心设计的 概念迁移表,能将两个看…

深度剖析Node.js的原理及事件方式

早些年就接触过Node.js,当时对于这个连接前后端框架就感到很特别。尤其是以独特的异步阻塞特性,重塑了了服务器端编程的范式。后来陆陆续续做了不少项目,通过实践对它或多或少增强了不少理解。今天,我试着将从将从原理层剖析其运行…

VScode-使用技巧-持续更新

一、Visual Studio Code - MACOS版本 复制当前行 shiftoption方向键⬇️ 同时复制多行 shiftoption 批量替换换行 在查找和替换面板中,你会看到一个 .∗ 图标(表示启用正则表达式)。确保这个选项被选中,因为我们需要使用正则…

主流 AI IDE 之一的 Windsurf 使用入门

一、Windsurf 的常见入门界面 以上是本次展示Windsurf版本信息。 1.1 个人配置中心 1.2 AI 助手快捷设置 1.3 使用额度查看页面 1.4 智能助手 Windsurf 编辑器中 AI 助手名称 :Cascade 。打开 Cascade 窗口,开始聊天就可以了。方框里有写和聊两种状态锁…

大数据量下的数据修复与回写Spark on Hive 的大数据量主键冲突排查:COUNT(DISTINCT) 的陷阱

背景与问题概述 这一周(2025-05-26-2026-05-30)我在搞数据拟合修复优化的任务,有大量的数据需要进行数据处理及回写,大概一个表一天一分区有五六千万数据,大约一百多列的字段。 具体是这样的我先取档案&#x…

历年南京理工大学计算机保研上机真题

2025南京理工大学计算机保研上机真题 2024南京理工大学计算机保研上机真题 2023南京理工大学计算机保研上机真题 在线测评链接:https://pgcode.cn/school 求阶乘 题目描述 给出一个数 n n n ( 1 ≤ n ≤ 13 ) (1 \leq n \leq 13) (1≤n≤13),求出它…

Web前端常用面试题,九年程序人生 工作总结,Web开发必看

前端编程,JavaScript 从无知到觉醒 做 Web 开发,离不开 HTML,CSS,JavaScript,尽管日常工作以后台开发为主,但接触的多了,慢慢地理解深入,从只会使用 JS 写函数,发展到使用…

Rk3568驱动开发_设备树点亮LED_11

代码&#xff1a; #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/slab.h> #include <linux/uaccess.h> #include <linux/io.h> #include <linux/cdev.h…

多功能文档处理工具推荐

软件介绍 今天为大家介绍一款功能强大的文档编辑工具坤Tools&#xff0c;这是一款在吾爱论坛广受好评的办公软件。 软件背景 坤Tools是由吾爱论坛用户分享的软件&#xff0c;在论坛软件榜单上长期位居前列&#xff0c;获得了用户的一致好评。 软件性质 这是一款完全离线、…

【目标检测】【ICCV 2021】条件式DETR实现快速训练收敛

Conditional DETR for Fast Training Convergence 条件式DETR实现快速训练收敛 代码链接 论文链接 摘要 最近提出的DETR方法将Transformer编码器-解码器架构应用于目标检测领域&#xff0c;并取得了显著性能。本文针对其训练收敛速度慢这一关键问题&#xff0c;提出了一种条…

【工作笔记】 WSL开启报错

【工作笔记】 WSL开启报错 时间&#xff1a;2025年5月30日16:50:42 1.现象 Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x80370114 Error: 0x80370114 ??????????????????Press any key to continue...

VMware使用时出现的问题,此文章会不断更新分享使用过程中会出现的问题

VMware使用时出现的问题&#xff0c;此文章会不断更新分享使用过程中会出现的问题 一、VMware安装后没有虚拟网卡&#xff0c;VMnet1&#xff0c;VMnet8显示黄色三角警告 此文章会不断更新&#xff0c;分享VMware使用过程中出现的问题 如果没找到你的问题可以私信我 一、VMware…

深入解析Kafka JVM堆内存:优化策略与监控实践

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…

【高级终端Termux】在安卓手机/平板上使用Termux 搭建 Debian 环境并运行 PC 级 Linux 应用教程(含安装WPS,VS Code)

Termux 搭建 Debian 环境并运行 PC 级 Linux 应用教程 一、前言 1. 背景 众所周知&#xff0c;最新搭载澎湃OS和鸿蒙OS的平板都内置了PC级WPS&#xff0c;办公效率直接拉满&#xff08;板子终于从“泡面盖”升级为“生产力”了&#xff09;。但问题来了&#xff1a;如果不是这…

高频面试--redis

Reids 1. 常见的数据结构&#xff08;string, list, hash, set, zset&#xff09; 答法模板&#xff1a; Redis 提供五种核心数据结构&#xff1a; String&#xff1a;最基本的类型&#xff0c;支持整数、自增、自减、位操作。 List&#xff1a;双端链表&#xff0c;支持消息…

CRMEB 单商户Java版 v2.3公测版发布,欢迎体验!

当商城管理后台一成不变时&#xff0c;你是否也有过换换风格的想法&#xff1f; 当商城流量激增时&#xff0c;你是否也希望随时观察服务器负载状况&#xff0c;确保系统稳定运行&#xff1f; CRMEB单商户Java版v2.3公测版发布&#xff0c;更新200管理后台页面、弹窗&#xf…