相机标定的原理

1.相机标定资料

这个视频是建议有一定基础的去看,详细介绍了整个标定的过程。

https://www.bilibili.com/video/BV1R7411m7ZQ/?spm_id_from=333.337.search-card.all.click&vd_source=c205d4d10f730a57820343328741984a

这个文章基础一点,可以先看

https://blog.csdn.net/sunshine_zoe/article/details/73457686

https://zhuanlan.zhihu.com/p/642155792?utm_id=0

在这里插入图片描述

2.案例分析

这里用sick的visionary 相机的sdk做分析

2.0基本参数定义

cxcy 就是图像坐标系下的原点在像素坐标系下的坐标,其中fx和fy表示每一列和每一行分别代表1mm多少个像素,即1mm=fx pix
k1k2是径向畸变的参数
f2c 是标定的z的起始位置,后面在介绍
在这里插入图片描述

class CameraParameters:""" This class gathers the main camera parameters. """def __init__(self, width=176, height=144,cam2worldMatrix=None,fx=146.5, fy=146.5, cx=84.4, cy=71.2,k1=0.326442, k2=0.219623,f2rc=0.0):self.cam2worldMatrix = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]self.width = widthself.height = heightif cam2worldMatrix:self.cam2worldMatrix = cam2worldMatrixself.fx = fxself.fy = fyself.cx = cxself.cy = cyself.k1 = k1self.k2 = k2self.f2rc = f2rc

2.1 visionary-s 双目

在这里插入图片描述
在这里插入图片描述

         # transform into camera coordinates (zc, xc, yc)#像素坐标系转为图像坐标系xp = (myCamParams.cx - col) / myCamParams.fxyp = (myCamParams.cy - row) / myCamParams.fy# coordinate system local to the imager# 图像坐标系转为相机坐标系 f=1 ,所以 xc=(xp*zc)/f #yc=(yp*zc)/fzc = distData[row][col]xc = xp * zcyc = yp * zc# convert to world coordinate system#相机坐标系转世界坐标系 ,因为矩阵m_c2w是一个单位矩阵。所以xyz还是原来的值xw = (m_c2w[0, 3] + zc * m_c2w[0, 2]  + yc * m_c2w[0, 1] + xc * m_c2w[0, 0])yw = (m_c2w[1, 3] + zc * m_c2w[1, 2]  + yc * m_c2w[1, 1] + xc * m_c2w[1, 0])zw = (m_c2w[2, 3] + zc * m_c2w[2, 2]  + yc * m_c2w[2, 1] + xc * m_c2w[2, 0])

2.2 visionary-tmini tof

  #calculate radial distortion# 像素坐标系转图像坐标系xp = (myCamParams.cx - col) / myCamParams.fxyp = (myCamParams.cy - row) / myCamParams.fy# 畸变校正r2 = (xp * xp + yp * yp)r4 = r2 * r2k = 1 + myCamParams.k1 * r2 + myCamParams.k2 * r4xd = xp * k # 畸变校正yd = yp * kd = distData[row][col]  #实际的距离值,不是z而是 np.sqrt(x*x + y*y + z*z)s0 = np.sqrt(xd*xd + yd*yd + 1) #  计算当前的坐标点在z=1的时候的d#  d/s0 就是实际的z值# 图像坐标系转相机坐标系 也是f=1  所以直接乘以z值xc = xd * d / s0yc = yd * d / s0zc = d / s0 - myCamParams.f2rc# convert to world coordinate systemxw = (m_c2w[0, 3] + zc * m_c2w[0, 2]  + yc * m_c2w[0, 1] + xc * m_c2w[0, 0])yw = (m_c2w[1, 3] + zc * m_c2w[1, 2]  + yc * m_c2w[1, 1] + xc * m_c2w[1, 0])zw = (m_c2w[2, 3] + zc * m_c2w[2, 2]  + yc * m_c2w[2, 1] + xc * m_c2w[2, 0])

