相机参数原理深入剖析 与 实际运用

2023-11-16


1、相机内参与应用

fx、fy、u0、v0只与摄像机内部参数有关,故称矩阵M1为内参数矩阵

其中fx= f/dX ,fy = f/dY ,分别称为u轴和v轴上的归一化焦距

f是相机的焦距,dX和dY分别表示传感器u轴和v轴上单位像素的尺寸大小,单位为mm/pixel,现代技术下一般二者相等

u0和v0则表示的是光学中心,即摄像机光轴与图像平面的交点,通常位于图像中心处,故其值常取分辨率的一半


现以NiKon D700相机为例进行求解其内参数矩阵:
焦距 f = 35mm   最高分辨率:4256×2832     传感器尺寸:36.0×23.9 mm

根据以上定义可以有:

u0 = 4256/2 = 2128 

v0 = 2832/2 = 1416  

dx = 36.0/4256 (mm/pixel)   

dy = 23.9/2832 (mm/pixel)

fx = f/dx = 4137.8    (f和传感器尺寸都必须是mm才能相除消掉)

fy = f/dy = 4147.3


2、几个不得不知的变换矩阵知识


(1)旋转矩阵是正交矩阵,意味着R的转置=R的逆(注意只是旋转矩阵!!不是合成后的4X4的齐次变换矩阵)

(2)旋转矩阵的逆,等于把这样的一个变化矩阵:以同样的对称轴,反方向(顺时针变逆时针,α变-α)转同样的角度

(3)旋转矩阵相乘的意义:P点按顺序在世界坐标系中先后按R1,R2,R3分别旋转,P点的表示为:R3*R2*R1*P,根据矩阵乘法结合律,这个旋转可以先合成一个

R=R3*R2*R1,表示这个点按照R1 R2 R3分别旋转

(4)我们已知绕世界坐标系X Y Z轴分别旋转的旋转矩阵(我的另一篇博客有)。先把相机放在原点,通过这三个矩阵相乘得到朝向,再进行平移,可以得到把相机移动到任意位置,并拥有任意朝向。所以知道这三个矩阵,完全够用了。

(5)4x4正交矩阵,代表了“一次旋转+一次平移”这么一种变换。

那么,它的逆代表了一种反变换,可以这样理解

a.它的逆作用于变化后的点,会将他变回原来变化前的点。

b.相机位置的变化,相机坐标系下物体的变化,是一组反变化。因此物体变化为 Rt,那么相机变化为Rt的逆,反之亦然,后面有详细解释


3、相机外参与应用


一开始,默认相机在世界坐标系原点,世界坐标系原点想象为matlab或opengl画图程序里默认的(0,0,0)。


如何确定相机朝向?

要先明确,相机朝向,就是投影的方向,就是你把它当成深度的那个方向。

由于投影变换我们总喜欢直接除以Z坐标,所以我们把Z轴的正方向当成相机朝向,而相机位于原点处。

这样直接除以Z坐标就相当于做了投影变换。Z坐标为正时,做了一个变换。Z坐标为负时,物体位于相机后面,判断后舍去。

当然如果你喜欢除以X坐标,那就相当于把X轴当成了相机朝向。

我们用一个常用方式表示一个相机,用两个点构成的向量,即Camera_location 和 Camera_lookat,即相机位于哪点,相机朝向哪个点。


(我们以下的一切相机外参带来的变换,包括相机变换和目标点变换,它们的每一步都是以世界坐标系为参照的。)


相机外参数与相机实际位置的互推?


(1)相机参数表示什么:

相机参数表示空间中的点,怎样平移和旋转到这个相机的坐标系下,而不是直接描述了这个相机怎么移动。相机的运动是与相机外部参数矩阵所描述的运动相反的。


(2)相机参数的作用方式:

我们给定相机的旋转矩阵和平移向量如下,再给定空间中一个点,怎么计算这个点的位置?


我们有两种计算方法,

第一先旋转后平移,运算过程如下


第二,用齐次矩阵一次计算,首先拼接成齐次矩阵


然后计算相乘



这两种计算结果是一样一样,实际进行的操作也是一样的。也就是说,第二种运算拆解出来,就是先旋转后平移的方式。


(3)怎么样由相机参数推知相机位置?

我们刚才提到,相机的运动是相机外部参数矩阵所描述的运动相反的。

根据上面两种方法,我们进行计算相机参数

第一种,分解计算:

ok不推倒了,因为下面的公式我也是试验出来的。

要分解计算,先计算相机沿R所描述的旋转轴反方向旋转,一样的度数的对应的旋转矩阵是什么,假设为R',(这个R'=R的逆=R的转置,因为R是正交矩阵)

