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

Halcon 多相机统一坐标系

小杨说事-基于Halcon的多相机坐标系统一原理个人理解_多相机标定统一坐标系-CSDN博客

一、概述

最近在搞多相机标定等的相关问题,对于很大的场景,单个相机的视野是不够的,就必须要统一到一个坐标系下,因此我也用了4个相机,如图;

 二、流程

准备:

标定板

这个标定板是比较特殊的,由于我设定的是4个相机,那么我需要在搞标定板的时候需要在每个相机的视野范围内进行,所以如下:

就像上面,红色的是我的标定板,在每个标定板的四角区域有各自有一个mark 点。我让我同事在solidworks上画了一个A4纸一样大小的标定板,同时我让我同事那cad 的坐标全部都给到我(物理距离)

思路:

1、放置标定板

将标定板放到统一高度,而且保证每个相机都能在自己的视野里面看到标定板中各自的mark点,最好是处在视野的中央

2、确定一个主相机

就是要统一坐标系,首先 要定好要把其他的坐标系统一到那个坐标系找那个。默认是第一个相机

3、检查图像中的位置

使用图像预处理找出对应的mark点,是按照顺序的,在计算的时候一定要和cad 的那个数据一一对应

4、辅助相机到主相机的变换矩阵

  这一步是最重要的一步,具体步骤如下:

  a、计算主相机中像素-》物理坐标的矩阵 HomMat2DMainMachine2Image

  b、计算辅助相机中像素-》物理坐标的矩阵 HomMat2DOtherMachine2Image

  c、计算其他相机到主相机的坐标矩阵

5、重复第4步

三、代码

代码用上面博主的,我做的cad 还没有做完

First_Source_X:=[111.8119,258.1092 ,111.8119 ,258.1092]
First_Source_Y:=[-93.0713,-93.0713,-209.3316,-209.3316]
First_ImageX:=[0 ,146.2973,0 ,146.2973 ]
First_ImageY:=[0 ,0 ,-116.2603 ,-116.2603 ]vector_to_hom_mat2d(First_Source_X, First_Source_Y, First_ImageX, First_ImageY, HomMat2DMainMachine2Image)
*test
affine_trans_point_2d (HomMat2DMainMachine2Image, 258.1092,-93.0713, Qx, Qy)Second_Source_X:=[-186.9897,-60.2925 ,-245.1198,-118.4226]
Second_Source_Y:=[-128.7077,-201.8564,-229.3921,-302.5408]
Second_Image_X:=[1137.1291,1283.4262,1137.1291,1283.42641]
Second_Image_Y:=[0,0,-116.2603,-116.2603 ]vector_to_hom_mat2d(Second_Source_X, Second_Source_Y, Second_Image_X, Second_Image_Y, HomMat2DOtherMachine2Image)
*test
affine_trans_point_2d (HomMat2DOtherMachine2Image, -60.2925,-201.8564, Qx2, Qy2)*计算主相机 像素-》Machine
hom_mat2d_invert(HomMat2DMainMachine2Image,HomMat2DMainImage2Machine)*计算其他坐标系中点在主相机坐标系下的位置
hom_mat2d_compose(HomMat2DMainImage2Machine,HomMat2DOtherMachine2Image,HomMat2DOtherimage2Image)tuple_cos (rad(30), Cos)//0.84
tuple_sin (rad(30), Sin)//0.5

 四、标定板矩阵

有个问题就是Halcon 双相机标定与拼图(二)-CSDN博客 中最后

 计算:

*计算的是物理坐标的
vector_to_hom_mat2d (Second_Source_X, Second_Source_Y,First_Source_X, First_Source_Y, HomMat2DCam1ToCam1)
* 测试
affine_trans_point_2d (HomMat2DCam1ToCam1, -186.9897,-128.7077, Qx1, Qy1)
tuple_cos (rad(-30), Cos2)//0.86
tuple_sin (rad(-30), Sin2)//0.5
First_Source_X:=[111.8119,258.1092 ,111.8119 ,258.1092]
First_Source_Y:=[-93.0713,-93.0713,-209.3316,-209.3316]
First_ImageX:=[0 ,146.2973,0 ,146.2973 ]
First_ImageY:=[0 ,0 ,-116.2603 ,-116.2603 ]vector_to_hom_mat2d(First_Source_X, First_Source_Y, First_ImageX, First_ImageY, HomMat2DMainMachine2Image)
*test
affine_trans_point_2d (HomMat2DMainMachine2Image, 258.1092,-93.0713, Qx, Qy)Second_Source_X:=[-186.9897,-60.2925 ,-245.1198,-118.4226]
Second_Source_Y:=[-128.7077,-201.8564,-229.3921,-302.5408]
Second_Image_X:=[1137.1291,1283.4262,1137.1291,1283.42641]
Second_Image_Y:=[0,0,-116.2603,-116.2603 ]vector_to_hom_mat2d(Second_Source_X, Second_Source_Y, Second_Image_X, Second_Image_Y, HomMat2DOtherMachine2Image)
*test
affine_trans_point_2d (HomMat2DOtherMachine2Image, -60.2925,-201.8564, Qx2, Qy2)*计算主相机 像素-》Machine
hom_mat2d_invert(HomMat2DMainMachine2Image,HomMat2DMainImage2Machine)*计算其他坐标系中点在主相机坐标系下的位置
hom_mat2d_compose(HomMat2DMainImage2Machine,HomMat2DOtherMachine2Image,HomMat2DOtherimage2Image)tuple_cos (rad(30), Cos)//0.84
tuple_sin (rad(30), Sin)//0.5*测试第二个相机在主相机中的位置
affine_trans_point_2d (HomMat2DOtherimage2Image, 0, 0, Qx1, Qy1)*计算的是物理坐标的
vector_to_hom_mat2d (Second_Source_X, Second_Source_Y,First_Source_X, First_Source_Y, HomMat2DCam1ToCam1)
* 测试
affine_trans_point_2d (HomMat2DCam1ToCam1, -186.9897,-128.7077, Qx1, Qy1)
tuple_cos (rad(-30), Cos2)//0.86
tuple_sin (rad(-30), Sin2)//0.5

结果如下: 

我买的相机、支架、镜头等都还没有到,等到了更新全部数据,采用cad 打印标定板

相关文章:

Halcon 多相机统一坐标系

小杨说事-基于Halcon的多相机坐标系统一原理个人理解_多相机标定统一坐标系-CSDN博客 一、概述 最近在搞多相机标定等的相关问题,对于很大的场景,单个相机的视野是不够的,就必须要统一到一个坐标系下,因此我也用了4个相机&#…...

Apache Kylin:大数据分析从入门到精通

一、Kylin简介 Apache Kylin是一个分布式数据分析引擎,专为处理海量数据设计,能够在极短时间内对超大规模数据集进行OLAP(Online Analytical Processing)分析。Kylin通过预计算和高效的查询机制,为用户提供秒级的查询响应时间,支持与Hadoop、Hive、HBase等大数据平台无缝…...

SQL Server 2016导入.bak文件到数据库里面步骤

1、打开SSMS管理器 选择数据库 右键 然后点击还原数据库。 2、选择设备 然后点击三个点 找到本地bak文件,然后点击确定 3、点击确定,会自动弹出来一个成功的提示。...

WPF Frame 简单页面切换示例

原理比较简单&#xff0c;但是有个坑&#xff0c;为了使界面能够正确更新&#xff0c;记得使用 INotifyPropertyChanged 接口来实现属性更改通知。 <Window x:Class"PageTest.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation&…...

kafka-生产者监听器(SpringBoot整合Kafka)

文章目录 1、生产者监听器1.1、创建生产者监听器1.2、创建生产者拦截器1.3、发送消息测试1.4、使用Java代码创建主题分区副本1.5、application.yml配置----v1版1.6、屏蔽 kafka debug 日志 logback.xml1.7、引入spring-kafka依赖1.8、控制台日志 1、生产者监听器 1.1、创建生产…...

3D感知视觉表示与模型分析:深入探究视觉基础模型的三维意识

在深度学习与大规模预训练的推动下&#xff0c;视觉基础模型展现出了令人印象深刻的泛化能力。这些模型不仅能够对任意图像进行分类、分割和生成&#xff0c;而且它们的中间表示对于其他视觉任务&#xff0c;如检测和分割&#xff0c;同样具有强大的零样本能力。然而&#xff0…...

VS2019+QT5.15调用动态库dll带有命名空间

VS2019QT5.15调用动态库dll带有命名空间 vs创建动态库 参考&#xff1a; QT调用vs2019生成的c动态库-CSDN博客 demo的dll头文件&#xff1a; // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLL3_EXPORTS // 符号…...

助力草莓智能自动化采摘,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建果园种植采摘场景下草莓成熟度智能检测识别系统

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经渗透到我们生活的方方面面&#xff0c;从智能家居到自动驾驶&#xff0c;再到医疗健康&#xff0c;其影响力无处不在。然而&#xff0c;当我们把目光转向中国的农业领域时&#xff0c;一个令人惊讶的…...

C++中的生成器模式