3. 2D相机的手眼标定

看了上面的案例 ,我们发现相机的sdk只做了2个矩阵的计算。也就是把像素坐标转为实际的相机坐标。真正要使用的话还缺少 相机转为机器人、法兰盘、工作坐标系。其实这些都是上面文章所说的相机转世界坐标系。也就是需要求R T 旋转加平移。所以理论上我们只需要3个标定点就可以。

https://www.xjx100.cn/news/433771.html?action=onClick

3.1欧拉角

https://www.guyuehome.com/43450#2__148
在这里插入图片描述

https://blog.csdn.net/weixin_43134049/article/details/122826538?spm=1001.2014.3001.5501

4. 3D点云的手眼标定

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

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

相关文章

【YOLOv8改进[注意力]】YOLOv8添加DAT(Vision Transformer with Deformable Attention)助力涨点

目录 一 DAT 二 YOLOv8添加DAT助力涨点 1 总体修改 2 配置文件 3 训练 其他 一 DAT 官方论文地址:https://openaccess.thecvf.com/content/CVPR2022/papers/Xia_Vision_Transformer_With_Deformable_Attention_CVPR_2022_paper.pdf Transformers最近在各种视…

轻松搭建llama3Web 交互界面 - Ollama + Open WebUI

Ubuntu下安装:(官网:Download Ollama on Linux) curl -fsSL https://ollama.com/install.sh | sh 就运行起来ollama了,不放心可以用ollama serve查看一下 ollama run llama3 就可以跑起来了, 那么我们肯…

windows10环境下conda迁移到linux环境

网上给出的方案错误百出,记录一下正确方案。 1 创建yaml文件 创建到终端所在路径下 conda activate 环境名 conda env export --no-build >环境名.yaml2 新操作系统中创建新的conda环境 conda env create -f 环境名.yaml3 删除不兼容的包 终端报错 Could n…

CUDA编程【2】-(51-78)

系列文章目录 文章目录 系列文章目录前言51、寄存器溢出51.1 溢出概念51.1 使用控制 52、本地内存和共享内存52.1 本地内存52.2. 共享内存 53. 常量内存53.1 概念53.2 初始化 54. 全局内存54.1 概念54.2 初始化 55. GPU缓存和变量作用域55.1 缓存类型55.2 变量作用域 56. 静态全…

我的一些 35+ 前同事的现状

大家好,我是坤哥,好久不见,今天简单和大家聊一下我目前观察到的前同事的现状 今年和一些前同事简单聊过,他们的现状如下: A: 去新西兰做 iOS 开发快 10 年了,马上就要拿到永久居留证了,他说在新…

(六)小案例银行家应用程序-删除账号-findindex方法

findindex方法和find方法非常类似,只不过findindex顾名思义,他返回的是index; ● 下面我们使用删除账号的功能来学习一下findindex的 ● 当用户登录成功之后,可以在下方输入自己的用户名和密码,然后提交&#xff0c…

Unity 中(提示框Tweet)