旋转后,相机的位置和朝向分别为:


其中,Vstart和Vto分别是,相机原来的位置,和相机原来看向的点,R'是R的逆,t就是t


第二种,齐次矩阵


也就是给定齐次矩阵形式的相机参数,想知道相机在哪个位置,直接求逆即可!

由于相机初始时都是位于(0,0,0),望向(0,0,1),所以可以直接带入这俩值。


(4)如何根据实际位置来写出变换矩阵?

第一,首先确定相机初始位置。然后,确定相机初始朝向,为了方便起见我们将Z正方向作为相机朝向。

初始状态,相机未经任何平移和旋转,相机是和世界坐标系平行的,也就是说,相机位于(0,0,0)相机朝向z轴正方向。

我们确定一个旋转R,可以使世界坐标系的Z轴正方向转到一个其他方向,这个方向就是新的相机朝向。

也就是:看世界坐标系的Z轴!把Z轴转到哪个方向,相机就朝着哪个方向!


我们想让相机旋转一个矩阵Rc,然后再平移一个矩阵Tc。那么推断相机参数的步骤为:

(1)把Rc和Tc写成齐次的形式

(2)求这个齐次矩阵的逆矩阵inv(R)

(3)这个矩阵的左上3*3是相机的旋转参数,右边一列的1~3行是相机的平移参数


多个相机旋转的叠加,相机先旋转Rc1,再旋转Rc2,最后旋转Rc3(每次都是按照世界坐标系下的轴为参考系旋转),然后平移Tc,那么推断相机外参数步骤为:

(1)倒着把旋转矩阵相乘,就相当于旋转矩阵叠加,Rc=Rc3*Rc2*Rc1

(2)把Rc和Tc写成齐次的形式....一切同上



4、总结


对于一个空间中的点(Xw,Yw,Zw),如何得一步步得到像素坐标?

(1)写成齐次式,先左乘以M2(即相机外参数的齐次矩阵,完成平移和旋转),得到相机坐标系下的三维点

(2)再左乘以M1(转换到照片坐标系,附加焦距的影响,相当于把像平面的中心点移动到左上角),得到的(X,Y,Z) 再除同时以Zc (进行一个投影变换),得到的数字再舍去小数或四舍五入,就可以得空间中这个点在照片里对应的像素是哪个。


对于知道相机变化的R和T,如何求相机参数?


对于知道了相机的参数,如何求相机位置?




Reference

http://blog.csdn.net/hjchjc520/article/details/4133515

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

相机参数原理深入剖析 与 实际运用 的相关文章

  • 深入浅出AXI协议(6)——传输属性

    一 前言 在之前的文章中 我们介绍的主要内容是AXI协议的数据读写结构和读写响应结构 主要讲述了当遇到各种特殊情况时 AXI如何完成数据的读写操作 最后介绍了读写响应的4种类型 在本文中 我们将介绍AXI协议的传输属性 二 传输类型与属性

