多传感器标定——相机内参标定

文章目录

  • 一、前言
  • 二、内参标定流程
  • 三、如何提升标定精度
  • 四、精度验证
  • 五、内外参联合标定

一、前言

之前写过一篇文章(相机内参、外参、畸变系数简介),感觉应该把这几个东西说的还算明白,但是里边并没有深究该如何进行标定,正好在这次学习中进行补充。
我面试时的体验就是,如果你没有那种一眼吊的科研成果,那么项目中再大的创新也就那么样,不如把时间花在了解项目细节上,比如内参标定到底是怎么实现的,而不是面试官问起你这个问题,你只能跟我一样傻笑道我调了opencv的库。。。。。。接着面试官又问,函数的每个输入输出都是什么?对不起,沉默是今晚的康桥。。。。。。哥们都是现用现百度。

二、内参标定流程

  1. 标定板准备
    标定板种类有很多种,棋盘格、圆点阵、ChArUco板。为了避免歧义性——指定的3D角点坐标与算法输出的角点像素坐标存在多种对应关系,棋盘格和圆点阵的关键点阵列尺寸都是奇数×偶数,并且圆点阵是非对称排列的,以保证匹配的唯一性。ChArUco板长很像是一堆二维码,不像前两种板需要所有关键点都出现在视野中,ChArUco板允许出现遮挡。

    我只用过前两种,实际用下来感觉精度没有很大差别?但是由于我的应用场景是机器人的手眼标定,所以更喜欢使用棋盘格,因为棋盘格更容易验证标定精度。至于到底哪个更好,好像也没个确切结论,大多数人可能是因为opencv里说非对称圆点阵更好就认为它更好,但是一篇论文中说可能棋盘格会是更好的选择?观点来源

    至于标定板的制作,需要考虑到你的精度要求。你当然可以自己打印贴在板子上,但据我自己经验,打印出来的尺寸总跟我设计的尺寸有点差别,不清楚是不是打印设置的原因,还得用尺子去量,并且贴在板子上也不会完全平整,这都引入了误差,只适合于用在一些低精度要求的场景下。也可以直接淘宝解君愁,你会猛的发现,高精度的标定板居然可以那么贵。。。。。

  2. 拍摄标定图像
    在不同位置或角度下,使用相机拍摄多张包含标定板的图像,尽量覆盖整个图像传感器的视场。我之前搞机器人手眼标定是拿了一块标定板,不断变换机器人位姿去采集图像,为了获得更好的效果,两次采集之间的位姿还有要求,采数据搞得我很痛苦,但现在发现是贫穷限制了我的想象,完全可以固定机器人,在视场中摆放各种标定板。

  3. 对采集到的图像做特征点提取,获得像素坐标

  4. 对焦距、主点和镜头畸变进行估计

  5. 计算重投影误差
    这边记录一个问题,计算重投影误差只能评估标定好坏?还是说可以做类似反向传播的过程,进一步优化内参参数。(最开始授课老师说可以,但是后边提到的只是其评估作用,比较疑惑)

比较常用的标定方法是张正友标定法,理论推导可以参考这篇链接,写的很详细参考文章

下面仅作为我自己的简单记录,没啥必要看
1. 将图像视作无畸变计算内外参(先算H,再算B,再算A,再求G)
2. 用内外参将3D坐标(认为指定的)变换成像素坐标,视作无畸变坐标
3. 采集图像中提取出的角点是有畸变坐标,无畸变为输入,有畸变为输出,求解畸变系数
4. 循环几次,直至误差满足要求
注:求解的最低要求是,每张图片上至少4个角点以满足对H的求取(齐次矩阵,8个自由度,每个角点uv提供两个方程)。至少3张标定板图片完成对B的求取(B是 A − T A − 1 A^{-T}A^{-1} ATA1,3*3对称,所以有6个自由度)。

三、如何提升标定精度

  • 提高数据质量:一方面提高标定板制作精度,另一方面采集的数据也要尽量高质量(不同角度、不同距离的数据都要有;要尽量覆盖全部视野;采集到的数据要完整清晰)
  • 选取更高精度的模型:张正友标定模型中只考虑了两项畸变系数,并且也不适用于FOV特别大的鱼眼镜头,当FOV超过170°时可以选用OCamCalib模型
  • 标定存在随机性,可以多次标定取平均值

