DLT相机标定算法

news2024/11/13 11:57:26

本教程介绍了直接线性变换 (DLT),这是一种用于解决以下类型方程组的通用方法:

这种类型的方程经常出现在射影几何中。一个非常重要的例子是场景中的 3D 点与它们在相机图像平面上的投影之间的关系。这就是为什么我们要使用此设置来激发 DLT 的使用。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割

1、相机模型

相机最常用的数学模型是所谓的针孔相机模型。由于相机的概念是在现实世界的物体和 2d 表示之间进行映射,因此相机模型由几个坐标系组成:

1.1 全局坐标

为了对相机位置和运动进行编码,我们使用参考坐标系  {e_x, e_y, e_z}(图的左侧部分)。在这个系统中,相机可以进行平移和旋转。平移表示为向量 t,旋转表示为 3x3 旋转矩阵 R。

通常,所有场景点坐标也在全球坐标系中指定,并且使用 R 和 t 将它们与相机坐标系关联起来,如下所示:

如果我们添加 1 作为额外维度,它就可以整齐地以矩阵形式表示。

1.2 相机坐标

相机坐标系  {e'_x, e'_y, e'_z}(位于图的中间)有一个原点 C = (0,0,0),代表相机中心或针孔。为了生成场景点 X = (X_1, X_2,X_3) 的投影 x = (x_1, x_2, 1),我们在 X 和 C 之间形成一条线,并将其与平面 Z = 1 相交。

这个平面也称为图像平面,与它相交的线是视线。人们可能会注意到,与物理相机不同,投影平面位于针孔前面。这样做是为了方便,并且图像不会像在真实模型中那样上下颠倒。

1.3 内部参数

在针孔相机模型中,图像平面位于 R^3 中,这意味着投影以真实世界单位的长度给出。但是当我们谈论图像时,我们使用指定尺寸的像素。在我们的示例图中,我们使用 640 x 480 像素。为了转换它,我们使用从嵌入在 R^3 中的图像平面到真实图像的映射(图的右侧)。

此像素映射由可逆三角 3 x 3 矩阵 K 表示,其中包含相机的内部参数,即焦距、主点、纵横比和轴倾斜。

1.4 完整表示

最后,我们可以将相机模型的所有三个部分关联到一个方程中:

或者更简洁地说:

其中 P 称为相机矩阵。

上面的等式现在看起来就像 DLT 可以帮助我们找到矩阵 P 的确切类型(如果我们愿意的话)。

2、相机标定

但是为什么我们首先需要解决它呢?大多数时候,我们感兴趣的是找到相机矩阵 P 的 K 部分。因为如果知道 K,我们就能知道相机已校准。使用校准后的相机,我们可以进行镜头失真校正、从照片测量物体,甚至从相机运动中估计 3d 坐标等操作。

为此,我们首先需要至少 6 个手动测量的数据点,然后我们可以使用 DLT 方法计算相机矩阵 P,最后使用 RQ 分解将 P 分解为 K [R  t]

3、DLT标定方法

DLT 方法的第一步是制定一个齐次线性方程组,并通过找到近似零空间来求解它。为此,我们首先用行向量表示 P:

然后我们可以将相机方程写成:

进而可以将其表示成矩阵形式:

请注意,由于 X_i 是一个 4 x 1 向量,因此每个 0 实际上代表一个 1x 4 的零块,这意味着我们将一个 3 x 3 矩阵乘以一个 1 x 1 向量。

如果我们将所有测量数据点的所有投影方程堆叠在一个矩阵中,我们将得到一个形式如下的系统:

重新排列方程后,我们只需在 M 的零空间中找到一个非零向量即可求解系统。然而,在大多数情况下,由于测量时有噪声,不会有精确解。因此,寻找最小化总误差的解更为方便,本质上是求解最小二乘问题。

解决该问题的一种方法是使用奇异值分解 (SVD)。分解大矩阵 M 后,我们可以取与最小奇异值相对应的右奇异向量,这样我们就找到了相机矩阵 P。然后,我们可以使用前面提到的 QR 分解方法将 P 分解为 K [R  t]}

4、结束语

在本文中,我们研究了针孔相机模型,并通过尝试找到给定相机模型的固有参数来激发离散线性变换 (DLT) 的使用。以这个设置为例,我们研究了该方法背后的方法论及其工作原理。


原文链接:DLT相机标定算法 - BimAnt

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

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

相关文章

二百五十二、OceanBase——Linux上安装OceanBase数据库(二):新用户配置ssh免密登录

一、目的 在OBD页面上部署OceanBase数据库时发现,需要把新用户也要配置ssh免密登录 二、前提 root用户已经设置免密登录 三、配置步骤 1 切换到新用户obadmin [roothurys23 ~]# su obadmin 2 执行命令生成秘钥文件 [obadminhurys23 oceanbase]$ ssh-keygen …

动态规划:基础篇

