摄像机成像原理(模型)与标定

2023-05-16

一般摄像机简化为小孔成像的理想模型(线性模型),因为摄像机镜头(视场角)很小,相当于被拍摄物体通过小孔投影到感光元件CCD/CMOS上。

对于加了各种镜头的摄像机,镜头不是平面(凸镜凹镜),小孔成像的像发生畸变,属于非线性模型,需要额外矫正。

通过标定可求出摄像机各种内外参数,也包括镜头畸变。

​​​​​​​小孔成像和相机成像略有不同。

​​​​​​​

1、理想线性摄像机小孔成像示意图

下图为相机成像。 

如图,小孔成像能否看到倒立的像,取决于物体和孔的距离,以及感光板与孔的距离,按图中公式计算。其中f是焦距。

上2个图,为成像模型实际情况,像p与物体P分别位于小孔两侧,且是倒立成像,不利于观看。

2、坐标系转换

坐标转换就是,通过坐标系参数矩阵变换,该用实际物体3D坐标表示2D图片像素点,变换矩阵就是摄像机的内参。

下图,将倒立的像p颠倒并平移到小孔o的另一边,跟实际物体在一边成比例,且为正向,方便画图。

①世界坐标系:是客观三维世界的绝对坐标系,也称客观坐标系。物体实际坐标,用(Xw, Yw, Zw)表示其坐标值。

②相机坐标系(光心坐标系):以相机的光心(小孔圆心)为坐标原点,X 轴和Y 轴分别平行于图像坐标系的 X 轴和Y 轴,相机的光轴为Z 轴,用(Xc, Yc, Zc)表示其坐标值。

③图像坐标系:以CCD 图像平面的中心为坐标原点,X轴和Y 轴分别平行于图像平面的两条垂直边,用( x , y )表示其坐标值。图像坐标系是用物理单位(例如毫米)表示像素在图像中的位置。

④像素坐标系:以 CCD 图像平面的左上角顶点为原点,X 轴和Y 轴分别平行于图像坐标系的 X 轴和Y 轴,用(u , v )表示其坐标值。数码相机采集的图像首先是形成标准电信号的形式,然后再通过模数转换变换为数字图像。每幅图像的存储形式是M × N的数组,M 行 N 列的图像中的每一个元素的数值代表的是图像点的灰度。这样的每个元素叫像素,像素坐标系就是以像素为单位的图像坐标系。

如下图,是2个坐标系:④像素坐标系uv和③图像坐标系xyimg。

3、张正友标定算法calibration

”张正友标定”是指张正友教授1998年提出的单平面棋盘格的摄像机标定方法。文中提出的方法介于传统标定法和自标定法之间,但克服了传统标定法需要的高精度标定物的缺点,而仅需使用一个打印出来的棋盘格就可以。同时也相对于自标定而言,提高了精度,便于操作。因此张氏标定法被广泛应用于计算机视觉方面。

标定参数包括内参和外参。内参表示相机本身参数,外参表示拍摄每一张照片时的相机位置姿态等外部参数。

传统标定

下图,已知拍好的照片和实际物体的3D坐标,反推相机参数。需要的高精度标定物。

张氏标定步骤

  • 打印一张棋盘格A4纸张(黑白间距已知),并贴在一个平板上
  • 对棋盘格拍摄若干张图片(一般10-20张)
  • 在图片中检测特征点(Harris特征)
  • 利用解析解估算方法计算出5个内部参数,以及6个外部参数
  • 根据极大似然估计策略,设计优化目标并实现参数的refinement改善

张氏标定原理

1、成像数学模型表示

图片二维点m=[u,v]^T,真实三维点M=[X,Y,Z]^T。增广向量\tilde{m}=[u,v,1]^T\tilde{M}=[X,Y,Z,1]^T,摄像机用小孔成像得到3维M到2维m的投影公式:

s\tilde{m}=A[R,t]\tilde{M},A=\begin{bmatrix} \alpha &\gamma& u_{0}\\ 0 & \beta & v_{0}\\ 0&0 & 1 \end{bmatrix}

s是任意比例因子,[R,t]为外部参数:旋转矩阵和位移矩阵。A为相机内部参数矩阵,α和β是图像轴(焦距)的比例因子,γ是两个图像轴之间(传感器轴和光轴)的夹角(当安装准确时γ=0),(u0,v0)是2D图像的中心点。

