相机标定和双目相机标定标定原理推导及效果展示

2023-05-16

文章目录

  • 前言
  • 一、相机标定
    • 1.相机的四个坐标系
    • 2.相机的畸变
  • 二、张正友标定法
    • 1.求解内参矩阵与外参矩阵的积
    • 2.求解内参矩阵
    • 3.求解外参矩阵
    • 4.标定相机的畸变参数
    • 5.双目标定
    • 6.极线矫正(立体校正)
  • 三、视差图与深度图


前言

  参考了一些大佬的文章,整理了一下相机标定和双目标定的原理和推导。


一、相机标定

  摄像机成像就是空间场景投影至二维图像平面的空间变换过程。摄像机标定的要解决两个问题:首先确定三维空间点与像素平面像素点间的转换关系,即求解相机内外参;然后确定相机成像过程中的畸变系数,用于图像矫正,因此摄像机标定的参数包括:相机内部参数,外部参数以及畸变参数。
  另外仅仅利用单目相机标定的结果,是无法直接从像素坐标转化到物理坐标的,因为透视投影丢失了一个维度的坐标,所以测距其实需要双目相机。

1.相机的四个坐标系

  相机成像系统中,共包含四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。
在这里插入图片描述
  在一些其他文章中均有说明这四个坐标系分别是什么意思,推荐大家看一下这几位博主的文章,非常有收获。
立体视觉入门指南(1):坐标系与相机参数
相机标定之张正友标定法数学原理详解(含python源码)
相机标定、双目相机标定(原理)、三维重建效果展示
在这里插入图片描述世界坐标系:Xw、Yw、Zw。
相机坐标系: Xc、Yc、Zc。
图像坐标系:x、y。
像素坐标系:u、v。
  其中,相机坐标系的Z轴与光轴重合,且垂直于图像坐标系平面并通过图像坐标系的原点,相机坐标系与图像坐标系之间的距离为焦距f。像素坐标系平面u-v和图像坐标系平面x-y重合,但像素坐标系原点位于图中左上角。

  世界坐标系到像素坐标系转换的全过程:
在这里插入图片描述
这里要说明一下几个问题:
1、外参R、T ,也就是世界坐标系到相机坐标系,要6个自由度,除了旋转还要进行平移。
在这里插入图片描述
2、s为比例因子(s不为0),f为有效焦距(光心到图像平面的距离)。相机坐标系转图像坐标系就是等比例缩放的过程。
3、a= f/dX、ay= f/dY,称为u、v轴的尺度因子,M1称为相机的内部参数矩阵,M2称为相机的外部参数矩阵,M称为投影矩阵。

2.相机的畸变

  相机拍摄的图片还存在一定的畸变,畸变包括桶形畸变和枕形畸变。在我的这篇文章中有解释和畸变矫正opencv-python光学畸变校准
径向畸变公式(3阶)如下:
在这里插入图片描述
切向畸变公式如下:
在这里插入图片描述
  相机标定的第二个目的就是获得相机的畸变参数,如上式中的K1,K2,K3,P1,P2 等,进而对拍摄的图片进行去畸变处理。

二、张正友标定法

原文我已经帮大家下载好了,直接获取就可以了。链接:https://pan.baidu.com/s/1wp-GmVuc3CTyRXYX1V7aBQ
提取码:8owo

  张正友标定法标定相机的内外参数的思路如下:
1)求解内参矩阵与外参矩阵的积;
2)求解内参矩阵;
3)求解外参矩阵。

1.求解内参矩阵与外参矩阵的积

  张正友标定法将世界坐标系固定于棋盘格上,则棋盘格上任一点的物理坐标 W=0 ,因此,原单点无畸变的成像模型可以化为下式。其中, R1,R2为旋转矩阵R的前两列。为了简便,将内参矩阵记为 A。
在这里插入图片描述
注:对于不同的图片,内参矩阵A为定值;对于同一张图片,内参矩阵A,外参矩阵(R1 R2 T)为定值;对于同一张图片上的单点,内参矩阵A,外参矩阵(R1 R2 T) ,尺度因子s为定值。
我们将内参矩阵A和外参矩阵(R1 R2 T)的积记为矩阵H,H即为单应矩阵,则有:
在这里插入图片描述
在这里插入图片描述

  尺度因子 s可以消掉,这里的H是齐次矩阵,有8个独立未知元素。每一个标定板角点可以提供两个约束方程的对应关系。因此,当一张图片上的标定板角点数量等于4时,即可求得该图片对应的矩阵 。
  以上只是理论推导,在真实的应用场景中,我们计算的点对中都会包含噪声。比如点的位置偏差几个像素,甚至出现特征点对误匹配的现象,如果只使用4个点对来计算单应矩阵,那会出现很大的误差。因此,为了使得计算更精确,一般都会使用远大于4个点对来计算单应矩阵。另外上述方程组采用直接线性解法通常很难得到最优解,所以实际使用中一般会用其他优化方法,如奇异值分解、Levenberg-Marquarat(LM)算法。

