针孔相机模型

news2024/11/13 10:45:29

针孔相机模型

  • 坐标系
    • (1) 图像像素坐标系
    • (2) 图像物理坐标系
    • (3) 相机坐标系
    • (4) 归一化平面坐标系
    • (5) 世界坐标系
  • 畸变校正

针孔相机模型中一般会涉及到图像像素坐标系、图像物理坐标系、相机坐标系、归一化平面坐标系和世界坐标系这5个坐标系。

坐标系

(1) 图像像素坐标系

图像像素坐标系u-v是像素点的水平方向和垂直方向作为该坐标系的u轴和v轴。图像中的像素坐标点表示为(u,v),图像的中心像素点表示为(u0,v0)。
在这里插入图片描述

(2) 图像物理坐标系

同样,如上图所示,图像物理坐标系(本文简称其为物理系)x-y的中心点是图像成像平面的中心位置,也就是像素系的中点。与像素系不同的是,物理系的单位是mm,而像素坐标系的单位是像素。因此,物理系与像素坐标系之间存在一个转换关系,其表示为:
{ u = u 0 + x d x v = v 0 + y d y ⇒ [ u v 1 ] = [ 1 / d x s u 0 0 1 / d y v 0 0 0 1 ] [ x y 1 ] \left\{\begin{array}{l}u=u_0+\frac{x}{d_x} \\ v=v_0+\frac{y}{d_y}\end{array} \Rightarrow\left[\begin{array}{l}u \\ v \\ 1\end{array}\right]=\left[\begin{array}{ccc}1 / d_x & s & u_0 \\ 0 & 1 / d_y & v_0 \\ 0 & 0 & 1\end{array}\right]\left[\begin{array}{l}x \\ y \\ 1\end{array}\right]\right. u=u0+dxxv=v0+dyy uv1 = 1/dx00s1/dy0u0v01 xy1
其中(u,v)是像素坐标,(u0,v0)表示在像素坐标系下的主点坐标,(x,y)是物理坐标。 1/dx,1/dy分别表示x、y轴方向一个像素点对应的物理距离,即相元尺寸,一般来说两者相等;s表示u轴和v轴的不垂直因子,一般情况下不做考虑,设置为0即可。

(3) 相机坐标系

如图所示,相机坐标系(本文简称其为相机系)是以相机光心Oc为原点建立的三维坐标系Oc-XcYcZc。为了更清楚地表示相机系与物理系之间的关系,按照小孔成像的原理,将成像平面对称到相机光心的另一侧。
在这里插入图片描述
相机系下的三维空间点P与图像平面的二维像素点P’构成相似三角形,如上图右侧所示。根据三角形相似,因此有:
{ x = f X c Z c y = f Y c Z c ⇒ Z c [ x y 1 ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ X c Y c Z c 1 ] \left\{ \begin{matrix} x = f\frac{{{X_c}}}{{{Z_c}}}\\ y = f\frac{{{Y_c}}}{{{Z_c}}} \end{matrix} \right. \Rightarrow {Z_c}\left[ \begin{matrix}x\\y\\1\end{matrix} \right] = \left[ {\begin{matrix} f&0&{\begin{matrix}0&0\end{matrix}}\\0&f&{\begin{matrix}0&0\end{matrix}}\\0&0&{\begin{matrix}1&0 \end{matrix}}\end{matrix}} \right]\left[ {\begin{matrix}{{X_c}}\\{{Y_c}}\\{{Z_c}}\\1\end{matrix}} \right] {x=fZcXcy=fZcYcZc xy1 = f000f0000010 XcYcZc1
式中x、y表示P’点在图像平面的坐标;Xc、Yc、Zc表示P点在相机系下的坐标 ;f表示相机的焦距大小,单位为mm。

(4) 归一化平面坐标系

如上图所示,归一化平面坐标系是指在相机系下令Z=1的平面坐标系。由于P点的坐标为Pc(Xc, Yc, Zc),根据归一化原则,因此该点在归一化坐标Pg可以表示为:
P g = ( X c / Z c , Y c / Z c , 1 ) Pg{\rm{ = }}\left( {Xc/Zc,Yc/Zc,1} \right) Pg=(Xc/Zc,Yc/Zc,1)
归一化平面坐标多用于相机畸变校正,以及在单目视觉SLAM初始化中实现三维空间点的归一化,得到归一化的尺度信息。

(5) 世界坐标系

同样,如上图所示,世界坐标系是指在三维场景中以任意一点作为原点建立的Ow-XwYwZw坐标系(在实际的单目视觉SLAM中,通常以初始化成功后的第一帧的相机系作为世界坐标系)。且世界坐标系和相机坐标系的转换关系使用矩阵形式表示为:
[ X c Y c Z c 1 ] = [ R t 0 T 1 ] [ X w Y w Z w 1 ] \left[ \begin{matrix} {X_c}\\{Y_c}\\{Z_c}\\1\end{matrix} \right] = \left[ {\begin{matrix}R&t\\ {{0^T}}&1\end{matrix}} \right]\left[ {\begin{matrix}{{X_w}}\\{{Y_w}}\\{{Z_w}}\\1\end{matrix}} \right] XcYcZc1 =[R0Tt1] XwYwZw1
其中Xc、Yc、Zc表示P点在相机系下的坐标Pc(Xc, Yc, Zc);Xw,Yw,Zw表示P点在世界坐标系下的坐标Pw(Xw, Yw, Zw);R和t分别表示两者之间的的旋转、平移矩阵。

前面分别阐述了几个坐标系之间的变换关系,在相机标定过程中需要实现对这些变换关系的求解。为了更加清楚地表示这些转换关系,对空间中任意一点Pw(Xw, Yw, Zw),将之投影到像素平面,根据坐标变换关系有:
Z c [ u v 1 ] = [ 1 / d x s u 0 0 1 / d y v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R t 0 T 1 ] [ X w Y w Z w 1 ] = [ f x s u 0 0 0 f y v 0 0 0 0 1 0 ] [ R t 0 T 1 ] [ X w Y w Z w 1 ] \begin{aligned} Z_c\left[\begin{array}{c}u \\v \\1 \end{array}\right] & =\left[\begin{array}{ccc} 1 / d_x & s & u_0 \\ 0 & 1 / d_y & v_0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{cccc} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{array}\right]\left[\begin{array}{ll} R & t \\ 0^T & 1 \end{array}\right]\left[\begin{array}{c} X_w \\ Y_w \\ Z_w \\ 1 \end{array}\right] \\ & =\left[\begin{array}{cccc} f_x & s & u_0 & 0 \\ 0 & f_y & v_0 & 0 \\ 0 & 0 & 1 & 0 \end{array}\right]\left[\begin{array}{cc} R & t \\ 0^T & 1 \end{array}\right]\left[\begin{array}{c} X_w \\ Y_w \\ Z_w \\ 1 \end{array}\right] \end{aligned} Zc uv1 = 1/dx00s1/dy0u0v01 f000f0001000 [R0Tt1] XwYwZw1 = fx00sfy0u0v01000 [R0Tt1] XwYwZw1
这里表示图像像素点与空间中三维点的对应转换关系,其中fx=f/dx,fy=f/dy,单位为像素。
由fx, fy,等参数构成的矩阵为相机的内部参数矩阵,简记为K;由R,t等参数构成的矩阵为外部参数,简记为M。因此,可以写成:
Z c [ l u v 1 ] = K [ r 1 r 2 r 3 t ] [ X w Y w Z w 1 ] = K M [ X w Y w Z w 1 ] = H [ X w Y w Z w 1 ] Zc\left[ \begin{matrix}{l}u\\v\\ 1\end{matrix} \right] = K\left[ {\begin{matrix} {{r_1}}&{{r_2}}&{{r_3}}&t \end{matrix}} \right]\left[ {\begin{matrix}{{X_w}}\\{{Y_w}}\\{{Z_w}}\\ 1\end{matrix}} \right] = KM\left[ {\begin{matrix}{{X_w}}\\{{Y_w}}\\{{Z_w}}\\ 1\end{matrix}} \right] = H\left[ {\begin{matrix}{{X_w}}\\{{Y_w}}\\ {{Z_w}}\\1\end{matrix}} \right] Zc luv1 =K[r1r2r3t] XwYwZw1 =KM XwYwZw1 =H XwYwZw1
其中r1,r2,r3表示旋转向量,均为3x1的矩阵。这里的K是3x3的矩阵;M是3x4的矩阵;H表示最终的世界坐标系下三维点到图像像素平面二维点的投影矩阵,其大小为3x4的矩阵。

畸变校正

在相机进行场景信息获取过程中,由于相机制作过程中或是长时间使用等原因使得成像平面与透镜不完全平行,致使相机在成像时造成图像的畸变。其主要包括径向和切向畸变,具体表示如图所示:
在这里插入图片描述
其中(x,y)表示归一化平面上进行畸变校正前的图像点;(xdis, ydis)表示归一化平面上进行畸变校正后的点,且两者的转换关系为:
{ x d i s = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 q 1 x y + q 2 ( r 2 + 2 x 2 ) y d i s = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 + q 1 ( r 2 + 2 y 2 ) + 2 q 2 x y ) \left\{ {\begin{matrix} {{x_{dis}} = x(1 + {k_1}{r^2} + {k_2}{r^4} + {k_3}{r^6}) + 2{q_1}xy + {q_2}({r^2} + 2{x^2})}\\ {{y_{dis}} = y(1 + {k_1}{r^2} + {k_2}{r^4} + {k_3}{r^6} + {q_1}({r^2} + 2{y^2}) + 2{q_2}xy)} \end{matrix}} \right. {xdis=x(1+k1r2+k2r4+k3r6)+2q1xy+q2(r2+2x2)ydis=y(1+k1r2+k2r4+k3r6+q1(r2+2y2)+2q2xy)
其中k1,k2, k3表示径向畸变;q1,q2表示切向畸变;r=sqrt(x^2 + y ^2),且均为常量。在计算出畸变校正后的归一化平面坐标后,需要将其转换到图像像素平面的二维点,得到:
{ u = f x x d i s + c x v = f y y d i s + c y \left\{ {\begin{matrix} {u = {f_x}{x_{dis}} + {c_x}}\\ {v = {f_y}{y_{dis}} + {c_y}} \end{matrix}} \right. {u=fxxdis+cxv=fyydis+cy
可以通过内部参数矩阵K,将归一化平面的三维坐标点转换到图像平面的二维坐标点,实现图像的畸变校正。

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

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

相关文章

IDEA设置界面和控制台的滚动条颜色

前言 不知道大家是否和我一样有这么一个烦恼: IDEA自带的滚动条颜色很暗,配上一些主题颜色搭配很难发现。 所以今天就想着怎么可以修改滚动条颜色,首先去网上搜了搜都是什么鼠标滚轮加shift滚动,一点也不实用 偶然看到了个不错的…

图表控件LightningChart.NET 系列教程(七):LightningChart 组件——LightningChart.NET 函数库

LightningChart.NET SDK 是一款高性能数据可视化插件工具,由数据可视化软件组件和工具类组成,可支持基于 Windows 的用户界面框架(Windows Presentation Foundation)、Windows 通用应用平台(Universal Windows Platfor…

匿名函数 lambda

匿名函数 lambda 匿名函数:一句话函数,比较简单的函数,没有函数名的函数 在Python中,lambda的语法是唯一的 lamlambda a,b:ab lamlam(a1,b2) # 传参 print(lam) # 3lmbda的语法是唯一的。其形式如下:lambda argument_list: expr…

python图像处理(prewitt算子)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面几章谈到了灰化、增强、旋转、滤波等内容,今天来谈一谈边缘检测。边缘检测是图像处理的重要内容。很多图像分割、图像识别的前一步就是边缘检测。某种意义上说,边缘检测的好坏…

7-查看和处理文件内容

7-查看和处理文件内容 文本文件 ASCII、UTF-8、Unicode、ANSItxt、xml、conf、properties、yml等配置文件、日志文件、源代码 二进制文件 可执行文件、图片、音频、视频 cat 全拼:concatenate [kənˈkt(ə)nˌeɪt] 连接 格式:cat 文件名 more/…

2. Spring 注解开发

文章目录1. 用注解开发定义bean2. 纯注解开发3. 注解开发的 bean 管理3.1 作用范围管理(单例或非单例)3.2 生命周期管理4. 注解开发的依赖注入4.1 引用类型的依赖注入4.2 简单类型的依赖注入4.2.1 直接注入值4.2.2 注入 properties 文件中的值5. 注解开发…

Acwing---1101. 献给阿尔吉侬的花束

献给阿尔吉侬的花束1.题目2.基本思想3.代码实现1.题目 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫。 今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪。…

MYSQL不存在插入 存在更新的解决方法和对比

设置主键id自增,name为唯一索引 一、避免重复插入 insert ignore into(有唯一索引) 关键字/句: insert ignore into,如果插入的数据会导致 UNIQUE索引 或 PRIMARY KEY 发生冲突/重复,则忽略此次操作/不插入数据&…

Leetcode.1664 生成平衡数组的方案数

题目链接 Leetcode.1664 生成平衡数组的方案数 题目描述 给你一个整数数组 nums。你需要选择 恰好 一个下标(下标从 0 开始)并删除对应的元素。请注意剩下元素的下标可能会因为删除操作而发生改变。 比方说,如果 nums[6,1,7,4,1]nums [6,1…

spark转化操作

文章目录转化操作Transformer算子概念单RDD转换函数多RDD转换函数map与flatmap转化操作 由于spark的惰性计算特性,RDD只有在第一次行动操作中被用到时才会真正进行计算,因此我打算将文章内容分为"转化操作"和"行动操作"两部分&…

【web】微信小程序笔记小结(视图与逻辑)

过完年回来干正事了orz 来源:黑马程序员前端微信小程序开发教程 目录 I. 页面导航 ① 概念 ② 导航方式 1)声明式导航 ※※ 导航到 tabBar 页面 ※※ 导航到非 tabBar 页面 ※※ 后退导航 2)编程式导航 ※※ 导航到 tabBar 页面…

Nature立新规:ChatGPT等大模型不可以成为作者

众所周知,AI 的超参数决定着模型学习效果和速度。相比普通机器学习任务,深度学习需要的训练时间较长,因此调参技巧就显得尤为重要。 但鉴于深度学习「炼丹」的特性,不同的模型需要不同的超参数,而每个超参的意义又不同…

【头歌】汉诺塔(Hanoi)的递归算法

任务描述本关任务:汉诺塔(Hanoi)的递归算法。相关知识相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标&a…

C语言中数组变量作为函数参数传值的两种方式:数组类型 指针类型 以及“C语言中数组变量(名)的本质是指针变量”

文章目录Intro & SummaryCode & Output运行截图Code关于数组长度在被调函数中的计算错误运行截图 & 警告信息Code数组变量是一类特殊的、指向自己的指针变量Intro & Summary 我在 main 函数中定义了一个数组,要将该数组作为参数传递给其他方法。那…

Lesson 4.3 梯度下降(Gradient Descent)基本原理与手动实现

文章目录一、梯度下降基本原理与学习率1. 数据背景与最小二乘法求解2. 一维梯度下降基本流程2.1 参数移动第一步2.2 梯度下降的多轮迭代3. 梯度下降算法特性与学习率二、梯度下降一般建模流程与多维梯度下降1. 多维梯度下降与损失函数可视化2. 梯度下降计算流程3. 二维梯度下降…

jvm学习的核心(四)---执行引擎和字符串

知识点总结于b站宋红康老师,视频链接 文章目录1.执行引擎1.1.执行引擎概述1.2.执行引擎的工作流程1.3.jvm的解释器和即时编译器(JIT)1.3.1.解释器,即时编译器概述1.3.2.常见即时编译器1.3.3.热点代码探测1.String Table1.1 string…

Go语言基础入门第三章

常量 常量是一个简单值的标识符,在程序运行时,不会被修改的量。 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。 const identifier [type] value可以省略类型说明符[type],因为编译器…

法律常识(三)《合同法》中的借款合同租赁合同摘录

目录 参考 一、借款合同 二、租赁合同 参考 中华人民共和国合同法 一、借款合同 第一百九十六条 借款合同是借款人向贷款人借款,到期返还借款并支付利息的合同。 第一百九十七条 借款合同采用书面形式,但自然人之间借款另有约定的除外。借款合同…

瑞吉外卖 对象转换器 公共字段自动填充 文件上传/下载

https://blog.csdn.net/weixin_43715214/category_12022798.html大佬记录项目介绍day01功能架构(1)用户层本项目中在构建系统管理后台的前端页面,我们会用到H5、Vue.js、ElementUI等技术。而在构建移动端应用时,我们会使用到微信小…

Red Giant Magic Bullet Suite介绍

Red Giant Magic Bullet Suite介绍什么是Magic Bullet SuiteMagic Bullet Suite功能介绍什么是Magic Bullet Suite Magic Bullet Suite是电影制作人不可或缺的一套调色降噪插件,它能够为您制作出和好莱坞一样的效果,为电影制作人提供专业的色彩校正。可…