假设M在坐标轴z=0上,上面的投影公式改写为:

s\begin{bmatrix}u\\ v\\ 1\end{bmatrix} =A\begin{bmatrix}r_{1} &r_{2} & r_{3}& t\end{bmatrix} \begin{bmatrix}X\\Y\\ 0\\1\end{bmatrix} =A\begin{bmatrix}r_{1} &r_{2} & t\end{bmatrix} \begin{bmatrix}X\\Y\\1\end{bmatrix}

 M可以改写为M=\begin{bmatrix} X & Y \end{bmatrix}^{T},所以三维点M和二维点m可以通过3*3单应性矩阵H(Homography matrix)描述:

s\tilde{m}=H\tilde{M},H=A\begin{bmatrix}r_{1} &r_{2} &t\end{bmatrix}

单目相机的PnP问题。已知物体3D坐标,和图片2D坐标,相机内参已知,求解相机外参,也就是相机的位姿的问题。

4、畸变参数确定

径向畸变系数为k1, k2, k3,切向畸变系数为p1, p2,可以通过如下两个方程求得:

径向畸变计算方程

切向畸变计算方程:

2D点和3D点的变换

  • 投影变换:8自由度,将图像转换为不同的投影
  • 仿射变换:6自由度,转换将保留原图像平行线的图像
  • 相似变换:4自由度,旋转和缩放原图像
  • 欧几里得变换:3自由度,旋转原图像

下图为2D和3D的变换等级,矩阵,自由度等

齐次坐标

齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示。

在一个2D笛卡尔坐标末尾加上一个额外的变量w来形成2D齐次坐标,因此,一个点(X,Y)在齐次坐标里面变成了(x,y,w),并且有X = x/w,Y = y/w。

使用齐次坐标,可以表示平行线在透视空间的无穷远处交于一点。欧式坐标无法表示。

例如,笛卡尔坐标系下(1,2)的齐次坐标可以表示为(1,2,1),如果点(1,2)移动到无限远处,它的齐次坐标表示为(1,2,0),在笛卡尔坐标下它变为(∞,∞),因为(1/0, 2/0) = (∞,∞)。

单应矩阵H(Homography)

单应矩阵约束了同一3D空间点在两个像素平面的2D齐次坐标。例如,两个相机对同一物体拍照,通过相机参数和单应矩阵能互相推算。

用公式表示:q_{b }\propto H_{ba}q_{a }

即:\begin{bmatrix}u_{b}\\ v_{b}\\ 1\end{bmatrix} \propto \begin{bmatrix} H_{1} &H_{2} &H_{3} \\ H_{4} &H_{5} & H_{6}\\ H_{7}& H_{8} & H_{9} \end{bmatrix} \begin{bmatrix}u_{a}\\ v_{a}\\ 1\end{bmatrix}

符号\propto表示单应矩阵H约束了qa和qb同方向,但没有约束尺度大小。可通过叉乘消去齐次的尺度因子:q_{b }\times H_{ba}q_{a }=0,

再通过两个相机的外参旋转平移(R,t),和两个相机的内参K1、K2,和3D点所在平面参数法向量和距离(n,d),计算单应矩阵:H_{ba}=K_{b}R_{ba}(I+\frac{1}{d_{a}}t_{ab}n_{a}^{T})K_{a}^{-1}

单应矩阵应用举例:将第2个图片放入第1个图片的广告版中

参考文献:

1、从零开始一起学习SLAM | 相机成像模型 - electech6的博客 - CSDN博客  https://blog.csdn.net/electech6/article/details/83617892

2、SLAM入门之视觉里程计(2):相机模型(内参数,外参数) - Brook_icv - 博客园  https://www.cnblogs.com/wangguchangqing/p/8126333.html

3、【3D视觉工坊】第二期公开课:相机标定的基本原理与经验分享_哔哩哔哩_bilibili  https://www.bilibili.com/video/BV1R7411m7ZQ

4、张正友标定算法原理详解 - 简书  https://www.jianshu.com/p/9d2fe4c2e3b7

5、张正友相机标定法原理与实现_Eating Lee-CSDN博客_张正友标定法原理  https://blog.csdn.net/qq_40369926/article/details/89251296

6、谭平--从相机标定到SLAM,极简三维视觉六小时课程视频_哔哩哔哩_bilibili  https://www.bilibili.com/video/BV124411W775/?p=2&spm_id_from=pageDriver

