IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> [三维重建] 相机内参数矩阵、外参数矩阵 -> 正文阅读

[人工智能][三维重建] 相机内参数矩阵、外参数矩阵

一、针孔相机模型

在这里插入图片描述

如图所示为针孔相机模型, O c a m ? X c a m ? Y c a m ? Z c a m O_{cam}-X_{cam}-Y_{cam}-Z_{cam} Ocam??Xcam??Ycam??Zcam?为相机坐标系, O c a m O_{cam} Ocam?为相机光心,习惯上,让 Z c a m Z_{cam} Zcam?轴指向相机拍摄朝向的正前方, X c a m X_{cam} Xcam?轴向右(从 Z c a m Z_{cam} Zcam?轴负方向,向正方向看), Y c a m Y_{cam} Ycam?轴向下。

O o ? X ? Y O_o-X-Y Oo??X?Y为物理成像平面,位于 Z c a m Z_{cam} Zcam?轴负方向,距离相机光心 f f f处, f f f为相机焦距。

二、内参数矩阵

相机坐标系内一点 M M M的坐标为 ( x c a m , y c a m , z c a m ) (x_{cam},y_{cam},z_{cam}) (xcam?,ycam?,zcam?),经过上述针孔相机模型后,投影到成像平面上一点 m m m,坐标为 ( x , y ) (x,y) (x,y)

Y c a m Y_{cam} Ycam?轴负方向朝正方向看(上图中,从上往下看),有如下相似三角形关系:
在这里插入图片描述
根据三角形相似关系,有:
z c a m f = x c a m ? x \frac{z_{cam}}{f}=\frac{x_{cam}}{-x} fzcam??=?xxcam??
同理,也会有:
z c a m f = y c a m ? y \frac{z_{cam}}{f}=\frac{y_{cam}}{-y} fzcam??=?yycam??

公式中的负号是因为针孔成像所成的像是倒像,

在坐标的表现上就是位于 X c a m X_{cam} Xcam?正半轴的点经过投影后,会被投影到 X X X负半轴;

位于 Y c a m Y_{cam} Ycam?正半轴的点经过投影后,会被投影到 Y Y Y负半轴。

为了将公式中的负号去掉,使式子更加简洁,人们将成像平面对称到摄像机前方,如下图所示:
在这里插入图片描述
公式中的负号被去掉:
z c a m f = x c a m x (1) \frac{z_{cam}}{f}=\frac{x_{cam}}{x}\tag{1} fzcam??=xxcam??(1)
同理,也会有:
z c a m f = y c a m y (2) \frac{z_{cam}}{f}=\frac{y_{cam}}{y}\tag{2} fzcam??=yycam??(2)
整理,将 x , y x,y x,y放到同一侧:
x = f x c a m z c a m (3) x=f\frac{x_{cam}}{z_{cam}}\tag{3} x=fzcam?xcam??(3)
y = f y c a m y c a m (4) y=f\frac{y_{cam}}{y_{cam}}\tag{4} y=fycam?ycam??(4)

此时,所有变量仍是以长度为单位,比如毫米,如可以说焦距 f f f是5毫米。

但实际上,相机最后拍摄得到的相片是由一个个像素点组成的,所以我们还需要将物理成像平面坐标系转变成像素坐标系,通常像素平面坐标系的原点会被定义在物理成像平面的左上角,横轴、纵轴与物理成像平面坐标系的横轴、纵轴平行,如下图所示:
在这里插入图片描述
为将长度单位转换成像素单位,定义了两个参数 α , β α,β α,β,单位为 像 素 / 米 像素/米 /,用以表征每个像素的尺寸,具体意义是一米的长度内,由多少个像素组成,属于与相机生产时的硬件相关的参数,如下图举例所示:
在这里插入图片描述
横轴方向上,5个像素的长度为1米,所以 α = 5 像 素 / 米 α=5像素/米 α=5/,纵轴方向上,10个像素的长度为1米(像素可以不是正方形),所以 β = 10 像 素 / 米 β=10像素/米 β=10/

于是,物理成像平面上的坐标与像素平面上的坐标的转换关系如下:
u = α x + c x (5) u=αx+c_x\tag{5} u=αx+cx?(5)
v = β y + c y (6) v=βy+c_y\tag{6} v=βy+cy?(6)
其中, c x , c y c_x,c_y cx?,cy?为物理成像坐标系的原点相对于像素坐标系的原点的偏移量,单位是 像 素 像素

将公式3、4代入5、6,可得:
u = f α x c a m z c a m + c x u=fα\frac{x_{cam}}{z_{cam}}+c_x u=fαzcam?xcam??+cx?
v = f β y c a m z c a m + c y v=fβ\frac{y_{cam}}{z_{cam}}+c_y v=fβzcam?ycam??+cy?
f α = f x fα=f_x fα=fx? f β = f y fβ=f_y fβ=fy?得:
u = f x x c a m z c a m + c x (7) u=f_x\frac{x_{cam}}{z_{cam}}+c_x\tag{7} u=fx?zcam?xcam??+cx?(7)
v = f y y c a m z c a m + c y (8) v=f_y\frac{y_{cam}}{z_{cam}}+c_y\tag{8} v=fy?zcam?ycam??+cy?(8)