using UnityEngine; using UnityEngine.UI; using DG.Tweening; using System; public class Message : MonoBehaviour {public float dropDuration 0.5f; // 掉落持续时间public float persisterDuration 1f; // 持续显示时间public float dorpHeight;public static Message…

Redis入门到通关之Redis数据结构-String篇

文章目录 欢迎来到 请回答1024 的博客 🍓🍓🍓欢迎来到 请回答1024的博客 关于博主: 我是 请回答1024,一个追求数学与计算的边界、时间与空间的平衡,0与1的延伸的后端开发者。 博客特色: 在我的…

HarmonyOS ArkUI实战开发-NAPI 加载原理(下)

上一节笔者给大家讲解了 JS 引擎解释执行到 import 语句的加载流程,总结起来就是利用 dlopen() 方法的加载特性向 NativeModuleManager 内部的链接尾部添加一个 NativeModule,没有阅读过上节文章的小伙伴,笔者强烈建议阅读一下,本…

初识《list》及手搓模拟《list》

目录 前言: 1. list的介绍及使用 list的介绍: list的使用: 1、list的构造​编辑 2、list iterator的使用 3、list capacity 4、list element access 5、list modifiers 2.list的模拟实现 1、关于迭代器: 2、迭代器类的…

ScriptableObject数据容器讲解

概述 是Unity提供的一个用于创建可重用的数据容器或逻辑的基类。 ScriptableObject 是继承自 UnityEngine.Object 的一个类,但与普通的 MonoBehaviour 不同,它不能附加到GameObject上作为组件。 相反,ScriptableObject 通常用于存储和管理…

ThingsBoard实战教程(七):模拟设备遥测

tb做为一个多租户的物联网平台,文档也很齐全。后端使用的是java语言编写的,可以用swagger来导出文档。tb的所有服务都可以通过接口来看到。接口主要分为两部分,一部分是设备API,另一部分是用于服务端API。 在我们启动tb之后,可以通过http://ip +port/swagger-ui.html 来…

linux,从零安装nginx,并且部署vue应用程序

前言:系统使用龙蜥(8.5)的最小化安装,服务器安装这里不在赘述。 nginx 的版本:1.22.0 软件已经放在系统/home/software/ 一、安装nginx 进入路径/home/software/ 1》执行命令:rpm -ivh nginx-1.22.0-1.el7…

uboot大致流程总结

文章目录 一、uboot介绍二、uboot的配置编译过程2.1 make xxx_defconfig2.2 make 一、uboot介绍 uboot是一个bootloader,用于在嵌入式设备中引导linux内核启动,在嵌入式设备中常见的组织结构如下: 芯片内部固化代码 -> bootloader -> …

Docker NetWork (网络)

Docker 为什么需要网络管理 容器的网络默认与宿主机及其他容器都是相互隔离的,但同时我们也要考虑下面的一些问题, 比如 多个容器之间是如何通信的容器和宿主机是如何通信的容器和外界主机是如何通信的容器中要运行一些网络应用(如 nginx、web 应用、数…

第66天:API攻防-接口安全阿里云KEYPostmanDVWSXXE鉴权泄漏

案例一:安全问题-Dvws泄漏&鉴权&XXE 靶场地址:https://github.com/snoopysecurity/dvws-node 利用docker命令去启动 首先先注册一个账户 注册后登录点击admin area 发现点不进去 这里把bp打开但是不抓包,只做流量转发,进…

LLM学习笔记-3

温度缩放 概念 1)在机器学习中,"温度缩放"通常指的是一种技术,用于调整神经网络输出的概率分布。这个技术通常在 softmax 函数的输出上进行操作。 2)在 softmax 函数中,神经网络会输出一个概率分布&#x…

探索 虚拟化技术+Docker部署与操作

目录 一、你知道哪些云 1.1国内云 1.2国外云 二、Iaas、 Paas、SaaS三种云服务区别 2.1第一层叫做IaaS 2.2第二层就是所谓的PaaS 2.3第三层也就是所谓SaaS 三、虚拟化架构 3.1寄居架构 3.2源生架构 3.3操作系统虚拟化架构 3.4混合虚拟化架构 四、虚拟化特点及优势…

服务网关GateWay基础

1. 网关基础介绍1.1 网关是什么1.2 为啥要用网关1.3 常见的网关组件NginxNetflix ZuulSpring Cloud GatewayKongAPISIX综合比较 2. gateWay的使用2.1 springCloud整合gateway2.2 GateWay的相关用法2.3 GateWay路由使用示例基本用法转发/重定向负载请求动态路由 2.5 断言(Predic…

SourceInsight中文编码格式乱码

参考文章:https://blog.csdn.net/m0_53754590/article/details/135594860 file–>Reload as Encoding —>选择编码格式UTF-8,或者GB2312;哪个显示不乱码设置那个; 我这里选择GB2312