四、精度验证

  • 观察图像是否正常
  • 计算重投影误差:但重投影误差只能评估标定结果在当前数据集上的表现
  • 直线度检测(这地方没看明白怎么做的)

五、内外参联合标定

这部分完全听不懂在干什么,课上说这个方法出自mobileye,得查一下
在这里插入图片描述

课件里这部分说的是相机和雷达之间的外参,与自车之间的目前还不知道如何标定
在这里插入图片描述
最终目标是希望相机视野中各个区域的像素都能和雷达精确的配准
在这里插入图片描述
下面的图展示了,分开标定和联合标定的差异,a是分开标定的原图,b是分开标定的结果图,cd是联合标定的图。
尽管b中畸变去除的已经比较好了,但可能是内参标定时候其他系数有误差,导致相机与雷达对不齐。而联合标定会对参数做迭代优化,使得最终结果尽可能对齐。本质上就是开环和闭环的区别喽~
在这里插入图片描述

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

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

相关文章

牛客NC153 信封嵌套问题【中等 动态规划,最长递增子序列 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/9bf77b5b018d4d24951c9a7edb40408f 相同的题目: https://www.lintcode.com/problem/602 思路 本质是求最长子序列问题envelopes 先按 w 升序排序,再按 h 降序 排序,只需考虑h…

一条SQL在MySQL中的执行过程

图解: 第⼀步:连接器 过程 1. 建⽴连接:与客户端进⾏ TCP 三次握⼿建⽴连接; 2. 校验密码:校验客户端的⽤户名和密码,如果⽤户名或密码不对,则会报错;3. 权限判断&#xff1a…

手机无线投屏到windows11电脑

1 安装无线投影组件 2 电脑端打开允许其他设备投影的开关 3 手机找到投屏选项 4 手机搜索可用设备连接即可 这里的官方文档给的不太好,给了一些让人眼花撩乱的信息,以下是经过整合的有效信息

金融衍生品市场

金融衍生品市场 衍生金融品的作用衍生金融工具远期合约期货合约期权 衍生金融品的作用 套期保值(Hedging) 组合多头头寸(long position)与空头头寸(short position)例:股票与股指期货 投机 衍生金融工具 远期合约 定义:在将来…

翻译: 硅谷软件工程师面试:准备所需的一切

没有人有时间去做成百上千道LeetCode题目,好消息是你实际上并不需要做那么多题目就能够在FAANG公司找到工作! 我曾经在Grab工作,这是东南亚的一家共享出行公司,但我对工作感到沮丧,想要进入FAANG公司,但我…

【opencv】教程代码 —features2D(5)旋转相机的基本全景拼接

基本全景拼接 panorama_stitching_rotating_camera.cpp 将第二张图像进行透视变换后与第一张图像拼接 #include <iostream> // 包含了一些用于输入输出的函数 #include <opencv2/core.hpp> // 包含了OpenCV核心库的一些常用类和函数 #include <opencv2/imgpro…

Android视角看鸿蒙第十课-鸿蒙的布局之线性布局

Android视角看鸿蒙第十课-鸿蒙的布局之线性布局 导读 这篇文章开始&#xff0c;依次学习鸿蒙的八大布局&#xff0c;这是第一篇&#xff0c;所以顺带也会聊聊通用属性。 文档地址 文档地址 如何定义一个线性布局 Android中是使用LinearLayout来构建线性布局的&#xff0c…

ChatGPT chrome扩展下载与安装

官方下载地址 https://chromewebstore.google.com/detail/lpbhmlbicmgjpacbofijdfpcplfhakeo 截图 安装 离线安装 下载地址 https://static.xutongbao.top/app/chatgpt-chrome-crx-v0.0.7.zip 打开链接 chrome://extensions/ 人工智能学习网站 https://chat.xutongbao.to…

谷粒商城——RabbitMQ

0. 消息中间件 1.RabbitMQ的核心概念 2. 工作流程 整体架构&#xff1a; 相关细节&#xff1a; 上述要注意的是&#xff1a; 路由键包含在message的头中&#xff0c;其作用是用于指定该消息存储与哪个消息队列中。 信道是客户端&#xff08;包括生产者和消费者&#xff09;用…

Vue 组件化编程

