Halcon 多相机统一坐标系(标定)

       多相机统一坐标系是指将多个不同位置的相机的图像采集到同一个坐标系下进行处理和分析的方法。 在计算机视觉和机器视觉领域中,多相机统一坐标系被广泛应用于三维重建、立体视觉、目标跟踪等任务中。

以gen_binocular_rectification_map(生成描述图像映射的转换图的双目相机对进行校正)为例,

gen_binocular_rectification_map(Map1,Map2:CamParam1, CamParam2,RalPose,SubSanpling,Method,MapType:,CamParamRect1,CamParamRect2,CamPoseRect1,CamPoseRect2,RelPoseRect )

最重要得三个参数输入为:CamParam1, CamParam2,RalPose

那么针对如何获取这三个参数做相机标定为案例

Step1 - 读取图片获取图片大小以及标定类型

ImgPath := 'stereo/board/'
CalDescrFile := 'caltab_30mm.descr'
read_image (ImageL, ImgPath + 'calib_l_01')
read_image (ImageR, ImgPath + 'calib_r_01')
get_image_size (ImageL, WidthL, HeightL)
get_image_size (ImageR, WidthR, HeightR)

Step2 - 内部和外部摄像机参数

gen_cam_par_area_scan_division (0.0125, 0, 1.48e-5, 1.48e-5, WidthL / 2.0, HeightL / 2.0, WidthL, HeightL, StartCamPar)

Step3 - 创建 HALCON 校准数据模型。

create_calib_data ( :CalibSetup,NumCameras,NumCalibObjets,CalibDataID)
CalibSetup 校准类型(输入)
NumCameras (摄像机数量)校准设置中的相机数量(输入)
NumCalibObjets 校准对象(输入)
CalibDataID 创建的校准数据模型的句柄。(输出)
 

create_calib_data ('calibration_object', 2, 1, CalibDataID)

Step4 - 在校准数据中设置相机的类型和初始参数

set_calib_data_cam_param( :CalibDataID,CameraIdx ,CameraType ,CameraParam )

CalibDataID 校准数据模型的句柄。(输入)
CameraIdx 相机索引 (输入)
CameraType 相机的类型(输入)
CameraParam  初始相机内部参数(输入)

set_calib_data_cam_param (CalibDataID, 'all', [], StartCamPar)

Step5 - 在校准模型中定义校准对象。

set_calib_data_calib_object( :CalibDataID,CalibObjIds ,CalibObjDescr )
CalibDataID 校准数据模型的句柄(输入)
CalibObjIds 校准对象索引。(输入)
CalibObjDescr 3D 点坐标或描述文件名(输入)

Step6 - 读取所有使用的校准图像


read_image (ImagesL, ImgPath + 'calib_l_' + [1:15]$'02d')
read_image (ImagesR, ImgPath + 'calib_r_' + [1:15]$'02d')
count_obj (ImagesL, Number)
for I := 1 to Number by 1select_obj (ImagesL, ImageL, I)select_obj (ImagesR, ImageR, I)* 查找校准板find_calib_object (ImageL, CalibDataID, 0, 0, I, [], [])find_calib_object (ImageR, CalibDataID, 1, 0, I, [], [])*可视化提取的校准标记和由估计姿势定义的坐标系。get_calib_data_observ_points (CalibDataID, 0, 0, I, Row, Column, Index, StartPoseL)get_calib_data_observ_points (CalibDataID, 1, 0, I, Row, Column, Index, StartPoseR)dev_set_window (WindowHandle1)dev_display (ImageL)disp_caltab (WindowHandle1, CalDescrFile, StartCamPar, StartPoseL, 1)dev_set_window (WindowHandle2)dev_display (ImageR)disp_caltab (WindowHandle2, CalDescrFile, StartCamPar, StartPoseR, 1)
endfor

Step7 -  执行实际校准

calibrate_cameras (CalibDataID, Error)
get_calib_data (CalibDataID, 'camera', 0, 'params', CamParamL)
get_calib_data (CalibDataID, 'camera', 1, 'params', CamParamR)
get_calib_data (CalibDataID, 'camera', 1, 'pose', cLPcR)

至此,gen_binocular_rectification_map中的CamParam1, CamParam2,RalPose 获取完成。其一次对应CamParamL, CamParamR, cLPcR

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

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

相关文章

Android View的事件分发机制

前言 本文由于介绍本人关于View的事件分发机制的学习,如有不恰当的描述欢迎指出。 View基础 什么是View ​ View是Android中所有控件的基类,不管是Button、TextView、LinearLayout,它们的共同基类都是View。也就是说,View是界…

K8S配置storage-class

简介 Kubernetes支持NFS存储,需要安装nfs-subdir-external-provisioner,它是一个存储资源自动调配器,它可将现有的NFS服务器通过持久卷声明来支持Kubernetes持久卷的动态分配。该组件是对Kubernetes NFS-Client Provisioner的扩展&#xff0…

腾讯云跨AZ部署FortigateHA备忘录

随时保存配置 config system globalset admintimeout 480set alias "FortiGate-VM64-KVM"set gui-auto-upgrade-setup-warning disableset hostname "FG-Slave"set revision-backup-on-logout enableset revision-image-auto-backup enableset timezone &…

面向对象与设计模式第一节:深入理解OOP

第三章:面向对象与设计模式 第一节:深入理解OOP 面向对象编程(OOP)是一种编程范式,它将程序结构视为由对象组成,促进了代码的重用性和可维护性。在这一课中,我们将深入分析OOP的四个基本特性&…

[JAVAEE] 多线程的案例(三) - 线程池

