相机标定笔记(2) -- 标定实践

news2024/10/2 12:23:55

标定板

为什么需要标定板?

        相机标定的第一篇笔记中提到了相机标定所使用的模型,标定算法中我们需要一些可靠的样本点,这些样本点由世界坐标系中的3D点和其在图像上的2D像点组成。用这些2D和3D点对来求解标定参数。为了构建更高精度的3D和2D点,就需要使用标定板。

标定板的基本要求

        标定板的精度(平整度):3D点要求是共面的,标定点的坐标精度是准确的。

        标定板的稳定性:降低温度膨胀系数。标定板的材质温度膨胀系数要尽可能小。

        标定板的均匀性(背光源):要求标定板有背光的原因是尽量减少图像受环境光的干扰。

        Pattern设计要求

                a. 便于特征点提取(如角点或圆心);

                b. 特征点的坐标无歧义,比如对于棋盘格这种有规律的pattern,要求棋盘格图像整体的大小不要充满整个图像,比如只占拍摄图像的1/2。

                关于b点,我们假设棋盘格图像是充满整个拍摄图像的,在双目视觉中,假设左右相机所拍摄到的画面如下图(仅做说明,并非真实情况): 

         红色框框是左边相机所拍到的画面,蓝色框框是右边相机所拍到的画面。那么此时做左右画面的特征匹配的时候,由于棋盘格的规律性很强,此时匹配左右画面中相同的方块特征的时候,要找到匹配的方块是比较困难的,会误判。

         关于b点,还有一种做法是,在pattern设计上加入一些tag用于区分有规律的图像。要求在标定过程中这个tag一定要能被拍摄到用来做参考位置。具体例子如下图所示的一些带标记的标定板:

 标定板对标定精度的影响

        一般来讲,圆形(圆环)标定板的提取精度高于棋盘格的提取精度。主要原因是对于棋盘格来讲,边缘位置在实际相机所拍摄的图像来看,受到光的影响和sensor本身噪声影响,所得到的灰度可能会有明暗差别,导致计算棋盘格中心点位置的时候会有误差。而圆形或圆环的拟合中,半径多一点或少一点,对于圆心位置的计算影响相对较小。

        参考论文:Accurate Camera Calibration using Iterative Refinement of Control Points

        链接:https://www.ri.cmu.edu/pub_files/2009/10/Calib.pdf

标定步骤

标定结果评估

主要关注标定精度和鲁棒性两方面

对于标定精度,常见评估方法有:

        重投影误差

        对于双目:可以采用极线校正的精度进行评估

        对于结构光:图像校正的精度

        针对标准件的3D重建的精度(如标定板)。通过将图像坐标系的2D点反投影到相机坐标系中,计算标准件特征(比如两个圆心的距离)的物理距离。看看和标准件的实际距离的差异。

关于重投影误差的参考资料,可以参考这篇文章:

一文读懂重投影误差_少杰很帅的博客-CSDN博客_重投影误差重投影误差1、重投影误差的作用在计算机视觉中,经常会用到重投影误差(Reprojection error)。比如在计算平面单应矩阵和投影矩阵的时候,往往会使用重投影误差来构造代价函数,然后最小化这个代价函数,以优化单应矩阵或者投影矩阵。之所以使用重投影误差,是因为它不光考虑了单应矩阵的计算误差,也考虑了图像点的测量误差,所以其精度会更高。2、重投影误差的含义首先我们从字面意思来理解,重投影的意思就是第二次投影。有第二次投影,就有第一次投影。  其实第一次投影指的就是相机在拍照的时候三维空间点投影到https://blog.csdn.net/weixin_49804978/article/details/121922128

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

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

相关文章

对于系统架构来说,要么进化,要么死亡

在亚马逊云科技年度re:Invent,亚马逊首席技术官Dr. Werner Vogels的主题演讲历来涵盖大量科学和技术领域,今年的演讲也不例外,座无虚席。现在,亚马逊云科技 2022 re:Invent 中国区 recap 正式也开始了,欢迎大家积极参与…

单例模式之饿汉模式懒汉模式

