当前位置: 首页 > 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。 下文所有截…...

京东自动评价工具:3分钟解决购物评价难题的智能助手

京东自动评价工具&#xff1a;3分钟解决购物评价难题的智能助手 【免费下载链接】jd_AutoComment 自动评价,仅供交流学习之用 项目地址: https://gitcode.com/gh_mirrors/jd/jd_AutoComment 还在为购物后的评价烦恼吗&#xff1f;每次收到京东的"待评价"提醒&…...

Sunshine游戏串流服务器:打造你的个人云端游戏平台

Sunshine游戏串流服务器&#xff1a;打造你的个人云端游戏平台 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在任何设备上畅玩PC游戏&#xff1f;Sunshine游戏串流服务器是你…...

在株洲如何选择护脊透气的床垫?

引言在现代社会&#xff0c;随着生活节奏的加快和工作压力的增加&#xff0c;越来越多的人开始关注睡眠质量。而床垫作为影响睡眠质量的重要因素之一&#xff0c;其选择显得尤为重要。特别是对于需要护脊和透气功能的床垫&#xff0c;如何选择成为了一个关键问题。本文将结合德…...

避坑指南:SciencePlots安装后样式不生效?手把手教你排查Matplotlib的stylelib路径问题

科学绘图样式失效&#xff1f;彻底解决Matplotlib样式库路径配置难题 当你第一次尝试用SciencePlats的science样式美化科研图表时&#xff0c;却发现Python报出KeyError: science is not a valid style的错误提示——这种挫败感我深有体会。作为每天与数据可视化打交道的从业者…...

别再折腾Anaconda了!用PyCharm 2024.1自带工具5分钟搞定TensorFlow 2.15 + Keras 3环境

PyCharm 2024.1极简指南&#xff1a;5分钟无痛部署TensorFlow 2.15 Keras 3深度学习环境 深度学习环境配置曾是无数开发者的噩梦——直到PyCharm 2024.1彻底改变了游戏规则。最新版本集成的环境管理工具让TensorFlow和Keras的安装变得像点外卖一样简单&#xff0c;完全跳过了传…...

通过curl命令快速测试Taotoken提供的各类大模型API响应效果

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过curl命令快速测试Taotoken提供的各类大模型API响应效果 对于习惯命令行操作或需要在无SDK环境中验证集成的开发者而言&#xf…...

可编程逻辑器件(PLD/CPLD/FPGA)核心原理、选型指南与EDA设计实战

1. 项目概述&#xff1a;从怀旧到硬核&#xff0c;聊聊可编程逻辑的“前世今生”那天在网上闲逛&#xff0c;本想找点微马赛克艺术&#xff08;Micromosaic&#xff09;的制作视频&#xff0c;结果算法一个拐弯&#xff0c;把我带回了上世纪七八十年代的《大青蛙布偶秀》&#…...

Unity(十六)切换场景及鼠标相关

场景切换空间命名&#xff1a;using UnityEngine.SceneManagement;直接用代码切换场景有问题要把场景加入到场景列表之中SceneList哪个场景在前面&#xff0c;谁在运行时就会首先进入过时方法Application.LoadLevel()if (Input.GetKeyDown(KeyCode.Space)) {SceneManager.LoadS…...

靠谱的工程防火门公司推荐工程防火门

在工程行业摸爬滚打十几年&#xff0c;我见过太多因防火门翻车的项目&#xff1a;验收反复返工、产品用了两三年就变形卡死、超大门洞找不到厂家定制…… 这些看似鸡毛蒜皮的小事&#xff0c;一旦卡到消防验收节点上&#xff0c;轻则赔钱延期&#xff0c;重则被责令停工整改。今…...

OpenClaw到Hermes一键迁移:自动化配置转移与智能体升级实践

1. 项目概述&#xff1a;从 OpenClaw 到 Hermes 的平滑迁移方案如果你正在运行一个名为 OpenClaw 的智能体项目&#xff0c;并且最近听说了它的“继任者”或一个更强大的替代品 Hermes&#xff0c;那么你很可能正面临一个经典的工程难题&#xff1a;如何将现有的、已经配置好的…...