相机标定 - (02) - 相机标定步骤与原理

2023-05-16

目录

2 相机标定步骤

2.1 张正有标定操作步骤

2.2 张正有标定原理


2 相机标定步骤与原理

参考文章:三步骤详解张正友标定法_谜之_摄影爱好者的博客-CSDN博客

        1998年,张正友提出了基于二维平面靶标的标定方法,使用相机在不同角度下拍摄多幅平面靶标的图像,比如棋盘格的图像,然后通过对棋盘格的角点进行计算分析来进行相机标定(求解相机的内外参数)。

2.1 张正有标定操作步骤

(1) 张正友标定方案使用平面标志物,通常是规整的棋盘格或者点阵图,通常情况下为了方便区分图片中棋盘格朝向,我们一般使用宽高不同的棋盘格。

不同标定板的优缺点:

  • 棋盘格本身存在角点检测不精确的问题。
  • 圆点检测更精确,但是会存在偏心误差

会存在偏心误差

(2)准备好棋盘格后,使用待标定相机拍摄不同角度多组标定图案

  • 拍摄15~20张不同角度照片(按照标定的理论三张图片就可以完成标定,但是为了减小标定误差,拍摄图片会稍微多一些)
  • 标定图案需要保证平整
  • 每张图片中标志物尽量占据画面1/4以上,
  • 拍摄时应尽量保证相机参数不变(拍摄过程不要采用自定对焦方式,也不要改变焦距)
  • 保证拍摄图案清晰,无明显模糊(由于圆点在模糊情况不会改变其中心点位置,精度理论上会更好一些)
  • 拍摄图案的总和需要覆盖整个画面

(3)使用标定工具进行标定计算

2.2 张正有标定原理

第一步:对每一幅图像得到一个映射矩阵(单应矩阵)H

        一个二维点用m=(u,v)^{T}表示,一个三维点可以用M=(X,Y,Z)^{T}表示,其增广矩阵(齐次坐标表示)为\widetilde{m}=(u,v,1)^{T}以及\widetilde{M}=(X,Y,Z)^{T}。三维点与其投影图像点之间的关系为:

s\widetilde{m}=A(R,t)\widetilde{M}

式中,s为任意标准矢量,A矩阵为相机内参;R(旋转矩阵),t(平移向量)为外参

式中(u_{0},v_{0})是相机在图像坐标系的主点,\alpha\beta是图像上uv坐标轴的尺度因子,\gamma表示图像坐标轴的垂直度(取决于相机制造工艺,好的为0)。

假定模板平面在世界坐标系Z=0的平面上,则有:

s\begin{bmatrix} u\\ v\\ 1 \end{bmatrix}=A\bigl(\begin{smallmatrix} r_{1} & r_{2} & r_{3}&t\end{smallmatrix}\bigr)\begin{bmatrix} X\\ Y\\ Z\\ 1 \end{bmatrix}=A\bigl(\begin{smallmatrix} r_{1} &r_{2} & t \end{smallmatrix}\bigr)\begin{bmatrix} X\\ Y\\ 1 \end{bmatrix}

在标定模板(棋盘格)平面上的齐次坐标\widetilde{M}=(X,Y,1),而\widetilde{m}=(u,v,1)是棋盘格平面上的点投影到摄像机的成像(图像平面)对应点的齐次坐标。

此时,可以得到一个3*3的矩阵:H=\bigl(\begin{smallmatrix} h_{1} &h_{2} & h_{3} \end{smallmatrix}\bigr)=\lambda A\bigl(\begin{smallmatrix} r_{1} & r_{2} & t \end{smallmatrix}\bigr)

利用单应矩阵可得内参矩阵A的约束条件为   h_{1}^{T}A^{-T}A^{-1}h_{2}=0

第二步:利用约束条件线性求解内参矩阵A

        假设存在:

B=A^{-T}A^{-1}=\begin{bmatrix} B_{11} &B_{12} & B_{13}\\ B_{21}&_{22} &B_{23} \\ B_{31}&B_{32} & B_{33} \end{bmatrix}

式中,B为对称矩阵,基于绝对二次曲面原理求出B以后,再对B矩阵求逆,并从中导出内参矩阵A,再由A和单应矩阵H计算外参R和t,公式如下:

\left\{\begin{matrix} r_{1}=\lambda A^{-1}h_{1}\\ r_{2}=\lambda A^{-1}h_{2} \\ r_{3}=r_{1}\cdot r_{2}\\ t=\lambda A^{-1}h_{3} \end{matrix}\right.

第三步:最大似然估计

        采用最大似然准则优化上述参数。假设图像有n幅,模板平面标定点有m个,则最大似然估计值就可以通过最小化以下公式得到:

\sum_{i=1}^{n}\sum_{j=1}^{m}\left \| m_{ij}-m(A,k_{1},k_{2},R_{i},t_{i},M_{j}) \right \|^{2}

式中,m_{ij}为第 j 个点在第 i 幅图像中的像点;R_{i}为第 i 幅图像的旋转矩阵;t_{i}为第 i 幅图像的平移向量;M_{j}为第 j 个点的空间坐标;初始估计值利用上面线性求解的结果,径向畸变系数k_{1}k_{2}初始值为0。

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

相机标定 - (02) - 相机标定步骤与原理 的相关文章

  • DDS(data distribution service,数据分发服务)简介

    已剪辑自 http www uml org cn modeler 20201010112 asp 编辑推荐 文章主要介绍了DDS高级数据中心接口取代了以消息为中心的编程和基本技术概念等相关内容 来自于dds foundation org 由
  • Oracle 删除表空间回收磁盘空间

    1 查询表空间和表空间数据库文件路径 span class token keyword SQL span span class token operator gt span span class token keyword select s
  • 在Ubuntu中使用雷电3外接显卡(eGPU)进行深度学习

    sud种种很凑巧的因素 xff0c 需要用这么一套设备做深度学习 笔记本是联想yoga s730 xff0c 两年前在某多多入手 xff0c 显卡坞是技嘉gaming box 43 GTX1070 xff0c 某鱼入手 折腾了一上午 xff
  • make和cmake命令

    我们在安装Ubuntu软件时 xff0c 有时我们会用到make和cmake命令 所以在这篇文章我们来讲解一下 xff0c make命令和cmake命令他们的作用 xff0c 以及什么关系和区别 首先假设你有一定的计算机基础 xff0c 能
  • 小觅双目相机自带参数配置ORBSLAM3双目参数文件

    ORBSLAM3相机需要的参数 打开 home knight ORB SLAM3 Examples Stereo EuRoC yaml 以这个开源数据集的参数为模板 1 Camera type PinHole 相机模型 小觅双目相机也是针孔
  • GVINS编译出现大量的error: ‘CV_CALIB_CB_ADAPTIVE_THRESH’ was not declared in this scope错误

    错误 xff1a home knight GVINS GI src GVINS main camera model src chessboard Chessboard cc 38 43 error CV CALIB CB NORMALIZE
  • 3.CMakeLists——完成脚本、说明文档、版权文件doc文件夹的指定位置安装

    1 实例 在CMakeLists txt目录下加入如下语句执行安装操作 xff1a INSTALL FILES COPYRIGHT README DESTINATION share doc cmake t2 INSTALL PROGRAMS
  • 1.vinsfusion-从数据流看程序

    本节介绍 xff0c 图像数据和惯导数据是如何传入程序中的 xff0c 以及之后的图像数据格式转化 和惯导数据的初步处理 图像数据流 1 订阅话题数据 xff1a 订阅左图 ros Subscriber sub img0 span clas
  • vlsam容易混洗的概念

    特征点 角点 关键点 xff1a 这些概念虽然在细节上有所不同 xff0c 但都可以统一称为特征点或者关键点 xff0c 也就是具有特征性质的点 外点 xff08 outlier point xff09 xff1a 简单的理解为不符合条件的
  • 5.vinsdusion globalOptNode.cpp

    IO输出的 nav msgs Odometry 类型消息 xff0c 这个定位信息包含了VIO的位置和姿态 xff0c 其坐标系原点位于VIO的第一帧处 GPS输出的sensor msgs NavSatFixConstPtr 类型消息 xf
  • ros节点启动和关闭相关

    1 ros运行单位 xff1a Ros程序运行的单位是ros node 2 ros 节点的启动 xff1a xff08 1 xff09 初始化ros节点 xff1a 通过调用ros init 接口实现 xff1b 可以通过参数指定默认节点名
  • VINSFUSION-运行,并评估。

    1 修改yaml文件 output path home tong output xff0c 改成自己的 xff0c 其他的看自己用的啥相机 xff0c 改话题名字和相关参数 2 修改程序中的输出 xff0c 改成tum格式 当前帧在滑动窗口
  • Linux Windows Mac 临时 HTTP 服务传输文件(python http server)

    http 传输文件比 scp 和 ftp 都要可靠稳定和方便 xff0c 在 Linux 系统上 xff08 Windows 和 Mac 也一样 xff09 xff0c 我们经常需要把一堆文件或者某个大文件发送到别处 xff0c 遇到这种需
  • Docker容器显示图像界面配置

    Docker容器显示图像界面配置 原理概述 可以把docker看做一台没配显示器的主机 xff0c linux目前的主流图像界面服务X11支持 客户端 服务端 xff08 Client Server xff09 的工作模式只要在容器启动的时
  • ubuntu服务器有多个网卡时设置网卡的优先级

    有时候服务器会有多个网卡 xff0c 分别连接局域网和外网 xff0c 当局域网的优先级更高时会出现无法访问外网的情况 只需要设置默认网关就行了 首先查看默认网关 ip route show 然后通过 span class token fu
  • C_C++架构如何学?2020必备的最新懒人攻略指南(持续更新)

    C C 43 43 架构师学习之路 如同加锁和解锁操作 xff0c 在看文章之前先点个赞 xff0c 如果你看完文章觉得对您没有帮助 xff0c 希望您取消您的点赞 您的点赞是对笔者的一次鼓励 xff0c 您的取消是让笔者有对文章质量的把控
  • 嵌入式

    嵌入式 嵌入式开发就是指在嵌入式操作系统下进行开发 xff0c 一般常用的系统有WinCE xff0c ucos xff0c vxworks xff0c linux xff0c android等 另外 xff0c 用c xff0c c 43
  • Autoware源码分析——astar_avoid

    概要 本文是对autoware中waypoint planner功能包的相关文件组成和具体节点的分析 由于程序比较复杂 xff0c 我认为还存在一些不完整的地方 xff0c 之后也会继续分析 xff0c 继续更新 在看代码的过程中也学习了一
  • C/C++开发之CMakeList(其二)

    嵌套式CMakeLists写法 xff0c 文件结构如下 xff1a span class token operator span examples span class token operator span span class tok
  • (1)MissionPlanner1.3.75源码编译问题及解决办法

    MissionPlanner源码编译问题及解决办法 前言错误1 NETSDK10452 NETSDK11473 CS02464 NU1104 结束语 前言 最近想在missionplanner上加一些功能 xff0c 于是就整了套源码想试试

随机推荐

  • 04-旭日X3派测评——原版ROS的安装与测试

    1 环境安装 具体安装过程不在这里赘述 xff0c 主要参考以下几篇文章 xff1a 详细介绍如何在ubuntu20 04中安装ROS系统 xff0c 超快完成安装 xff08 最新版教程 xff09 Ubuntu20 04安装ros教程
  • npm(四):剖析npm包版本管理机制

    Nodejs成功离不开 npm 优秀的依赖管理系统 在介绍整个依赖系统之前 xff0c 必须要了解 npm如何管理依赖包的版本 xff0c 本章将介绍 npm包 的版本发布规范 如何管理各种依赖包的版本以及一些关于包版本的最佳实践 系列文章
  • 任务调度的初始化及上下文切换原理

    任务调度的初始化及上下文切换原理 前言任务调度整体框架任务调度初始化源码分析启动第一个任务分析PendSV中断systick定时中断 前言 本文将从调度器的创建为入口 xff0c 通过分析定时器中断以及PendSV中断的原理 xff0c 刨
  • ESXi 防火墙添加自定义端口/关闭开启防火墙

    ESXi 的所有端口都是白名单方式 xff0c 只允许系统默认支持的一些程序配置好的端口 xff0c 你可以选择打开和关闭 xff0c 但是不能在UI界面上自行添加 xff0c 都是预置的 如果需要添加一个新的自定义端口 xff0c 需要通
  • putty连接云服务器超时的解决方法

    putty连接云服务器超时 别用edu xff0c 闪讯等代理的无线网 xff0c 估计是由代理方的安全策略屏蔽了22端口出现问题 我换了手机热点就连上了
  • 去哪儿网2019秋招笔试题

    1 题目描述 xff1a 给出一个由 100 100 之间整数组成的数组 xff0c 求其相加和最大的连续子数组 输入 一个连续整数组成的数组 输出 子数组相加的最大值 样例输入 1 2 3 2 4 6 样例输出 7 2 题目描述 xff1
  • 【Java】JSONarray转JSONobject

    公司开发有用到 xff0c 但是经常会忘记 xff0c 做笔记记录一下 xff01 1 将数据包转成JSONarray 2 使用for循环遍历JSONarray 这里使用size 方法 3 每次循环取到的JSONObject对象 4 再根据
  • 无人机上需要哪些程序? 以及如何进行无人机编程?

    基于WICED的WIFI四轴飞行器 xff0c 手机APP控制 xff08 硬件 核心代码 算法等 xff09 飞行器 电路城 https www cirmall com circuit 4820 details 本设计中四轴飞行器无线控制
  • TypeError: Expected Ptr<cv::UMat> for argument ‘mat‘

    1 xff0c 报错TypeError Expected Ptr xff1c cv UMat xff1e for argument mat 2 xff0c 报错时代码段如下 import cv2 cv2 import numpy as np
  • Keil关于.axf文件报错

    项目场景 xff1a 熟悉Keil C51的同学在使用Keil MDK编译STM32系列单片机时会更容易上手 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统 xff0c 与汇编相比 xff0c
  • Manjaro安装配置指南

    由于可能会有偶尔重装系统的需要 xff0c 而每次配置都丢三落四 xff0c 浪费时间 xff0c 因此整理了自己需要的配置 xff0c 一直会继续更新的 1 安装 分区时选择手动分区 挂载点大小 boot efi500M boot1G 剩
  • 编程规范

    编程规范 1头文件 放置接口不放置实现 头文件只放置对外接口的声明 函数声明 宏定义 类型定义 xff0c 内部使用的这些声明不应该放在头文件中变量定义在c文件中 xff0c 尽量不要使用全局变量作为接口 xff0c 应通过函数来作为接口
  • antdv动态表单回显

    在项目中经常遇到动态表单的业务 在编辑动态表单时需要回显新增后的内容 本文介绍Ant Design of Vue 的动态表单回显 比如新增时添加了两行动态表单 xff0c 在第二次编辑时需要进行回显 下面是表单的HTML代码 span cl
  • IMU在slam系统中的应用(三)

    在IMU在slam系统中的应用 二 中给出了IMU预积分计算推导以及代码 xff0c 这里给出IMU误差递推方程的推导 xff08 一 xff09 一段时间多个IMU数据预积分量协方差 单个IMU数据作为测量值 xff0c 其噪声方差我们可
  • docker 启动 jenkins 挂载目录权限问题 Permission denied

    通过 docker 挂载目录的 jenkins xff0c 查看 jenkins 日志发现存在一些文件无法写入或者 Permission denied 这样的异常错误 xff0c 基本可以判定是文件所有权问题 比如你宿主机挂载的文件目录是
  • VMware虚拟机硬盘扩展是灰色的

    问题描述 VMware虚拟机硬盘空间不足时 xff0c 想扩展空间 xff0c 但VMware虚拟机硬盘扩展是灰色的 xff0c 无法完成扩展操作 解决方案 进入虚拟机快照管理器 xff0c 删除快照 xff0c 删除后就可以扩容
  • ORB_SLAM2安装与编译报错的解决办法

    目录 1 安装教程 xff08 本教程参考网络课程资料 xff09 1 1 安装前准备 1 2 安装Pangolin 建议源码安装 1 3 安装OpenCV3 4 建议源码安装 1 4 安装Eigen3 3 7 建议源码安装 1 5 安装运
  • ROS安装与报错的解决办法

    目录 1 安装步骤 xff08 1 xff09 添加ROS软件源 xff08 2 xff09 添加秘钥 xff08 3 xff09 安装ROS xff08 4 xff09 初始化rosdep xff08 5 xff09 设置环境变量 xff
  • OpenCV - C++实战(06) — Grabcut图像分割

    目录 第6章 图像分割 6 1 Grabcut实现 6 1 1 定义前景和背景 6 1 2 cv grabCut 6 1 3 cv compare 6 1 4 算法实现 Github代码地址 xff1a GitHub Qinong Open
  • 相机标定 - (02) - 相机标定步骤与原理

    目录 2 相机标定步骤 2 1 张正有标定操作步骤 2 2 张正有标定原理 2 相机标定步骤与原理 参考文章 xff1a 三步骤详解张正友标定法 谜之 摄影爱好者的博客 CSDN博客 1998年 xff0c 张正友提出了基于二维平面靶标的标