7、无人驾驶传感器融合系列(十一)—— 相机内参标定_默_存的博客-CSDN博客  https://blog.csdn.net/weixin_40215443/article/details/98478019

8、张正友标定法翻译_heroacool的专栏-CSDN博客_张正友标定法论文  https://blog.csdn.net/heroacool/article/details/50286677

9、《Computer Vision_ Algorithms and Applications-Richard Szeliski》第二章 image formation

10、单应矩阵的推导与理解 - 知乎  https://zhuanlan.zhihu.com/p/138266214

11、图像处理之理解Homography matrix(单应性矩阵) - 云+社区 - 腾讯云  https://cloud.tencent.com/developer/article/1084332

12、

13、

14、

15、

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

摄像机成像原理(模型)与标定 的相关文章

  • FreeRTOS列表和列表项

    本文是 ALIENTEK STM32F429 FreeRTOS 开发教程 第七章学习笔记 第一章笔记 FreeRTOS简介与源码下载 第二章笔记 FreeRTOS在STM32F4上移植 第三章笔记 FreeRTOS系统配置 第四章笔记 Fr
  • FreeRTOS任务创建

    本文是 ALIENTEK STM32F429 FreeRTOS 开发教程 第八章学习笔记 1 第一章笔记 FreeRTOS简介与源码下载 第二章笔记 FreeRTOS在STM32F4上移植 第三章笔记 FreeRTOS系统配置 第四章笔记
  • FreeRTOS任务调度器开启

    本文是 ALIENTEK STM32F429 FreeRTOS 开发教程 第八章学习笔记 2 第一章笔记 FreeRTOS简介与源码下载 第二章笔记 FreeRTOS在STM32F4上移植 第三章笔记 FreeRTOS系统配置 第四章笔记
  • css样式缓存

    1 问题 css样式变更之后 xff0c 必须手动清缓存才能生效 2 百度 在实际项目开发过过程中 xff0c 页面是上传到服务器上的 而为了减少服务器的压力 xff0c 让用户少加载 xff0c 浏览器会将图片 css js缓存到本地中
  • 使用Verilog HDL语言实现4位超前进位加法器

    一 1位半加器的实现 1 1 原理 半加器由两个一位输入相加 xff0c 输出一个结果位和进位 xff0c 没有进位输入的加法器电路 1 2 真值表 1 3 逻辑表达式 S 61 A B C 61 A amp B 1 4 Verilog 实
  • FreeRTOS任务切换

    本文是 ALIENTEK STM32F429 FreeRTOS 开发教程 第九章学习笔记 第一章笔记 FreeRTOS简介与源码下载 第二章笔记 FreeRTOS在STM32F4上移植 第三章笔记 FreeRTOS系统配置 第四章笔记 Fr
  • 蓝桥杯嵌入式备赛手册

    本文是我参加蓝桥杯嵌入式比赛后的一些心得体会和一些自己总结的驱动代码 xff0c 希望能给以后参加蓝桥杯嵌入式的同学带来一些帮助 本文没有经过校对 xff0c 如有错误还请包涵 xff0c 欢迎大家交流和指正 xff0c 转载请注明出处 一
  • U-Boot详细分析(2)——Exynos4412启动过程

    一 iROM 首先arm的pc指针从0x0地址开始执行 xff0c 打开4412手册可以看到0x0000 0000地址存放着iROM xff1a 所以4412上电后会到iROM中去执行 xff0c iROM是4412出厂时就固化的一段程序
  • U-Boot详细分析(3)——系统时钟操作

    一 引子 在上一篇文章 U Boot详细分析 2 Exynos4412启动过程中可以看到 xff0c BL2程序流程图中有SET CLOCK s这一步骤 xff0c 并且在U Boot源码的 board samsung smdkc210 l
  • 字符串中的第一个唯一字符

    leetcode 的easy题 xff1a 给定一个字符串 xff0c 找到它的第一个不重复的字符 xff0c 并返回它的索引 如果不存在 xff0c 则返回 1 案例 s 61 34 leetcode 34 返回 0 s 61 34 lo
  • WOC广域网加速

    WOC广域网加速 1 广域网存在的问题 xff1a 大量的路由 网关 跨区域和跨运营商的情况比较常见 丢包和延长使用传输效率降低 交互过多导致传输效率差 2 解读方案 xff1a 应用流量可视化 链路优化 数据优化 流量管理 智能报表 3
  • ros发布gps定位信息

    1 可行的主题 Robot Pose EKF节点订阅下面的主题 xff1a odom 2D消息 lt nav msgs Odometry gt imu data 3D消息 lt sensor msgs Imu gt vo 3D消息 lt n
  • tx2备份与恢复

    NVIDIA Jetson是通过Micro USB USB TYPE C接口升级系统 xff08 具体参考不同载板说明 xff09 xff0c 更新前需让Jetson进入Recovery 模式 Recovery 模式下可以进行文件系统更新包
  • debian 163各版本源

    debian8 stable deb http mirrors 163 com debian jessie main non free contrib deb http mirrors 163 com debian jessie updat
  • svn st 状态标识

    svn status 简写 xff1a stat st 显示工作副本中目录与文件的状态 用法 status PATH 未指定参数时 xff0c 只显示本地修改的条目 没有网络访问 常用可选项 xff1a q 只显示本地修改条目的摘要信息 u
  • 单片机蜂鸣器控制程序和驱动电路

    蜂鸣器从结构区分分为压电式蜂鸣器和电磁式蜂鸣器 压电式为压电陶瓷片发音 xff0c 电流比较小一些 xff0c 电磁式蜂鸣器为线圈通电震动发音 xff0c 体积比较小 按照驱动方式分为有源蜂鸣器和无源蜂鸣器 这里的有源和无源不是指电源 xf
  • Linux 下的信号量

    linux下的posix有名信号量的几个要点 博客园 最全面的linux信号量解析 csdn blog Semaphore信号量总结 博客园 sem timedwait csdn blog 一 信号量的概念 信号量的使用主要是用来保护共享资
  • x86-从实模式到保护模式

    十进制到二进制的转换 十进制转换为十六进制 十六进制表示法 在很多高级语言中 xff0c 通常不采用在后面加h的做法来表示十六进制 xff0c 而是为他添加一个0x前缀 如 xff1a 0x3f
  • MG-SOFT 导入MIB文件

    之前SNMP测试一直用的是IReasoning MIB browser xff0c 最近测试snmp V3 xff0c 需要使用MG SOFT MIB Browser 在导入之前使用的MIB文件时 xff0c 发现跟IReasoning M