通过齐次坐标形式,将式7、8转换成简洁的矩阵形式:
像素坐标 ( u , v ) (u,v) (u,v)的齐次坐标形式为 ( u , v , 1 ) (u,v,1) (u,v,1)
[ u v ] → [ u v 1 ] = [ f x x c a m z c a m + c x f y y c a m z c a m + c y 1 ] \begin{bmatrix} u \\ v \\ \end{bmatrix} →\begin{bmatrix} u \\ v \\ 1 \\ \end{bmatrix}=\begin{bmatrix} f_x\frac{x_cam}{z_cam}+c_x \\ f_y\frac{y_cam}{z_cam}+c_y \\ 1 \\ \end{bmatrix} [uv?]???uv1????=???fx?zc?amxc?am?+cx?fy?zc?amyc?am?+cy?1????
两边乘上 z c a m z_{cam} zcam?
z c a m [ u v 1 ] = [ f x x c a m + c x z c a m f y y c a m + c y z c a m z c a m ] = [ f x 0 c x 0 0 f y c y 0 0 0 1 0 ] [ x c a m y c a m z c a m 1 ] z_{cam}\begin{bmatrix} u \\ v \\ 1 \\ \end{bmatrix}=\begin{bmatrix} f_xx_{cam}+c_xz_{cam} \\ f_yy_{cam}+c_yz_{cam} \\ z_{cam} \\ \end{bmatrix}=\begin{bmatrix} f_x&0&c_x&0 \\ 0&f_y&c_y&0 \\ 0&0&1&0\\ \end{bmatrix}\begin{bmatrix} x_{cam}\\ y_{cam}\\ z_{cam}\\ 1\\ \end{bmatrix} zcam????uv1????=???fx?xcam?+cx?zcam?fy?ycam?+cy?zcam?zcam?????=???fx?00?0fy?0?cx?cy?1?000?????????xcam?ycam?zcam?1??????
最终得到:
z c a m [ u v 1 ] = [ f x 0 c x 0 0 f y c y 0 0 0 1 0 ] [ x c a m y c a m z c a m 1 ] (9) z_{cam}\begin{bmatrix} u \\ v \\ 1 \\ \end{bmatrix}=\begin{bmatrix} f_x&0&c_x&0 \\ 0&f_y&c_y&0 \\ 0&0&1&0\\ \end{bmatrix}\begin{bmatrix} x_{cam}\\ y_{cam}\\ z_{cam}\\ 1\\ \end{bmatrix}\tag{9} zcam????uv1????=???fx?00?0fy?0?cx?cy?1?000?????????xcam?ycam?zcam?1??????(9)

式9完成了将相机坐标系上的坐标 ( x c a m , y c a m , z c a m ) (x_{cam},y_{cam},z_{cam}) (xcam?,ycam?,zcam?)转换成像素平面上的坐标 ( u , v ) (u,v) (u,v)的任务

K = [ f x 0 c x 0 0 f y c y 0 0 0 1 0 ] K=\begin{bmatrix} f_x&0&c_x&0 \\ 0&f_y&c_y&0 \\ 0&0&1&0\\ \end{bmatrix} K=???fx?00?0fy?0?cx?cy?1?000????,便是相机内参数矩阵。

其中包含了几个相机的硬件信息, f f f焦距,长度单位,如mm; c x , c y c_x,c_y cx?,cy?成像平面坐标系原点相对于像素平面坐标系原点的偏移量,像素单位; α , β α,β αβ单位长度上的像素个数,单位如:像素/mm。

注意: z c a m z_{cam} zcam?实际上是三维空间点的深度信息,在投影过程中丢失了,而三维重建工作的很大一部分任务都是设法还原这个深度信息。
在这里插入图片描述
举个例子来说,像素坐标系上得到的一个投影点 m m m,实际上只能知道它是由射线 O M OM OM上的任意一个点投影得到的,但单纯从这个投影关系来说,是无法知道具体是射线 O M OM OM上的哪个具体位置的点投影过来得到的投影点 m m m,因为整条射线 O M OM OM上的所有点(无穷多个)只要投影到像素坐标系上,都会重叠在 m m m处。

三、外参数矩阵

上述推导过程中,使用的是摄像机坐标系上的坐标 M ( x c a m , y c a m , z c a m ) M(x_{cam},y_{cam},z_{cam}) M(xcam?,ycam?,zcam?),但通常情况下,能知道的都是世界坐标系上的坐标,而当摄像机坐标系与世界坐标系并不重合时,就需要通过坐标转换,将世界坐标系上的坐标转换成摄像机坐标系上的坐标。

https://blog.csdn.net/weixin_44179561/article/details/124149297
详细描述了世界坐标系上的坐标转换成摄像机坐标系上的坐标的过程。

里面所使用的旋转矩阵 R c 2 w R_{c2w} Rc2w?和平移量 T c 2 w T_{c2w} Tc2w?,便是相机的外参数,其表征了相机坐标系经过怎样的运动和位姿变化,才能与世界坐标系重合。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章           查看所有文章
加:2022-04-29 12:08:38  更:2022-04-29 12:12:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:21:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码