前言 单例模式能保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例,比如 JDBC 中的 DataSource 实例就只需要一个。单例模式具体的实现方式有"饿汉" 和 "懒汉" 两种。 1.饿汉模式(类加载的同时创建实例&…

SOLIDWORKS装配体如何快速导出BOM丨慧德敏学

BOM作为产品数据的组成部分,它的重要性不言而喻。采购需要BOM、成本核算需要BOM、领料加工和装配需要BOM、录入ERP需要BOM……可以说,BOM与图纸同样重要,有些产品,可以没有图纸,但是不能没有BOM。借助SOLIDWORKS BOM插…

带你打开C语言的大门

最近有刚开始学习编程的同学问我:“C语言是什么?C语言是怎么来的?C语言用来干什么?”。对,在学习C语言之前,首先了解C语言的发展例程,这应该是每一个刚刚开始学习C语言的人应该了解的&#xff0…

什么是"文件表项"

从Linux的层次角度来说,在用户空间是存在这样的概念的,这个概念是存在内核空间的,而且是针对打开的文件的! 内核用三种数据结构来描述一个打开的文件。 数据结构一: 文件描述符表(descriptor table): 每个进程都有它独立的描述符表…

【代码调试】《FSCE: Few-Shot Object Detection via Contrastive Proposal Encoding》

论文地址:https://arxiv.org/pdf/2103.05950.pdf 代码地址:https://github.com/megvii-research/FSCE 论文阅读:https://blog.csdn.net/qiankendeNMY/article/details/128390284 我的配置: Python :3.8(ubuntu18.04) …

小程序发布体验版流程

一、微信开发者工具操作 1. 点击 工具 -> 上传(或 直接点击右上角“上传”按钮) 【注意】 如果使用的测试 appid 则【上传】按钮不能点击,必须使用真实 appid 2. 如果之前有发布过体验版,会提示继续操作将会覆盖之前的体验版…

MyBatisPlus ---- 基本CRUD

MyBatisPlus ---- 基本CRUD1. BaseMapper2. 插入3. 删除a>通过id删除记录b>通过id批量删除记录c>通过map条件删除记录4. 修改5. 查询a>根据id查询用户信息b>根据多个id查询多个用户信息c>通过map条件查询用户信息d>查询所有数据6. 通用Servicea>IServi…

RK3588平台开发系列讲解(Display篇)开机视频的设置

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、开机视频功能介绍二、使用方法2.1、开启与关闭2.2、视频放置位置2.3、编译结果2.4、视频素材要求2.5、参数控制说明沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍RK3588平台开机视频的使用方法…

ARM64内存虚拟化分析(7)stage2异常处理

当虚拟机访问内存或虚拟机访问寄存器时,由于并没有分配真实的物理地址,并没有建立stage2映射,因此这两种情况会产生stage2异常处理,其中第一种情况为真实的stage2缺页,第二种情况为MMIO处理。同时如果在stage2产生外部…

零膨胀负二项回归案例分析

零膨胀负二项回归分析 计数研究模型中,常用泊松回归模型,但泊松回归模型理论上是要求平均值与标准差相等,如果不满足,则可使用负二项回归模型,负二项回归放宽了平均值标准差这一理论假定。 在实际研究中,…

网络协议类型

网络协议是一组规则、约定和数据结构,用于规定设备如何跨网络交换数据。换句话说,网络协议可以等同于两个设备必须理解的语言,以实现信息的无缝通信,无论其基础设施和设计差异如何。 OSI 模型:网络协议的工作原理 要…

Oracle数据库安装配置详细教程汇总(含11g、12c、18c、19c、21c)

不论你是数据库小白,还是久经沙场的技术专家,你接触和运维Oracle数据库的第一步可能都是安装配置。并且随着软硬件的升级、替换以及业务场景的变化,数据库安装也将是你常常会进行的操作之一。 这里先为大家附上Oracle各版本支持的生命周期及…

阶段性回顾(2)

1. 移位操作符的对象只能是整数,只能对整数的二进制位进行移动。 2. 二进制是数值的一种表示形式。一个整数占了四个字节,相当于一个整数可以用32位二进制位序列表示,那么这时候该如何判断正负呢?规定:这32位二进制序列的头一位如…

第二十二讲:神州路由器OSPF单区域路由的配置

实验拓扑图如下所示 设备 端口 IP 子网掩码 网关 Router-A F0/0 172.16.1.1 255.255.255.0 无 F0/3 172.16.0.1 255.255.255.0 无 Router-B F0/0 172.16.1.2 255.255.255.0 无 F0/3 172.16.2.1 255.255.255.0 无 PC1 172.16.0.2 255.255.255.0 172.1…

解决docker容器因报错无法启动的问题,检查、修复容器错误并重启

问题复现 使用: sudo docker ps -a查看当前的docker容器: 我们想启动name为【docker-mongo】的这个容器,因此要执行 sudo docker start docker-mongo但是执行后仍旧没有重启,大概率是重启的时候报错了,查看日志&a…

Spring Boot骚操作-多数据源Service层封装

mysql, es, mongodb 三个数据源用配置文件方式连接,JPA只是正对dao做了封装,本文主要介绍如何对service层进行封装。 Spring Boot - 多个数据源Service层封装 类关系图 封装的一些配置 application.yml pom.xml 封装后使用 MySQL 动态数据访问 Mong…

坦克大战1.0,java时间处理机制

1.java 绘图坐标体系 1.1 坐标体系-介绍 下图说明了Java坐标系。坐标原点位于左上角,以像素为单位。在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。…

金融业务如何高性能传输数据

对系统要求高,通常按金融级标准设计。金融数据传输要求速度快,流量大,极强容灾。 案例分析 简化版券商算法交易平台对接交易所: 涉及场景多。既有事务数据,也有市场数据模型简单。只涉及到2个主体复杂度可选。连接交…

【结构型】装饰模式(Decorator)

目录装饰模式(Decorator)适用场景装饰模式实例代码(Java)装饰模式(Decorator) 动态地给一个对象添加一些额外的职责。就增加功能而言,装饰模式 (Decorator) 比生成子类更加灵活。 适用场景 在不影响其他对象的情况下,以动态、透…