随机推荐

  • Ubuntu更新源 Failed to fetch http://xxxxxxx Temporary failure resolving ‘mirrors.aliyun.com‘

    之前公司产品一直使用32位环境 xff0c 最近需要使用64位环境 需要更新软件库 xff0c 就换了个64位ubuntu虚拟机 xff0c 重新编译所需的库 xff08 包括pcap grpc等 xff09 更新库的时候 xff0c 想着
  • 交换机学习----网桥

    最近接触到交换机产品 xff0c 正好借机会学习下二层相关网络技术 之前一直想写点东西 xff0c 又懒得写 这次乘机会多写点 xff0c 记录下 xff0c 也算是对学习的一个交代 另自己是初学者 xff0c 也希望能和前辈多交流 有写的
  • Ubuntu配置tftp服务端

    这两天安装ONIE和sonic系统 xff0c 基于ONIE安装sonic系统时 需要使用到tftp服务 xff0c 正好电脑里面有ubuntu的虚拟机 xff0c 就直接在虚拟机上安装了tftp服务器 顺便记录下 一 安装 tftp 1
  • Ubuntu Samba配置简介

    1 Samba 三种特殊的 NAME global xff1a 其属性选项是全局可见的 xff0c 但是在需要的时候 xff0c 可以在其他 lt section gt 中定义某些属性来覆盖 global 的对应选项定义 homes xff
  • ESP8266下载

    下载引脚介绍 VCC span class token operator lt 61 span span class token operator 61 61 span span class token operator 61 61 spa
  • libssl-dev : 依赖: libssl1.0.0 (= 1.0.2g-1ubuntu4.13) 但是 1.0.2n-1ubuntu5.1 正要被安装

    ubuntu下apt get install安装软件 xff0c 报 无法修正错误 xff0c 因为您要求某些软件包保持现状 xff0c 就是它们破坏了软件包间的依赖关系 比如以下报错 一般出现这种情况的原因时 要装A xff0c 依赖B
  • 高通平台音频调试常见问题点归纳

    以下是关于高通音频调试中遇到的一些常见问题点归纳 xff0c 仅供参考 xff0c 如有错误 xff0c 请指正 xff01 1 Audio EC VOIP 软件主要需要设置EC REF echo reference 信号 xff0c 在A
  • 蚂蚁金服二轮面试(P7岗)经验分享

    特意注册了个新号 xff0c 发表下记录自己此次蚂蚁金服的面试情况 xff0c 为了感谢大家面试经历的分享 xff0c 也是对自己面试的总结和复盘 上周三面试 xff0c 截止到现在一周过去啦 xff0c 还没有消息 xff0c 面试过程也
  • 堪比当年的LSTM,Transformer引燃机器学习圈:它是万能的

    视学算法报道 转载自公众号 xff1a 机器之心 作者 xff1a 魔王 谷歌研究科学家 David Ha xff1a Transformer 是新的 LSTM 2017 年 6 月谷歌发布论文 Attention is All You N
  • linux 睡眠函数——sleep(),usleep()

    http blog csdn net gpengtao article details 7887293 include lt unistd h gt unsigned int sleep unsigned int seconds 睡眠秒 返
  • 软件工程复试——九、面向对象方法学引论

    九 面向对象方法学引论 面向对象方法学的出发点和原则是尽可能模拟人类思维方式 xff0c 使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程 xff0c 使描述空间的问题域与求解域在结构上保持一致 面向对象方法的四个要点 xf
  • FreeRTOS+TCP模块移植

    上一版本移植并没有写的很详细 xff0c 只是将改好的代码贴上去 xff0c 今天更新一版 xff0c 附带资源 上一版本用的是FreeRTOS V10 0 1 这一版采用了最新的FreeRTOS V10 3 1 在正确移植FreeRTOS
  • PID控制器讲解

    这个视频教程讲的非常好 xff0c 从理论层面到应用 xff0c 强烈推荐有兴趣的同学看一下 https www bilibili com video BV1B54y1V7hp
  • Python学习笔记丨while、for、if循环结构基础知识与易错点

    Python流程控制 本篇笔记的主要内容是 xff1a 条件控制和循环控制 xff0c 包括if语句 while语句 for语句等 Python条件控制 span class hljs keyword style color c678dd
  • R语言安装R包的方法,mac、windows、linux安装R包常见问题与解决方法

    R语言如何快速安装R包 xff1f 如果把R比作是沃土的话 xff0c 那么R包就是鲜花 xff0c 开源共享的开发者社区提供了很多功能丰富的R包 xff0c 方便使用者充分利用R语言完成工作 但是 xff0c 有时候在安装R包是会遇到各种
  • kube-ovn代码系列(四)pod 安全组功能

    kube ovn代码系列 xff08 四 xff09 pod 安全组功能 链接 https www gogo dev com index php 2022 02 19 kube ovn securitygroup 内容 kube ovn在1
  • Ubuntu20.04下运行VINS系列:VINS-Mono、VINS-Fusion和GVINS

    文章目录 一 安装VINS Mono1 1 适配Ceres2 1 01 2 适配OpenCV41 3 编译运行 二 安装VINS Fusion2 1 适配Ceres2 1 0和OpenCV42 2 编译运行2 2 1 EuRoC数据集2 2
  • 最小花费

    题目描述 在n个人中 xff0c 某些人的银行账号之间可以互相转账 这些人之间转账的手续费各不相同 给定这些人之间转账时需要从转账金额里扣除百分之几的手续费 xff0c 请问A最少需要多少钱使得转账后B收到100元 输入格式 第一行输入两个
  • 传感器融合sensor fusion

    自动控制系统中的传感器融合 传感器融合的4个作用 xff1a 1 增加数据质量 比如减少噪声 xff1b 2 增加可靠性 多传感器互为备份 xff1b 3 估计预测状态 xff1b 4 可增加被测范围 相对于单个传感器来说 xff0c 多传
  • 摄像机成像原理(模型)与标定

    一般摄像机简化为小孔成像的理想模型 xff08 线性模型 xff09 xff0c 因为摄像机镜头 xff08 视场角 xff09 很小 xff0c 相当于被拍摄物体通过小孔投影到感光元件CCD CMOS上 对于加了各种镜头的摄像机 xff0