相机内参标定理论篇------相机模型选择

相机种类:

当拿到一款需要标定内参的相机时,第一个问题就是选择那种的相机模型。工程上相机类型的划分并不是十分严格,一般来说根据相机FOV可以把相机大概分为以下几类:

长焦相机:<= 30^{o}

标准相机:40^{o}~60^{o}

广角相机:60^{o}~140^{o}

鱼眼相机:>140^{o}

这里按角度的划分并不是绝对严格,临界处的相机用两种模型中的任意一种都可以。

有时也可能会遇到变焦相机和定焦相机之分,但变焦相机在标定内参时也需要固定焦距,因此也可以划分到上面几类。这里需要注意内参和焦距的严格对应的,当调焦后需要重新标定相机内参。

不同角度的相机需要选择不同的相机模型来标定相机内参。相机模型又分为投影模型畸变模型。接下来分别进行讨论。

长焦相机:

长焦相机的标定一般采用针孔相机模型,但在实际标定中我们很难通过标定板来标定长焦相机。长焦相机的景深太大,普通标定板由于尺寸较小会导致其在采集的图像中所占区域太小,无法提供足够的约束来标定外参。如果强行在近处采集标定板图像,会造成图像上标定图像模糊不清,从而导致角点提取误差较大,甚至失败。因此标定时计算外参会有非常大的误差,又因为相机内参和外参在投影时具有耦合的效应,即使重投影误差非常小也无法保证内参的正确性。这也是为什么重投影误差只能作为内参精度的参考,而无法作为衡量标准。

所以一般来说不建议个人去标定长焦相机,即使标定出来结果也很有可能是错误的。之前笔者还是小白的时候尝试使用标定板标定长焦相机,虽然重投影误差很小但内参精度较差,点云投影效果还没有使用相机厂商提供的参考内参值精确。如果必须自己标定的话也不建议用标定板的方式,需要设计新的方法,核心是保证参照物能够提供足够的约束。

标准相机:

针对标准相机工程上采用针孔相机模型标定。其原理类似于小孔成像,不同之处在于为了增加透光量采用凸透镜。其投影模型为针孔投影模型,原理如下图所示:

接下来考虑其畸变模型,这里需要了解一下概念:径向畸变和切向畸变。

一般来说,制造透镜很难保证曲率和设计的一致,曲率制造的误差会造成相机成像是在径向产生误差即径向畸变。径向畸变主要有以下两种:桶型畸变和枕型畸变。

径向畸变主要描述畸变量和像素到图像中心距离的关系,后续会在具体公式讨论。

同样安装时镜头和成像平面无法保证绝对平行,因此会产生切向畸变:

切向畸变主要描述成像平面和光轴之间的倾斜角度。因此针孔相机模型的畸变模型是径向切向畸变模型。

接下来看如何将相机坐标系下的点投影到图像上:相机坐标系->图像坐标系->像素坐标系。

具体公式如下:

\begin{bmatrix} x\\ y\\ 1 \end{bmatrix} = \frac{1}{Z}\begin{bmatrix} fx & r & cx\\ 0 & fy & cy\\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} X\\ Y\\ Z \end{bmatrix}

一般投影时先对空间三维点归一化:

\begin{bmatrix} x\\ y\\ 1 \end{bmatrix} = \begin{bmatrix} fx & r & cx\\ 0 & fy & cy\\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} \frac{X}{Z}\\ \frac{Y}{Z}\\ 1 \end{bmatrix}

其中u v是无畸变点,r描述相机坐标xy轴是否垂直,一般情况下为0。接下来对点加径向畸变:

x_{distored} = x(1 + k_{1}r^{2} + k_{2}r^{4} + k_{3}r^{6})

y_{distored} = y(1 + k_{1}r^{2} + k_{2}r^{4} + k_{3}r^{6})

其中k1 k2 k3是径向畸变参数。有时会遇到k4 k5,也是径向畸变参数,不过一般用到k3就行了。因为径向畸变是泰勒展开的多项式拟合,用到太多畸变参数就会存在过拟合问题反而效果不好。

上面提到的枕型畸变和桶型畸变与k的取值有关,当k都大于零时就会产生枕型畸变,反之则会产生桶型畸变。

接下来再加上切向畸变:

x_{distored} = x + [2p_{1}xy + p_{2}(r^{2} + 2x^{2})]

y_{distored} = y + [2p_{2}xy + p_{1}(r^{2} + 2y^{2})]

以上就是相机坐标系下点投影到图像上像素的整个过程。

广角相机:

