相机标定的原理

news2024/9/21 7:32:43

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 = width
        self.height = height
        if cam2worldMatrix:
            self.cam2worldMatrix = cam2worldMatrix
        self.fx = fx
        self.fy = fy
        self.cx = cx
        self.cy = cy
        self.k1 = k1
        self.k2 = k2
        self.f2rc = f2rc

2.1 visionary-s 双目

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

         # transform into camera coordinates (zc, xc, yc)
         #像素坐标系转为图像坐标系
		 xp = (myCamParams.cx - col) / myCamParams.fx
		 yp = (myCamParams.cy - row) / myCamParams.fy
		
		 # coordinate system local to the imager
		  # 图像坐标系转为相机坐标系 f=1 ,所以 xc=(xp*zc)/f 
		  #yc=(yp*zc)/f
		 zc = distData[row][col]
		 xc = xp * zc
		 yc = 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.fx
   yp = (myCamParams.cy - row) / myCamParams.fy
	# 畸变校正
   r2 = (xp * xp + yp * yp)
   r4 = r2 * r2

   k = 1 + myCamParams.k1 * r2 + myCamParams.k2 * r4

   xd = xp * k # 畸变校正
   yd = yp * k

   d = 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 / s0
   yc = yd * d / s0
   zc = d / s0 - myCamParams.f2rc

   # convert to world coordinate system
   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])

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.coloradmin.cn/o/1616964.html

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

相关文章

钻刀无忌,过孔莫愁

高速先生成员--姜杰 钻刀是冷的,单板是冷的,眼见着过孔阻抗居高不下,雷豹的心也越来越冷…… 雷豹最近在研究过孔,少不了先学习相关的理论:过孔作为信号路径上一个重要的阻抗突变点,相对于传输线的特征阻抗…

合约X—314协议系统开发

随着区块链技术的不断发展,越来越多的协议被提出和应用,其中X314协议就是其中之一。该协议旨在通过去中心化、安全性和可扩展性等方面,为区块链应用提供更好的支持。本文将从多个角度对X314协议进行深度解析,探讨其优势和不足&…

SV610PRO无线模块:小体积,高速率通信解决方案

思为无线生产的SV610PRO无线数据传输模块以其超小的尺寸和出色的数据传输速率,在竞争激烈的无线通信市场中脱颖而出。这款模块采用先进的射频技术,确保在广泛的应用场景中提供稳定可靠的通信连接,无论是工业自动化、智能家居还是远程监控系统…

什么是区块链?什么是X314协议?

X314协议是一种基于区块链技术的分布式账本协议,具有去中心化、安全性高和可扩展性强的特点。本文将从多个角度对X314协议进行通俗解释,带您了解这一前沿技术。 一、什么是区块链和分布式账本? 首先,我们需要了解什么是区块链和分…

Mysql如何查询不需要Group by的字段

问题背景 在实际业务场景中,我们有时会对某些字段进行分组统计,并且需要查出多余字段展示。比方说根据机构id统计每个机构下有多少部门,字段展示机构名称、部门数量、机构id。 这时会提示查询的字段必须得在group by子句中,否则无…

手撕红黑树(map和set底层结构)(2)

[TOC]红黑树 一 红黑树概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍&…

SuperMap GIS基础产品FAQ集锦(20240422)

一、SuperMap iDesktopX 问题1:请问一下,执行“要素数据集平滑”算子报错“Could not find a SpatialRDDProvider to process the params” 11.1.1 【解决办法】使用大数据下的算子配置大数据环境不正确,客户数据量不多,可以使…

双链向表专题

1.链表的分类 链表的种类非常多组合起来就有 2 2 8种 链表说明: 虽然有这么多的链表的结构,但是我们实际中最常⽤还是两种结构: 单链表 和 双向带头循环链表 1. 无头单向⾮循环链表:结构简单,⼀般不会单独⽤来存数…

bugku ezbypass