目录 生成器模式&#xff08;Builder Pattern&#xff09; 实际应用 构建一辆汽车 构建一台计算机 构建一个房子 总结 生成器模式&#xff08;Builder Pattern&#xff09; 生成器模式是一种创建型设计模式&#xff0c;它允许你分步骤创建复杂对象。与其他创建型模式不同…...

基于python的PDF文件解析器汇总

基于python的PDF文件解析器汇总 大多数已发表的科学文献目前以 PDF 格式存在&#xff0c;这是一种轻量级、普遍的文件格式&#xff0c;能够保持一致的文本布局和格式。对于人类读者而言&#xff0c; PDF格式的文件内容展示整洁且一致的布局有助于阅读&#xff0c;可以很容易地…...

C++多线程同步总结

C多线程同步总结 关于C多线程同步 一、C11规范下的线程库 1、C11 线程库的基本用法&#xff1a;创建线程、分离线程 #include<iostream> #include<thread> #include<windows.h> using namespace std; void threadProc() {cout<<"this is in t…...

【机器学习】基于CNN-RNN模型的验证码图片识别

1. 引言 1.1. OCR技术研究的背景 1.1.1. OCR技术能够提升互联网体验 随着互联网应用的广泛普及&#xff0c;用户在日常操作中频繁遇到需要输入验证码的场景&#xff0c;无论是在登录、注册、支付还是其他敏感操作中&#xff0c;验证码都扮演着重要角色来确保安全性。然而&am…...

一文读懂Samtec分离式线缆组件选型 | 快速攻略

【摘要/前言】 2023年&#xff0c;全球线缆组件市场规模大致在2100多亿美元。汽车和电信行业是线缆组件最大的两个市场&#xff0c;中国和北美是最大的两个制造地区。有趣的是&#xff0c;特定应用&#xff08;即定制&#xff09;和矩形组件是两个最大的产品组。 【Samtec产品…...

批量申请SSL证书如何做到既方便成本又最低

假如您手头拥有1千个域名&#xff0c;并且打算为每一个域名搭建网站&#xff0c;那么在当前的网络环境下&#xff0c;您必须确保这些网站通过https的方式提供服务。这意味着&#xff0c;您将为每一个域名申请SSL证书&#xff0c;以确保网站数据传输的安全性和可信度。那么&…...

Python 设计模式(创建型)

文章目录 抽象工厂模式场景示例 单例模式场景实现方式 工厂方法模式场景示例 简单工厂模式场景示例 建造者模式场景示例 原型模式场景示例 抽象工厂模式 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种将一组相关…...

PyTorch 索引与切片-Tensor基本操作

以如下 tensor a 为例&#xff0c;展示常用的 indxing, slicing 及其他高阶操作 >>> a torch.rand(4,3,28,28) >>> a.shape torch.Size([4, 3, 28, 28])Indexing: 使用索引获取目标对象&#xff0c;[x,x,x,....] >>> a[0].shape torch.Size([3, 2…...

深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手

我们小时候都玩过乐高积木。通过堆砌各种颜色和形状的积木&#xff0c;我们可以构建出城堡、飞机、甚至整个城市。现在&#xff0c;想象一下如果有一个数字世界的乐高&#xff0c;我们可以用这样的“积木”来构建智能程序&#xff0c;这些程序能够阅读、理解和撰写文本&#xf…...

scss是什么安装使⽤的步骤

当谈到SCSS时&#xff0c;我们首先需要了解它是什么。SCSS&#xff0c;也称为Sassy CSS&#xff0c;是Sass&#xff08;Syntactically Awesome Stylesheets&#xff09;的一种语法&#xff0c;它是CSS的预处理器&#xff0c;允许你使用变量、嵌套规则、混合&#xff08;mixin&a…...

Pspark从hive读数据写到Pgsql数据库

前提条件 要使用PySpark从Hive读取数据并写入到PostgreSQL数据库&#xff0c;你需要确保以下几点&#xff1a; 你的PySpark环境已经配置好&#xff0c;并且能够连接到你的Hive数据。 PostgreSQL JDBC驱动程序已经添加到你的PySpark环境中。 你已经在PostgreSQL中创建好了相应…...

Pixi.js学习 (六)数组

目录 前言 一、数组 1.1 定义数组 1.2 数组存取与删除 1.3 使用数组统一操作敌机 二、实战 例题一&#xff1a;使用数组统一操作敌机 例题一代码&#xff1a; 总结 前言 为了提高作者的代码编辑水品&#xff0c;作者在使用博客的时候使用的集成工具为 HBuilderX。 下文所有截…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...