2.求解内参矩阵

  求出来的单应矩阵H是内参矩阵和外参矩阵的混合体,而我们想要最终分别获得内参和外参,所以需要先求内参或者先求外参。先求内参是因为更容易,因为每张图片的内参都是固定的,而外参是变化的。最后求得如下,具体可以参考大佬的推导相机标定之张正友标定法数学原理详解(含python源码)
在这里插入图片描述
最后可根据对应关系求出结果。
在这里插入图片描述

3.求解外参矩阵

  上面我们已经求导了单应矩阵H和内参矩阵A,自然就可以求得每一张图片对应的外参矩阵(R1 R2 T)。
注:这里值得指出,完整的外参矩阵为在这里插入图片描述
但是,由于张正友标定板将世界坐标系的原点选取在棋盘格上,则棋盘格上任一点的物理坐标W=0 ,将旋转矩阵的R的第三列 R3消掉,因此,R3在坐标转化中并没有作用。但是 要使得 R3满足旋转矩阵R的性质,即列与列之间单位正交,因此可以通过向量 R1,R2的叉乘,即R1 X R2 = R3 ,计算得到R3。

4.标定相机的畸变参数

畸变后的像素坐标为u^v^
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此处也是参考了大佬的推导,建议大家都看一下,非常推荐!

5.双目标定

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

在这里插入图片描述
通过 P = R X Pl + T可以推出:
在这里插入图片描述
  需要说明的是,无论是Rl、Rr、Tl、Tr,这些在我们单目标定的时候都已经获得过了,opencv单目标定函数中,除了返回我们相机内参、畸变系数外,相机相对于标定物的旋转、平移矩阵也一并返回了,我们可以直接可以用。

6.极线矫正(立体校正)

  之前写的文章里面有介绍极线矫正opencv-python立体匹配(极线校正)
   立体校正的目的就是,利用立体标定所获得的参数将实际非共面行对准的两幅图像,校正成共面行对准。
在这里插入图片描述

三、视差图与深度图

引用大佬的文章立体匹配入门指南(8):视差图、深度图、点云
在这里插入图片描述

在这里插入图片描述
通过三角形相似可得出:

在这里插入图片描述

在这里插入图片描述
其中,Z为深度,d为视差,b为基线长度,f为焦距(像素单位),xr和xl分别为左右视图主点的列坐标。
注:视差图中存的是视差d,深度图中存的是深度Z。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

相机标定和双目相机标定标定原理推导及效果展示 的相关文章