Vue 组件化编程 非单文件组件 定义组件 使用Vue.extend(options&#xff09;创建 不要写eldata要写成函数&#xff0c;避免组件被复用时&#xff0c;数据存在引用关系 注册组件 局部注册&#xff1a;new Vue()的时候&#xff0c;options传入components全局注册&#xff1a;V…

回收站删除以后还能撤销吗 回收站删除以后怎么找回 回收站清空了怎么恢复 easyrecovery数据恢复软件

回收站删除以后能撤销吗&#xff1f;有不少网友前一秒清空回收站&#xff0c;后一秒就开始在网上疯狂搜寻如何撤销删除回收站的办法。实际上&#xff0c;清空回收站并不可怕&#xff0c;被删除的数据仍然保存在我们的电脑硬盘中。今天我为大家介绍回收站删除以后怎么找回数据的…

HTTP 常见面试题(计算机网络)

HTTP 基本概念 一、HTTP 是什么&#xff1f; HTTP(HyperText Transfer Protocol) &#xff1a;超文本传输协议。 HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。 「HTTP 是用于从互联网服务器传输超文本到本…

苍穹外卖04 (新增内表的外键id获取,多表分页查询,多表批量删除,修改先查在改内表外键id用主表的,起售时包含了“停售”状态的外关联表)

1. 新增套餐 1 需求分析和设计 业务规则&#xff1a; 套餐名称唯一 套餐必须属于某个分类 套餐必须包含菜品 名称、分类、价格、图片为必填项 添加菜品窗口需要根据分类类型来展示菜品 新增的套餐默认为停售状态 2 代码实现 1 根据分类id查询菜品 DishControllerGetMa…

【C语言环境】Sublime中运行C语言时MinGW环境的安装

要知道&#xff0c;GCC 官网提供的 GCC 编译器是无法直接安装到 Windows 平台上的&#xff0c;如果我们想在 Windows 平台使用 GCC 编译器&#xff0c;可以安装 GCC 的移植版本。 目前适用于 Windows 平台、受欢迎的 GCC 移植版主要有 2 种&#xff0c;分别为 MinGW 和 Cygwin…

数据分析之POWER BI Desktop可视化应用案列

在power bi中导入数据 导入前期建好的模型 简单介绍&#xff08;power bi desktop&#xff09; 将右边字段全部展开 各类数据 所作的模型 在excel中是单向的&#xff0c;power bi 中可以是双向的 右键单击----点击属性 选择两个---在两个方向上应用安全筛选器 变为双向的…

每日面经分享(pytest入门)

1. pytest具有什么功能 a. 自动发现和执行测试用例&#xff1a;pytest可以自动发现项目中的测试文件和测试函数&#xff0c;无需手动编写测试套件或测试运行器。 b. 丰富的断言函数&#xff1a;pytest提供了丰富的断言函数&#xff0c;方便地验证测试结果是否符合预期。断言函…

flask的使用学习笔记1

跟着b站学的1-06 用户编辑示例_哔哩哔哩_bilibili flask是一个轻量级&#xff0c;短小精悍&#xff0c;django大而全 创建&#xff1a; manage.py和一个和项目名称相同的目录&#xff08;static&#xff08;前端生成的dist&#xff09;、templates&#xff08;html文件&…

【吴恩达机器学习笔记】神经网络初探

前言 传统机器学习不足 【例】预测房价&#xff0c;不同的房子有上百个特征 如果要包含所有的二次项&#xff08;即使只是二次&#xff09;&#xff0c;最终也有很多项&#xff0c; 每个参数都有 n 个变量&#xff0c;那二次项数量将会是 n^2 /2 级别的量级&#xff0c;模型…

并查集

本文用于个人算法竞赛学习&#xff0c;仅供参考 目录 一.什么是并查集 二.并查集实现 三.路径优化 四.时间复杂度 五.并查集路径压缩 模板 五.题目 一.什么是并查集 并查集&#xff08;Disjoint Set&#xff09;是一种数据结构&#xff0c;用于处理一系列不相交的集合的合…

一文了解JAVA的常用API

目录 常用kpimathSystemRuntimeObjectObjectsBigIntegerBigDecima正则表达式包装类 常用kpi 学习目的&#xff1a; 了解类名和类的作用养成查阅api文档的习惯 math 工具类。因为是工具类&#xff0c;因此直接通过类名.方法名(形参)即可直接调用 abs&#xff1a;获取参数绝对…