目录 1. 斐波那契数(LeetCode509) 解法1:动态规划(基础版) 解法2:动态规划(优化版) 2. 爬楼梯(方案个数)(斐波那契数列扩展)(LeetCode70) 解法1:动态规划(基础版) 解法2:动态规划(优化版) 3. 爬楼梯(最小花费)(LeetCode746…

品牌进行网络控价的原因和方法

品牌的控价管理是一项关乎其生存与发展的关键举措。在当今竞争激烈的市场环境中,价格的稳定与合理不仅影响着品牌的形象和声誉,更是直接关系到品牌的市场份额和盈利能力。 那些不重视控价管理的品牌,往往会陷入一片混乱。参差不齐的价格使得消…

Delphi5实现文件拷贝程序

效果图 opendialog、savedialog组件 对于类似TOpenDialog和TSaveDialog的功能,在Delphi 5中,你可能需要这样做: 查找或创建:首先,在Delphi 5的组件面板中查找是否有现成的文件对话框组件(拖拉组件下来到f…

【通俗理解】概率图模型——从概率到图形的直观映射

【通俗理解】概率图模型——从概率到图形的直观映射 概率与图形的类比 你可以把概率看作是一个“烹饪配方”,它告诉我们每个成分(事件)出现的可能性。而图形则是一个“食谱的图表”,它直观地展示了这些成分之间的关系和依赖。 概率…

深入探索:GPT系列模型揭秘

Transformer发展 之 GPT系列模型结构 我按照Transformer的发展路线来学习入门 Transformer–BERT—GPT—DETR—ViT—Swin ViT / DeiT 上一篇写了Transformer,听了李宏毅和李沐老师的课一下子就懂了,今天学习GPT-123 核心思想: GPT和BERT的…

服务器数据恢复—SAN环境下LUN被重复映射导致写操作不互斥的数据恢复案例

服务器存储数据恢复环境: 一台存储中有一组由6块硬盘组成的RAID6,划分为若干LUN,MAP到不同业务的SOLARIS操作系统服务器上。 服务器存储故障: 由于业务变化需要增加一台服务器,在存储在线的状态下将该存储中的某个LUN映…

打造沉浸式展厅空间,哪些高科技手段必不可少?

在人生的旅途中,我们或许会踏遍千山万水,将大地的壮丽景色尽收眼底。然而,总有一些地方,如同深邃的海底两万里,或是浩瀚无垠的宇宙银河,遥不可及,这时我们便可以在展厅的沉浸式空间中&#xff0…

Postman请求问题 connect ECONNREFUSED 127.0.0.1:80解决方法

问题描述: 解决方法: (1)点击file-settings (2)点击Proxy,并将右边的Use the system proxy 取消选中 (3)勾选use custom proxy configuration 这个8080是默认的&#xf…

MySQL学习(17):SQL编程:存储过程

1.什么是存储过程 存储过程是事先经过编译并存储在数据库中的一段 SQL语句的集合。 存储过程的特点: (1)封装,复用 (2)可以接收参数,可以返回数据 2.存储过程语法 2.1创建 create procedu…

查看Keepalived 的 VIP 有效、高可用、单播和组播

VIP(虚拟 IP) VRRP(Virtual Router Redundancy Protocol) 验证 VIP 是否有效 1、没有部署之前,PING要设置的VIP地址,不通 ping 10.119.108.602、部署之后,所有节点进行PING要设置的VIP地址&a…

代码实现yolov3主干网络,可以直接运行

1. 主干网head版本1 import torch from torch import nn import torch.nn.functional as F class ConvBnLeakRelu(nn.Module):def __init__(self,in_ch,out_ch,k3,s1):super().__init__()self.layernn.Sequential(nn.Conv2d(in_ch, out_ch, kernel_sizek, paddingk // 2,stride…

H264记录和翻译

官方中文文档: 📎H.264_ITU官方中文版.pdf 官方下载地址: https://www.itu.int/rec/T-REC-H.264/en JM源码: https://iphome.hhi.de/suehring/tml/download/ 博客参考学习:H.264官方软件JM源代码简单分析-解码器ld…

真免费!10 款必备的语言类 AI 大模型

好多小伙伴反映,买了好多AI工具,但并不好用,今天我给你推荐10个好用且免费的语言类AI大模型。 以后就别去花冤枉钱了。 排名不分先后。 各有所长,大家收藏自行去测试甄选适合自己的AI工具。 — 1 — 文心一言 文心一言是百度…

Android12 显示框架之getSurface

目录:Android显示终极宝典 在上篇文章中,我们讲到了应用通过createSurface()在surfaceflinger内生成了一个Layer,并且获取到了该Layer的Handle且将其和其他信息保存到了SurfaceControl。应用拿到了这个SurfaceControl,那么接下来…

uniapp APP端使用web-view,跳转回APP指定页面

URL Scheme 首先我一开始想到的是UrlSchemes,发现UrlSchemes不好实现就转为下面的方法 URL Scheme 是一种用于在移动应用程序中打开另一个应用程序或执行特定操作的机制。通过使用 URL Scheme,应用程序可以将用户重定向到其他应用程序或执行特定的任务…

大模型在自动驾驶领域是怎么应用的?最新综述一览

写在前面 大语言模型(LLMs)是在海量文本语料库上训练的人工智能模型,具备卓越的语言理解和生成能力,正在改变自动驾驶(AD)领域。随着自动驾驶系统从基于规则和优化的方法向基于学习的技术(如深…

关于企微群聊天工具功能的开发---PHP+JS+CSS+layui (手把手教学)

文章目录 前言准备工作PHP代码示例前端代码示例 主要是js踩的小坑&笔记最终达成的效果总结 前言 公司要求开发企微群聊天工具。首先一个客户一个群,其余群成员都是公司销售、设计师、工长、售后等人员。要求开发一个群聊天工具,工长点击进来以后就可…

selenium自动化代码报错“NoSuchElementException”——解决方案详解

假设自动化代码报错“NoSuchElementException”: 第一步:在报错的代码前,添加Thread.sleep(秒),设置的时间长一点。 第二步: 执行自动化,在自动化打开的页面里,打开前端开发者工具&#xff0c…

二百五十三、OceanBase——Linux上安装OceanBase数据库(三):OBD页面上部署OceanBase数据库

一、目的 安装OceanBase后,启动obd web,需要在OBD页面上部署OceanBase数据库 二、参考文档 http://t.csdnimg.cn/Qeedq 三、实施步骤 1 在obadmin用户下,启动obd服务,登录页面访问 [obadminhurys23 oceanbase]$ obd web 2 登…