广角相机和鱼眼相机其实都属于鱼眼相机的范畴,只是标定时选择的相机模型不一样。在介绍接下来几种相机模型前还是简单介绍鱼眼相机相关的基础知识以方便理解。

                 

        你以为的鱼眼相机                                                       实际的鱼眼相机

我们知道鱼眼相机的初衷是为了让相机看到尽可能大的视野,也就是尽可能将场景中的物体投影到图像上,因此鱼眼相机通过组合多个镜头将光线多次折射到图像平面上。鱼眼相机需要根据某种投影模型进行设计,常见的设计模型主要分为四种:等距投影模型、等立体角投影模型、正交投影模型和体视投影模型。其投影过程如下图所示,除了f*tan(\theta)对应针孔投影模型外,其它四种对应上面四种。

鱼眼相机四种投影模型其中最常用的是等距相机模型,所以主要对等距相机模型进行讨论,其它模型感兴趣自己上网搜索。等距相机模型:

投影公式为:r = f * \theta,r为成像的高,\theta为入射角。该模型描述成像的像高和入射角成正比。

广角相机最好选择等距相机模型,OpenCV中使用的模型是由Kannala提出的一种鱼眼相机的一般近似模型。是在等距投影模型的基础上提出来的。接下来对OpenCV中相机模型进行分析。整体过程如下图所示:

这里主要是利用相机模型将世界坐标系下点投影到图像上的过程。第一步是将世界坐标系的点通过外参转到相机坐标系下,然后转到归一化平面上。这时考虑畸变对投影的影响,也可以看出等距相机模型的畸变只考虑了径向畸变没有考虑切向畸变。

已知等距相机模型r = f * \theta,在实际中很难按设计模型制造,因此使用多项式拟合。最后得到包含畸变后新的\thetad。接着计算归一化平面上带畸变的投影点x^{'},y^{'}。然后利用针孔投影模型将点投影到图像上。上面公式中有一个\alpha,这个是表征图像平面xy是否垂直的参数,很多情况下默认为0。

鱼眼相机:

作者个人经验,小于180度的相机可以使用OpenCV中相机模型来标定相机,但是如果相机度数大于180度时OpenCV标定出来的效果并不是十分好。

这时标定相机可以用的相机模型有kalibr的MEI模型或是Davide Scaramuzza的ocam相机模型。但在实际应用中ocam相机模型更好一些。

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

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

相关文章

TCP状态转换/ 半连接/ 端口复用代码实现

三次挥手的时候的状态转换 TCP&#xff08;Transmission Control Protocol&#xff09;的三次握手是建立TCP连接的过程。在三次握手中&#xff0c;涉及到的状态转换如下&#xff1a; Closed&#xff08;关闭状态&#xff09;&#xff1a; 初始状态&#xff0c;表示没有任何连接…

uni-app condition启动模式配置

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

【论文阅读+复现】SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models

SparseCtrl:在文本到视频扩散模型中添加稀疏控制。 &#xff08;AnimateDiff V3&#xff0c;官方版AnimateDiffControlNet&#xff0c;效果很丝滑&#xff09; code&#xff1a;GitHub - guoyww/AnimateDiff: Official implementation of AnimateDiff. paper&#xff1a;htt…

javaWeb蛋糕商城(前后台) 2

目录 摘要 1 关键词 1 前言 2 第一章 绪论 3 1.1 选题背景 3 1.2 选题的目的和意义 3 第二章 关键技术介绍 4 2.1 JSP 4 2.2 JDBC 5 2.3 Servlet 5 2.4 MVC模式 5 2.5 Ajax 5 第三章 系统分析及设计 5 3.1 需求分析 5 3.1.1 任务概述 5 3.1.2 功能需求 6 3.1.3 其它需求 6 3.2…

射频PCB电路布局设计及布线注意事项

在电子产品和设备中&#xff0c;电路板是一个不可缺少的部件&#xff0c;它起着电路系统的电气和机械等的连接作用。如何将电路中的元器件按照一定的要求&#xff0c;在PCB上排列组合起来&#xff0c;是PCB设计师的主要任务之一。布局设计不是简单的将元器件在PCB上排列起来&am…

探究element-ui 2.15.8中<el-input>的keydown事件无效问题

一、问题描述 今天看到一个问题&#xff0c;在用Vue2element-ui 2.15.8开发时&#xff0c;使用input组件绑定keydown事件没有任何效果。 <template><div id"app"><el-input v-model"content" placeholder"请输入" keydown&quo…

【中小型企业网络实战案例 四】配置OSPF动态路由协议