bugku ezbypass 1.代码审计 2.题目代码如下所示 <?php error_reporting(0); highlight_file(__FILE__);if (isset($_POST[code])) {$code $_POST[code];if (strlen($code) < 105){if (is_string($code)) {if (!preg_match("/[a-zA-Z0-9#%^&*:{}\-<\?>…

运行Java或Python的时候,Git是必要的吗?

在运行Java或Python代码时&#xff0c;Git并不是必需的&#xff0c;但它可以成为一个非常有用的工具&#xff0c;特别是在团队协作、版本控制和代码管理方面。 Git的作用和优势 版本控制&#xff1a; Git是一个分布式版本控制系统&#xff0c;可以跟踪文件的更改历史&#xff…

从数据库中到处所有表的列、注释、类型、是否必填等信息

从数据库中到处所有中文表名、英文表名、所有列、注释、类型、长度、是否必填等信息&#xff0c;效果如下&#xff1a; 要实现上面的表格可以直接用SQL实现&#xff0c;实现SQL如下&#xff1a; #查询SQL select* FROMinformation_schema.COLUMNS as columns left join (sele…

ExcelVBA把当前工作表导出为PDF文档

我们先问问Kimi Excel导出为PDF的方法有多种&#xff0c;以下是一些常见的方法&#xff1a; 1 使用Excel软件的内置功能&#xff1a; 打开Excel文件&#xff0c;点击“文件”菜单。 选择“另存为”&#xff0c;在“保存类型”中选择“PDF”。 设置保存路径和文件名&#xff…

Leetcode 119 杨辉三角 II

目录 一、问题描述二、示例及约束三、代码方法一&#xff1a;递推方法二&#xff1a;线性递推 四、总结 一、问题描述 给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。   在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。   自我…

SpringBoot+layuimini实现左侧菜单动态展示

layuimini左侧菜单动态显示 首先我们看一下layuimini的原有菜单显示格式 {"homeInfo": {"title": "首页","href": "page/welcome-2.html?t2"},"logoInfo": {"title": "LAYUI MINI","…

苍穹外卖day8(2)用户下单、微信支付

文章目录 前言一、用户下单1. 业务流程2. 接口设计3. 数据库设计3.1 订单表orders3.2 订单明细表 order_detail 4. 代码实现 二、订单支付 前言 用户下单 因为订单信息中包含了其他业务中的数据&#xff0c;在逻辑处理中涉及了多个其他业务&#xff0c;比如要判断地址簿、购物…

ThreeJs模拟工厂生产过程一

上节我们已经通过绘制两条长方体和多个圆柱体成功绘制出传送带&#xff0c;今天根据之前的传送带做个简单的工厂车间生产的demo&#xff0c;然后再不断完善它。 首先分析下工厂生产有哪些部分组成&#xff0c;工厂内是产线&#xff0c;产线需要有设备&#xff0c;传送带以及生产…

要养生也要时尚,益百分满足你的所有需求

要养生也要时尚&#xff0c;益百分满足你的所有需求 艾灸是个好东西&#xff0c;尤其是在近几年的时候&#xff0c;艾灸就像一阵浪潮席卷进了人们的日常生活之中&#xff0c;我们可以在街边看到大大小小的艾灸馆&#xff0c;有些评价比较高的艾灸馆门前甚至还排起了长长的队伍…

Langchain入门到实战-第四弹

Langchain入门到实战 Langchain中的提示词官网地址Langchain概述Langchain的提示词用法更新计划 Langchain中的提示词 语言模型提示模板是预定义的生成语言模型提示的方法。模板可能包括指令、少样本示例、特定任务的上下文和问题。LangChain 提供了创建和处理提示模板的工具。…

TS-namespace(命名空间)#记录

一、命名空间 1、ts 中的 “命名空间” 就是之前的 “内部模块”&#xff0c;任何使用 module 关键字来声明一个内部模块的地方都应该使用 namespace 关键字来替换。 // ts 中的“内部模块” &#xff08;废弃&#xff09; module X { }// ts 中的“命名空间” &#xff08…

系统启动修复和SYSTEM丢失损坏故障处理

系统启动修复和SYSTEM丢失损坏故障处理 一、问题描述 你的电脑/设备需要修复。无法加载应用程序或操作系统&#xff0c;原因是所需文件丢失或包含错误。 文件:\Windows\system32\winload.exe 错误代码: 0xc000000e 二、问题分析 1.查询winload.exe是win7或者win10以上系统…