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 打印标定板

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

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

相关文章

人工智能ChatGPT的多种应用:提示词工程

简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中,沟通本来就是很重要的一门课程,沟通的过程中表达的越清晰,给到的信息越多,那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理,如果想要 …

推荐系统三十六式学习笔记:原理篇.矩阵分解10|那些在Netflix Prize中大放异彩的推荐算法

目录 缘起矩阵分解为什么要矩阵分解1 基础的SVD算法2 增加偏置信息3 增加历史行为4 考虑时间因素 总结 我们先前聊过推荐系统中的经典问题,其中有一类就是评分预测。平心而论,评分预测问题只是很典型,其实并不大众。毕竟在实际的应用中&#…

最新情侣飞行棋高阶羞羞版,解锁私密版情侣小游戏,文末有福利!

今天要跟大家聊聊一种特别有意思的游戏——情侣飞行棋羞羞版。别急着脸红,这可是专为情侣设计的游戏,让你们在轻松愉快的氛围中,增进了解,加深感情。 谈恋爱,不就是两个人在一起,做些有趣的事情吗&#xf…

Opus从入门到精通(七)Opus编码基础之认识声音

Opus从入门到精通(七)Opus编码基础之认识声音 前面我们分析完Opus的编解码api使用,封装原理等,接下来我们准备分析Opus编码原理.Opus编码是一个复杂的工作,我们需要做一些基本铺垫,包括认识声音,压缩编码基础. 认识音频有助于我们了解音频特征,不仅对语音有助于我们理解编码技…

2021年9月电子学会青少年软件编程 中小学生Python编程等级考试三级真题解析(判断题)

2021年9月Python编程等级考试三级真题解析 判断题(共10题,每题2分,共20分) 26、readline()执行结果为字符串,readlines()执行结果为列表 答案:对 考点分析:考查文件读操作,readli…

【leetcode--同构字符串】

要求:判断两个字符串的形式是不是一致,即是不是AABC或者ABBBCC这种。 trick:使用set()结合zip()。 set()用法:用于创建一个不包含重复元素的集合 zip&#…

环保绩效评级:ABCD四个等级,你的企业处于哪个水平?

在当下社会,环保问题越来越受到人们的关注和重视。企业作为经济活动的重要参与者,其环保绩效评级直接关系到环境保护的成效。朗观视觉将详细解析环保绩效评级的ABCD四等级,帮助读者了解不同等级的特点和评判标准,进而引导企业提高…

大模型扫盲系列——初识大模型

本文将从大模型的原理、训练过程、prompt和相关应用介绍等方面进行分析,帮助读者初步了解大模型。 近年来,随着计算机技术和大数据的快速发展,深度学习在各个领域取得了显著的成果。为了提高模型的性能,研究者们不断尝试增加模型…

MySQL损坏,使用data恢复数据

MySQL损坏,重装MySQL使用data文件恢复数据库 1.清空相关注册表(清空安装残留)2.下载合适MySQL版本(与损坏数据库版本相同)3.数据恢复4.Windows server MySQL备份bat5.设置Windows定时执行 # 初始化安装 mysqld -install# 查看数据初始化密码 mysqld --initialize --…

工业 UI 风格,展现独特魅力

工业 UI 风格,展现独特魅力

Mysql之不使用部署在k8s集群的Mysql而是选择单独部署的Mysql的原因

测试准备: 线程组:并发数100,持续时间2min 两个请求:使用k8s集群中的mysql的wordpress对应端口30011 使用单独部署的mysql的wordpress的对应端口为30022 访问同一个博客 测试结果: 汇总报告: 响应时间图&…

HTML静态网页成品作业(HTML+CSS+JS)——游戏天天酷跑网页(4个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,使用Javacsript代码实现图片切换轮播,共有4个页面。 二、…

Linux---系统的初步学习【 项目二 管理Linux文件和目录】

项目二 管理Linux文件和目录 2.1项目知识准备 ​ 文件是存储在计算机上的数据集合。在Windows系统中,我们理解的文件可以是文本文档、图片、程序、音乐、视频等。在Linux中,一切皆文件,也就是除了Windows中所理解的文件,目录、字…

xgo 原理探索

Go 单测 mock 方案 Mock 方法原理依赖优点缺点接口 Mock为依赖项定义接口,并提供接口的 Mock 实现。需要定义接口和 Mock 实现。灵活,遵循 Go 的类型系统;易于替换实现。需要更多的样板代码来定义接口和 Mock 实现。Monkey Patching&#xf…

NOSQL -- ES

第三个我们比较常用的NOSQL类型的数据库 --- ES 介绍: ES的全称(Elasticsearch) ES是一个分布式全文搜索的引擎 也就是我们平常在购物, 搜索东西的时候常用的, 就是一个ES的类型, 分布式全文搜索引擎 查询原理: 1>分词: 在查询之前, 其会将一些数据拆分开, 按照词进行拆分…

day54 动态规划 part10 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

300.最长递增子序列 动规五部曲 1.dp[i]的定义 dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 2.状态转移方程 位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 1 的最大值。 所以:if (nums[i] > nums[j]) dp[i] max(dp[i], dp…

样本学习:当AI遇上“少见多怪”

东汉名臣牟融在其著作《牟子》写道:“少所见,多所怪,睹橐驼,谓马肿背。”意思是见闻少的人遇到不常见的事物就觉得奇怪,见到骆驼也以为是背肿了的马。因此,后人总用“少见多怪”来嘲笑见识浅陋的人。然而&a…

七个备受欢迎的IntelliJ IDEA实用插件

有了Lombok插件,IntelliJ就能完全理解Lombok注解,使它们能如预期般工作,防止出现错误,并改善IDE的自动完成功能。 作为IntelliJ IDEA的常用用户,会非常喜欢使用它,但我们必须承认,有时这个IDE&…

3.多层感知机

目录 1.感知机训练感知机XOR问题(Minsky&Papert 1969) AI的第一个寒冬总结 2.多层感知机(MLP)学习XOR单隐藏层(全连接层)激活函数:Sigmoid激活函数:Tanh激活函数:ReLu 最常用的 因为计算速度…

openGauss学习笔记-300 openGauss AI特性-AI4DB数据库自治运维-DBMind的AI子功能-SQL Rewriter SQL语句改写

文章目录 openGauss学习笔记-300 openGauss AI特性-AI4DB数据库自治运维-DBMind的AI子功能-SQL Rewriter SQL语句改写300.1 概述300.2 使用指导300.2.1 前提条件300.2.2 使用方法示例300.3 获取帮助300.4 命令参考300.5 常见问题处理openGauss学习笔记-300 openGauss AI特性-AI…