随机推荐

  • 【2023华为OD笔试必会20题--C语言版】《18 最短木板长度》——数组

    本专栏收录了华为OD 2022 Q4和2023Q1笔试题目 100分类别中的出现频率最高 至少出现100次 的20道 每篇文章包括原始题目 和 我亲自编写并在Visual Studio中运行成功的C语言代码 仅供参考 启发使用 切不可照搬
  • java1.8新特性--lambda表达式

    1 lambda表达式 Java8中引入了一个新的操作符 gt 该操作符称为箭头操作符或Lambda操作符 xff0c 箭头操作符将Lambda表达式拆分为两部分 左侧 xff1a xff08 参数 xff09 表示参数列表 右侧 xff1
  • badblocks命令来检查硬盘是否有坏道

    硬盘是一个损耗设备 xff0c 当使用一段时间后可能会出现坏道等物理故障 电脑硬盘出现坏道后 xff0c 如果不及时更换或进行技术处理 xff0c 坏道就会越来越多 xff0c 并会造成频繁死机和数据丢失 最好的处理方式是更换磁盘 xff0
  • 图文教学读懂can报文

    can报文协议是汽车工程最基础的知识点 DBC协议 can有两种定义 Intel格式与Motorola格式 xff0c 主要的区别是能不能跨字节 xff0c 我们用主流的摩托摩拉格式 以一个报文ID 0x121为例 xff0c 他的解析如下
  • 四旋翼无人机数学模型推导

    本周开始进行四旋翼无人机的学习工作 xff0c 首先来进行四旋翼无人机的数学模型推导工作 四旋翼动力学数学模型 坐标变换 介绍四旋翼数学模型之前 xff0c 首先引入坐标变换的概念 xff0c 定义两个坐标系惯性坐标系 E xff0c 以及
  • NVIDIA Jetson Xavier NX 计算GPIO编号

    NVIDIA Jetson Xavier NX 计算GPIO编号 前言准备工作计算步骤计算示例注意 xff1a 附件 xff1a tegra gpio h参考链接 前言 公司产品使用了自主设计的载板 xff0c 需要使用指定的GPIO引脚
  • 深度学习人脸表情识别中,需要比较数据集中的文件名和train_list.txt中的文件名是否相一致的java代码实现

    如下图所示 xff0c 现有一个人脸表情数据集RAF DB xff0c 其train文件中的每一个图片的文件名称为 train 00001 aligned jpg 另外 xff0c 有train list txt文件标记了上图文件夹每一张数
  • git拉取后,代码被覆盖怎么办?

    1 File gt Local History gt Show History 2 右击 xff0c Revert找回本地历史版本
  • 【面试】C/C++面试宝典一

    1 const 修饰变量 xff0c 说明该变量不可以被改变 xff1b 修饰指针 xff0c 分为指向常量的指针 xff08 pointer to const xff09 和自身是常量的指针 xff08 常量指针 xff0c const
  • Docker安装Xfce桌面环境(轻量可视化操作系统)

    0 Xfce是什么 xff1f Xfce是一个适用于类UNIX操作系统的轻量级桌面环境 它的目标是快速而低廉的系统资源 xff0c 同时仍然具有视觉吸引力和用户友好性 具体参考官网 https www xfce org 项目地址 xff1a
  • Linux系统常用快捷键及VNC基本使用命令

    Linux系统常用快捷键及VNC基本使用命令 文章目录 Linux系统常用快捷键及VNC基本使用命令Linux系统的特点Linux树型目录结构Linux系统常用命令VNC常用命令 Linux系统的特点 多任务系统 在linux系统中可以同时
  • 【docker】docker学习(3)——Dockerfile的常用语法和编写实战

    大家好 xff0c 我是好学的小师弟 xff0c 今天和大家分享下Dockerfile的常用语法和编写实战 插曲 xff1a 在学习Dockerfile之前 xff0c 我们先讲解下docker save 和docker load 这两个命
  • 1.2 安装 docker 容器并配置镜像加速器

    1 2 1 实验环境准备 实验环境 xff1a CENTOS7 9 64 位 主机名 xff1a hou 主机 ip 10 0 8 120 xff08 这个 ip 大家可以根据自己所在环境去配置 xff0c 配置成静态 IP xff09 4
  • 弯管参数计算及编程实现

    船舶软件建立三维管道模型后 xff0c 需要自动生成管子加工信息 xff0c 这样就提高了设计效率 其中弯管参数主要是下料长度 xff0c 弯角和转角 下料长度是由各管段实长 xff0c 即管子中心线长度 xff0c 减去弯管部分切线长再加
  • 完整版数据库系统概论(第五版)-课后答案-免费网盘自提

    包含全部的课后答案与复习笔记 xff01 大家伙不挂科不被刷 xff0c 一起冲 xff01 虽然这个我也是找的别人的 xff0c 但是真的好用 xff01 百度网盘 https pan baidu com s 1Ux07PWvPb k3l
  • 踩坑笔记:安装Gazebo11

    安装环境 xff1a ubuntu18 04 在我上一篇博客中 xff0c 我们安装了ROS Melodic amp amp Ros2 Dashing 在我想要安装Gazebo11时候出现了错误 一 依赖错误 安装Gazebo11 xff1
  • 在keil5中调试串口遇到的问题

    1 问题 在keil5中调试stm32串口实验时 xff0c 向单片机的串口1发送数据 xff0c 观察串口1的寄存器 xff0c 此时串口1的中断服务函数会遇到无法进入下图if 的情况 xff0c 此时观察串口1寄存器 RXEN 的值 由
  • 树莓派在上电后一直重启进入不了系统桌面

    问题描述 树莓派在上电后一直重启进入不了系统桌面 xff0c 在检查了各种接口没问题后解决办法 原因分析与解决方案 xff1a 用了键盘 鼠标 显示器后5v 1A的插头不行 xff0c 换了ipad用的5V 2A的充电器后就可以开启了 xf
  • 树莓派连接“手机热点“或“WiFi“ 后无法上网,以及连接“手机热点“或“WiFi“时VNC连接失败问题

    问题描述 之前一直在开热点 xff0c 通过电脑端VNC控制树莓派拍摄照片 xff0c 今天突然发现树莓派上不去网 xff0c 所以就试着尝试解决了一下 xff0c 心路历程如下 xff1a 要么就是树莓派连不上网 xff0c 要么就是连上
  • 相机标定和双目相机标定标定原理推导及效果展示

    文章目录 前言一 相机标定1 相机的四个坐标系2 相机的畸变 二 张正友标定法1 求解内参矩阵与外参矩阵的积2 求解内参矩阵3 求解外参矩阵4 标定相机的畸变参数5 双目标定6 极线矫正 xff08 立体校正 xff09 三 视差图与深度图