随机推荐

  • 性能测试流程

    参考书籍 软件测试 黑马程序员编著 性能测试与普通的功能测试目标不同 因此其测试流程与普通的测试流程也不相同 虽然性能测试也遵循测试需求分析 测试计划制订 测试用例设计 测试执行 编写测试报告的基本过程 但在实现细节上 性能测试有单独一套流
  • GDAL源码剖析(一)

    转载自 http blog csdn net liminlu0314 article details 6933772 前言 一直在使用和研究GDAL的相关东西 发现网上对GDAL的内容倒是不少 但是很少有系统的介绍说明 以及内部的一些结构说
  • Centos7 交叉编译boost_1_70_0源码 AArch架构

    环境准备 centos7 镜像 下载地址 http mirrors aliyun com centos 7 9 2009 isos x86 64 aarch64交叉编译链 下载地址 https releases linaro org com
  • JS 使用hash算法计算字符串的哈希值

  • DFS遍历框架解决岛屿问题

    补充在开头 这篇题解 是我在做leetcode无意中看到的 原po将此类问题解释的非常清晰 故将其转载并添加上对应题目的解题代码 仅用做个人的学习笔记 不做任何商业用途 引言 我们所熟悉的 DFS 深度优先搜索 问题通常是在树或者图结构上进
  • [UE4笔记] 3DUI空间交互

    在Actor中使用widget的时候制作3DUI 如果直接选择World模式 鼠标和UI是无法产生交互的 只要勾选了红框里的选项 就可以正常交互了 老是忘记 所以写个笔记记录一下 效果 注意 如果你还是点击不到 输入控制台命令showfla
  • 第十题

    第十题 限制元素 修改限制 把3改了即可
  • 【嵌入式基础】串口通信

    目录 1 前言 2 基本概念 2 1 波特率 2 2 起始位 2 3 数据位 2 4 校验位 2 5 停止位 2 6 空闲位 3 工作模式 3 1 单工模式 3 2 半双工模式 3 3 全双工模式 4 同步通信和异步通信 4 1 同步通信
  • 【Mac 教程系列第 18 篇】如何修改 iTerm2 的背景图片

    这是 Mac 教程系列第 18 篇 如果觉得有用的话 欢迎关注专栏 默认终端的效果图是这样的 修改后的效果如下图所示 如果你已经习惯了默认终端的样式 前期看有背景图片的可能会不太适应 不过有时候尝试一下不同的风格 也许会有不同的体验 如何实
  • YOLO5 目标检测

    目录 1项目的克隆和必要的环境依赖 1 1项目的克隆 1 2项目代码结构整体介绍 1 3环境的安装和依赖的安装 2 数据集和预训练权重的准备 2 1利用labelimg标注数据和数据的准备 2 2 获得预训练权重 3训练自己的模型 3 1修
  • TCP详解 (三)Nagle算法和延迟确认

    文章目录 延迟确认 Nagle算法 Nagle算法遇上延迟确认 关闭Nagle算法 一些有关TCP通信量的研究如 Caceresetal 1991 发现 如果按照分组数量计算 约有一半的TCP报文段包含成块数据 如 FTP 电子邮件和 Us
  • unitTest+Ddt数据驱动测试

    我们设计测试用例时 会出现测试步骤一样 只是其中的测试数据有变化的情况 比如测试登录时的账号密码 这个时候 如果我们依然使用一条case一个方法的话 会出现大量的代码冗余 而且效率也会大大降低 此时 ddt模块就能帮助我们解决这个问题 dd
  • 微信王者有ios的服务器吗,王者IOS微信区国服瑶多有钱?凌晨撒4W红包,点开头像傻眼...

    原标题 王者IOS微信区国服瑶多有钱 凌晨撒4W红包 点开头像傻眼 大家好 在王者荣耀这款游戏里面 有一个英雄的地位是非常特殊的 那就是被女玩家们所深爱着的瑶 但她又被男玩家所厌恶 毕竟女玩家和男玩家玩游戏的目的不一样 女玩家是为了快乐 她
  • 深度讲解一下远程控制软件哪家好?推荐一款免费不限速的好软件给大家!

    小编今天要推荐一款较为小众的远程控制软件 通过远程桌面可以极大地方便我们进行远程技术支持 远程办公 然而我们熟知 QQ 远程 windows自带的远程协助 使用起来并不理想 不是连接不顺畅就是操作技术高 相比之下 专门的远程桌面软件的体验更
  • NumPy 学习笔记(二):NDArray

    导入 NumPy 开始学习 import numpy as np 不用 Python 非好汉 不晓 NumPy 真遗憾 本专栏 将使用 图解 以及 脑图 的方法来记录我的 图解 NumPy 学习笔记 NumPy 是 Numerical Py
  • 悟空crm-0.5.4 (OpenLogic CentOS7.2)

    平台 CentOS 类型 虚拟机镜像 软件包 5kcrm0 5 4 centos7 2 lamp stack 5 6 22 commercial crm lamp 服务优惠价 按服务商许可协议 云服务器费用 查看费用 立即部署 产品详情 产
  • ValueError: not enough values to unpack (expected 2, got 1)错误解决方案

    在学习python时 遇到了错误 现已解决 源代码如下 role line spoken each line split 1 错误如下 ValueError not enough values to unpack expected 2 go
  • 搜索服务应用:solr的使用

    开始前 环境 solr4 10 3 jdk1 7 tomcat7 下载地址 http archive apache org dist lucene solr 说明 solr和lucen更新是同步的 请配对使用 lucene用什么版本solr
  • 金山文档手机app服务器异常,手机金山文档出现这个文件大家有没有遇到过,在线求解谢谢了。{...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 手机金山文档出现这个文件大家有没有遇到过 在线求解谢谢了 version 3 UpdateFrequency 1 AppIDConfig Global DataReport UserPortra
  • 相机参数原理深入剖析 与 实际运用

    1 相机内参与应用 fx fy u0 v0只与摄像机内部参数有关 故称矩阵M1为内参数矩阵 其中fx f dX fy f dY 分别称为u轴和v轴上的归一化焦距 f是相机的焦距 dX和dY分别表示传感器u轴和v轴上单位像素的尺寸大小 单位为