【NeRF】相机的内外参是什么?单目相机是如何成像的?

文章目录

  • 【NeRF】相机的内外参是什么?单目相机是如何成像的?
    • 1.相机外参
    • 2.相机内参

【NeRF】相机的内外参是什么?单目相机是如何成像的?

在做Nerf时对其中的一些原理感到困惑,因而把这些基础理论知识总结下来,方便后面的学习。

对于围绕某一物体拍出来的一组照片而言,我们首先需要弄清不同照片拍摄的方位,如下图所示。而相机的内外参就是用来表达相机位置的参数。其中,相机的位置和朝向由相机的外参(extrinsic matrix)决定,投影属性由相机的内参(intrinsic matrix)决定。
在这里插入图片描述

接下来我们逐一开始介绍:

1.相机外参

相机外参是一个4x4的矩阵 M M M,其作用是将世界坐标系的点 P w o r l d = [ x , y , z , 1 ] P_{world}=[x,y,z,1] Pworld=[x,y,z,1] 变换到相机坐标系 P c a m e r a = M P w o r l d P_{camera}=MP_{world} Pcamera=MPworld下(注意此处为左乘)。我们也把相机外参叫做world-to-camera (w2c)矩阵

补充:这里用到的是齐次坐标系,其定义如下:

如果一个点在无穷远处,这个点的坐标将会 ( ∞ , ∞ ) (\infty,\infty) (,),在欧氏空间中,这就变得没有意义。如果使用齐次坐标,平行线在透视空间的无穷远处交于一点,这样就实现了对于无穷点的表示。

简而言之,齐次坐标就是用N+1维来代表N维坐标

我们可以在一个2D笛卡尔坐标末尾加上一个额外的变量w来形成 2D齐次坐标。因此,一个在笛卡尔坐标系下的点 ( X , Y ) (X, Y) (X,Y)在齐次坐标里面变成了 ( x , y , w ) (x,y,w) (x,y,w),并且有:
X = x w ; Y = y w X=\frac{x}{w};Y=\frac{y}{w} X=wx;Y=wy
例如笛卡尔坐标系下(1,2),在齐次坐标系中可以表示为(1,2,1),如果点(1,2)移动到无限远处,在笛卡尔坐标下它变为 ( ∞ , ∞ ) (\infty,\infty) (,),然后它的齐次坐标表示为(1,2,0)。注意这样的话,我们可以不用 ” ∞ \infty " 来表示一个无穷远处的点了。

另外注意方向向量的齐次坐标第四维等于0,点坐标第四维等于1。

而NeRF主要使用camera-to-world (c2w),也就是相机外参的逆矩阵,其作用是把相机坐标系的点变换到世界坐标系。c2w矩阵是一个4x4的矩阵,左上角3x3是旋转矩阵R,又上角的3x1向量是平移向量T。有时写的时候可以忽略最后一行[0,0,0,1]。

img

[R,T]表示的c2w矩阵的值描述了相机坐标系的朝向和原点:

img

具体的,旋转矩阵的第一列到第三列分别表示了相机坐标系的X, Y, Z轴在世界坐标系下对应的方向;平移向量表示的是相机原点在世界坐标系的对应位置

为了更通俗的理解c2w矩阵的内容,我们将c2w作用于相机坐标系中的x轴,也就是[1,0,0,0]上:

[R,T]*[1, 0, 0, 0]^T = [r11, r21, r31]^T

这也就是说相机坐标系下的x轴也就是世界坐标系中的 [r11, r21, r31],这也就是相机外参矩阵中的第一列内容。同理,将c2w作用到相机坐标系下的X轴[1, 0, 0, 0]、Y轴[0, 1, 0, 0]、 Z轴[0, 0, 1, 0]、以及原点[0, 0, 0, 1]我们会依次得到c2w的四列向量。

2.相机内参

相机的内参矩阵K定义如下:
K = [ f x 0 c x 0 f y c y 0 0 1 ] K=\begin{bmatrix}f_x&&0&&c_x\\ 0&&f_y&&c_y\\ 0&&0&&1\end{bmatrix} K= fx000fy0cxcy1
内参矩阵K包含4个值:其中 f x f_x fx f y f_y fy是相机的水平和垂直焦距(对于理想的针孔相机,fx=fy)。焦距的物理含义是相机中心到成像平面的距离,长度以像素为单位。 c x c_x cx c y c_y cy是图像原点相对于相机光心的水平和垂直偏移量,可以用图像宽和高的1/2近似.

这里我们以针孔相机(Pinhole camera)为例介绍内参矩阵中的参数,首先引入我们熟知的小孔成像模型:

在这里插入图片描述

为了后面的分析方便,对小孔成像的模型进行进一步的调整,将成像平面画到镜头的对称位置,使得图像不再倒立。注意:这两者是等价的。

在这里插入图片描述

内参矩阵中的 f x 和 f y f_x 和f_y fxfy也就是镜头到成像平面的距离。

之后我们讨论内参矩阵中的 c x c_x cx c y c_y cy,这两个参数主要用于将相机坐标系下的3D坐标映射到2D的图像平面。由于像素图片坐标原点一般设置在图片的左上角,不与相机光心重合,所以要表示某一个像素在相机坐标系中的位置时,要在像素坐标的基础上减去 c x 和 c y c_x和c_y cxcy,同时结合下面这张图,像素点距离相机原点的z轴距离为焦距 f f f。我们可以得到:

对于像素图片坐标系中的某个点 ( i , j ) (i,j) (i,j),其在相机坐标系中被表示为 ( i − c x , j − c y , f ) (i-c_x,j-c_y,f) (icx,jcy,f),由此构造出的一条射线的方向向量为: ( i − c x , j − c y , f ) − ( 0 , 0 , 0 ) = ( i − c x , j − c y , f ) (i-c_x,j-c_y,f)-(0,0,0)=(i-c_x,j-c_y,f) (icx,jcy,f)(0,0,0)=(icx,jcy,f),将相机外参左乘这一方向向量也就得到了其在世界坐标系的坐标。

在这里插入图片描述

参考文献和资料:

[1] NeRF代码解读-相机参数与坐标系变换 - 知乎 (zhihu.com)

[2] 【3D目标检测】单目相机成像原理_单目相机原理_可乐大牛的博客-CSDN博客

[3] 机器视觉——相机标定(四个坐标系的关系)_相机坐标系和像素坐标系的关系_向暖阳呢的博客-CSDN博客
[4] 什么是齐次坐标系?为什么要用齐次坐标系? - 知乎 (zhihu.com)

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

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

相关文章

【工业机器人】用于轨迹规划和执行器分析的机械手和移动机器人模型(MatlabSimulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

1、vscode+cmake c++环境配置

文章目录 1、安装2、开发环境 关于vscode c环境的配置,应该有两种一种是vscodec/c插件,另一种是vscodecmake插件,第一种没太多用过,感觉就像python那样,要写相关配置文件,有自己的一套规则;另一…

【数据结构导论】第 6 章:查找

目录 一、基本概念 二、静态查找表 (1)顺序表上的查找 —— 顺序查找 ① 过程 ② 算法 ③ 算法分析 (2)有序表上的查找 —— 二分查找 ① 二分查找思想 ② 二分查找过程 ③ 二分查找算法 ④ 示例 ⑤ 算法分析 &#…

选读SQL经典实例笔记05_日期运算(下)

1. 两个日期之间相差的月份和年份 1.1. DB2 1.2. MySQL 1.3. sql select mnth, mnth/12from ( select (year(max_hd) - year(min_hd))*12 (month(max_hd) - month(min_hd)) as mnthfrom (select min(hiredate) as min_hd, max(hiredate) as max_hdfrom emp) x) y 1.4. Or…

ModaHub魔搭社区:向量数据库Zilliz Cloud的AUTOINDEX教程

目录 创建索引和向量搜索 总结 为满足用户不同需求,Zilliz Cloud 提供 3 种类型的集群 CU——性能型、容量型和经济型。但是,为不同类型 CU 集群中的 Collection 创建索引时,通常需要根据所选择的 CU 类型调整索引参数。为了方便您创建索引,免去调节参数的麻烦,Zilliz C…

stm32 使用CubeIDE 移植RTX5

STM32 使用st的官方开发环境 cubeide (eclipse gcc)移植 cmsis rtos2 RTX5 实时操作系统 这套环境的主要优势是免费。cubeide免费使用。RTX5 免商业版税(已从原keil中剥离出来,现在完全开源免费)。 一,环…

偏振光的斯托克斯矢量表示法

《光纤偏振模色散原理 测量与自适应补充技术》张晓光 第二章

深入理解Linux网络——内核是如何发送网络包的

文章目录 一、相关实际问题二、网络包发送过程总览三、网卡启动准备四、数据从用户进程到网卡的详细过程1)系统调用实现2)传输层处理1. 传输层拷贝2. 传输层发送 3)网络层发送处理4)邻居子系统5)网络设备子系统6&#…

智能机器人嵌入ChatGPT会给社会带来哪些进步

智能机器人技术在当今世界中扮演着越来越重要的角色,而其中一个令人印象深刻的例子就是ChatGPT。ChatGPT是一种基于人工智能的对话系统,它利用强大的自然语言处理和生成模型,可以与人类进行自然而流畅的对话。ChatGPT内置了智能机器人技术&am…

92.qt qml-日期/日期时间/时间选择器(日历选择器)

截图如下所示: 效果图如下所示: 1.前言 QML日历组件我们之前移植过: 67.qt quick-qml自定义日历组件(支持竖屏和横屏)_qml日历_诺谦的博客-CSDN博客 但是该组件内部代码比较坑的就是全部使用自定义对象,导致性能不行,动画卡顿,并且不好加时间选择,所以本章我们重新学…

跨域问题怎么解决跨域问题

在前端领域中,跨域是指浏览器允许向服务器发送跨域请求,从而克服Ajax只能同源使用的限制。 同源策略是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,…

Maven工程分模块开发讲解及入门案例

1.分模块开发的意义 一个模块只做自己对应的功能,提升开发效率,将一个工程拆分成若干个子模块方便之间相互调用,接口共享,降低耦合度提高代码复用率。 2.分模块开发入门案例 下面将domain这个模块从当前模块当中给拆分出来。 …