目录 一. 什么是线程池 二. 线程池的作用 三. java提供的线程池类 四. ThreadPoolExecutor的构造方法及参数理解 1. int corePoolSize: 核心线程数. 2. int maximumPoolSize: 最大线程数 核心线程数 非核心线程数 3. int keepAliveTime:非核心线程允许空闲的最大时间. …

DataX简介及使用

目录 一、DataX离线同步工具DataX3.0介绍 1.1、 DataX 3.0概览 1.2、特征 1.3、DataX3.0框架设计 1.4、支持的数据元 1.5、DataX3.0核心架构 1.6、DataX 3.0六大核心优势 1.6.1、可靠的数据质量监控 1.6.2、丰富的数据转换功能 1.6.3、精准的速度控制 1.6.4、强劲的…

正则表达式和通配符

文章目录 正则表达式和通配符的区别正则表达式(Regex)通配符(Wildcards)总结 正则表达式的概念正则表达式的由来为什么要使用正则表达式 正则表达式的语法组成修饰符元字符\f\b\B 在Linux中的基础正则和扩展正则基础正则(BRE)^$.*…

面试时被问到“Scaling Law”,该怎么答?

在大模型的研发中,通常会有下面一些需求: 计划训练一个 10B 的模型,想知道至少需要多大的数据? 收集到了 1T 的数据,想知道能训练一个多大的模型? 老板准备 1 个月后开发布会,给的资源是 100 …

Linux安装Nginx教程(rpm安装方式)

本章教程,主要介绍如何在Linux Centos7系统上,使用rpm的方式进行安装Nginx。 一、安装wget插件 如果不存在wget下载插件,需要安装一下。 yum install -y wget二 、下载rpm安装包 官方提供的rpm下载地址:https://nginx.org/packages/centos/7/x86_64/RPMS/ <

【Nginx系列】499错误

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

Postman常见问题及解决方(全)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、网络连接问题 如果Postman无法发送请求或接收响应&#xff0c;可以尝试以下操作&#xff1a; 检查网络连接是否正常&#xff0c;包括检查网络设置、代理设置…

软考中级嵌入式系统设计师笔记分享(二)

1.TTL 电路是电流控制器件&#xff0c;而CMOS 电路是电压控制器件。 2.TTL 电路的速度快&#xff0c;传输延迟时间短(5-10ns)&#xff0c;但是功耗大。 常见的串行总线有 SPI、II2C、USB、RS232/RS422/RS485、CAN等;高速串行总线主要有 SATA、PCIE、IEEE 1394、Rapidl0、USB 3…

1.DBeaver连接hive数据库

1.hive开启远程服务&#xff0c;linux中直接输入&#xff1a;hiveserver2 2.解压dbeaver和hive-jdbc-2.1.1.zip 3.双击打开 4.数据库&#xff0c;新建连接 5.搜索hive 6.配置参数 7.编辑驱动设置 8.添加jar包 9.测试连接 10.右击&#xff0c;新建sql编辑器 11.执行sql 12.调整字…

【每日一题】LeetCode - 整数转罗马数字

在罗马数字系统中&#xff0c;七个不同的符号代表不同的值&#xff1a; 符号值I1V5X10L50C100D500M1000 罗马数字的表示方式是从最大值开始逐次减去每个符号的值&#xff0c;通过组合这些符号构建最终的表示形式。本文将介绍一个基于贪心策略的解决方案&#xff0c;将整数转换…

unity开发之Line Renderer

Line Renderer 是一个有用的工具&#xff0c;可让您在游戏中绘制线条。 它可以用作游戏的函数或调试标记。 在这里&#xff0c;让我们创建一个程序&#xff0c;根据基本用法在 Line Renderer 上移动。 目录 如何使用 Line Renderer 和基础知识 在场景中放置 Line Renderer关键组…

Catalan数 C++解决

输入描述 输入一个正整数n。 输出描述 输出Catalan数的前n项。 用例输入 1 0 用例输出 1 1 用例输入 2 5 用例输出 2 1 1 2 5 14 42 #include<bits/stdc.h> using namespace std; int main() {int n;cin>>n;int dp[n1]{0};dp[0]dp[1]1;for(int m2;…

守护头顶安全——AI高空抛物监测,让悲剧不再重演

在城市的喧嚣中&#xff0c;我们享受着高楼林立带来的便捷与繁华&#xff0c;却往往忽视了那些隐藏在高空中的危险。近日&#xff0c;震惊全国的高空抛物死刑案件被最高院核准并执行。案件中被告人多次高空抛物的举动&#xff0c;夺去了无辜者的生命&#xff0c;也让自己付出了…

Go 语言中的 for range 循环教程

在 Go 语言中&#xff0c;for range 循环是一个方便的语法结构&#xff0c;用于遍历数组、切片、映射和字符串。本教程将通过示例代码来帮助理解如何在 Go 中使用 for range 循环。 package mainimport "fmt"func main() {// 遍历切片并计算和nums : []int{2, 3, 4}…

Kafka-代码示例

一、构建开发环境 File > New > Project 选择一个最简单的模板 项目和坐标命名 配置maven路径 添加maven依赖 <dependencies><!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients --><dependency><groupId>org.apache.kaf…

深度学习 基本函数01

np.dot 是 NumPy 库中的一个函数&#xff0c;用于计算两个数组的点积&#xff08;也称为内积或数量积&#xff09;。点积是两个向量的对应元素乘积之和。 np.random.normal 是 NumPy 库中的一个函数&#xff0c;用于生成符合正态分布&#xff08;也称为高斯分布&#xff09;的…