【中小型企业网络实战案例 三】配置DHCP动态分配地址-CSDN博客 【中小型企业网络实战案例 二】配置网络互连互通-CSDN博客 【中小型企业网络实战案例 一】规划、需求和基本配置_大小企业网络配置实例-CSDN博客 配置OSPF 由于内网互联使用的是静态路由&#xff0c;在链路出…

如何快速下载huggingface模型

Huggingface国内开源镜像 https://hf-mirror.com/ 上面总结了多种从Huggingface上下载模型的方法&#xff0c;如下图。 方法一&#xff1a;使用huggingface官网提供的huggingface-cli工具 官方详解地址https://huggingface.co/docs/huggingface_hub/guides/download 1. 安装…

Arduino中手写脉冲控制步进电机-2

目录 1、前言 2、时间-位移关系计算 3、Matlab计算时间和位置数据 (1)Matlab程序 &#xff08;2&#xff09;Arduino程序 4、Matlab生成Arduino电机正反转程序语句 &#xff08;1&#xff09;Arduino程序 &#xff08;2&#xff09;Matlab 命令行方式生成Arduino步进电…

【Unity自制手册】基于Unity中物体移动相关方法和API集锦(动图详解)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

IPEmotion数据采集软件功能介绍

IPEmotion作为IPETRONIK的软件产品&#xff0c;主要应用于车辆测试和不同的实验室测试系统&#xff0c;能够满足各种测量需求。通过专业化的数据采集软件IPEmotion&#xff0c;我们可实现完整的数据采集过程&#xff0c;包括&#xff1a;配置数据采集设备&#xff1b;使用不同的…

SD-WAN企业组网的核心要点

随着企业网络需求的不断演进和全球化业务的扩张&#xff0c;SD-WAN&#xff08;软件定义广域网&#xff09;作为一种先进的网络架构技术&#xff0c;逐渐成为企业组网的首选方案。SD-WAN通过提供更灵活、高效和安全的网络连接&#xff0c;帮助企业轻松应对不同地区和业务需求。…

计算机毕业设计---ssm+mysql+jsp实现的校园二手市场交易平台源码

项目介绍 本系统主要实现的功能有&#xff1a; 前台&#xff1a;&#xff08;1&#xff09;二手物品信息查看、搜索。 &#xff08;2&#xff09;学生注册登录、个人信息修改。 &#xff08;3&#xff09;二手物品信息发布、编辑。 &#xff08;4&#xff09;二手物品评论、回…

【Unity细节】为什么按下移动键之后,物体还是会滑行一段距离(阻力都无穷大了)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 &#x1f636;‍&#x1f32b;️收录于专栏&#xff1a;unity细节和bug &#x1f636;‍&#x1f32b;️优质专栏 ⭐【…

内存满了无法开机(Ubuntu)

文章目录 在开机界面长按“shift”进入进入shell命令模式详细步骤选择Recovery Menu删除不需要的文件 在开机界面长按“shift”进入 进入shell命令模式详细步骤 选择Recovery Menu 删除不需要的文件 自己看着办吧

STM32 IIC开发学习

1IIC总线时序图 ① 起始信号 当 SCL 为高电平期间&#xff0c;SDA 由高到低的跳变。起始信号是一种电平跳变时序信号&#xff0c;而不是 一个电平信号。该信号由主机发出&#xff0c;在起始信号产生后&#xff0c;总线就会处于被占用状态&#xff0c;准备数据 传输。 ② 停止信…

Android 8.1 设置USB传输文件模式(MTP)

项目需求&#xff0c;需要在电脑端adb发送通知手机端接收指令&#xff0c;将USB的仅充电模式更改成传输文件&#xff08;MTP&#xff09;模式&#xff0c;便捷用户在我的电脑里操作内存文件&#xff0c;下面是我们的常见的修改方式 1、android12以下、android21以上是这种方式…

腾讯云轻量应用主机与云服务器功能、性能区别对比总结

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三…

事务的简介

一、什么是事务 事务是一组数据库的操作序列&#xff0c;包含一个或多个sql操作命令&#xff08;增删改&#xff09;&#xff0c;事务将所有的操作命令看做一个不可分割的整体&#xff0c;向数据库系统提交或撤销操作&#xff0c;所有操作要么执行要么不执行。 ●事务是一种机…

VR全景图片制作时有哪些技巧,VR全景图片能带来哪些好处

引言&#xff1a; VR全景图片是通过虚拟现实技术制作出的具有沉浸感的图片&#xff0c;能够提供给用户一种身临其境的感觉。在宣传方面&#xff0c;它有着独特的优势和潜力&#xff0c;能够帮助吸引更多的潜在客户&#xff0c;那么VR全景图片制作时有哪些技巧&#xff0c;VR全…