相机内参、外参、畸变系数简介

这篇具有很好参考价值的文章主要介绍了相机内参、外参、畸变系数简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、相机模型

1、简介

初中物理我们就学过小孔成像问题,这也是我们对相机的最初认识。
仅靠一个小孔进光量太小,拍摄到的照片会很暗,所以实际的相机会使用凸透镜来聚光。但是凸透镜的光学模型过于复杂,通常会简化成针孔相机模型来解释成像过程并进行建模。
这时出现了一个疑问,小孔成像成倒立的像,而照片的方向却是正常的?原因在于相机内部会对所成的像再进行一次镜像,所以用户看到的图像就跟人眼看到的方向一致了,我们可以把这一过程等效成把成像平面放到相机前方,示意图如下(之后为了直观,本文所说的成像平面均为镜像过后的等效成像平面)。
相机外参,计算机视觉

列出几个重要名词,通过下图可以简单建立下概念,后边再细品
相机外参,计算机视觉

  • 世界坐标系 o w − x w − y w − z w o_w-x_w-y_w-z_w owxwywzw:世界坐标系不是一个有明确定义的坐标系,你可以任意指定一个在当前场景下固定不变的坐标系作为世界坐标系。
  • 相机坐标系 o c − x c − y c − z c o_c-x_c-y_c-z_c ocxcyczc:相机坐标系习惯上这样定义:以相机光心为坐标系原点;假设你在手持相机,那么你的右手边是x轴正方向,下边是y轴正方向,相机前方是z轴正方向,也就是说,拍摄的远处物体距离为正。
  • 图像坐标系 o i − x i − y i o_i-x_i-y_i oixiyi:图像坐标系的原点就位于感光芯片的中心(感光芯片是位于镜头背后的用于成像的小板子),x、y轴方向和相机坐标系x、y相同,不同的是图像坐标系是二维坐标系没有z轴
    相机外参,计算机视觉
  • 像素坐标系 o p − x p − y p o_p-x_p-y_p opxpyp:像素坐标系也位于成像平面上,是图像坐标系通过平移和缩放的到的。值得注意的是不同软件或者库对于像素坐标 ( u , v ) (u,v) (u,v)的定义不一样,比如OpenCV中把 u u u定义为行坐标, v v v定义为列坐标,与我们这里的定义就不太一样。所以使用前需要统一像素坐标的定义

2、针孔相机模型

相机外参,计算机视觉

P c P_c Pc点是相机坐标系下坐标, P i P_i Pi是图像坐标系下坐标, Z c Z_c Zc P c P_c Pc点距离光心的距离, f f f是镜头的焦距, X c X_c Xc X i X_i Xi是点在 x x x轴投影距离原点的距离,是正值。
根据相似三角形原理可得:

Z c f = − X c X i = − Y c Y i ( 1 ) \frac{Z_{c}}{f}=-\frac{X_{c}}{X_i}=-\frac{Y_{c}}{Y_i} (1) fZc=XiXc=YiYc1
回忆前文提到的等效成像平面,我们这里再强化一下这个概念,将 P ′ P' P镜像到镜头前方

相机外参,计算机视觉

于是可以将(1)式中的负号去掉
Z c f = X c X i = Y c Y i ( 2 ) \frac{Z_{c}}{f}=\frac{X_{c}}{X_i}=\frac{Y_{c}}{Y_i} (2) fZc=XiXc=YiYc2

二、相机内参

内参矩阵描述的是相机坐标系下的坐标到像素坐标的变换关系

1.相机坐标-图像坐标

利用 ( 2 ) (2) (2)式,很容易可以得出二者的转换关系。
{ X i = f Z c X c Y i = f Z c Y c ( 3 ) \left\{ \begin{aligned} X_i=\frac{f}{Z_{c}}X_{c}\\ Y_i=\frac{f}{Z_{c}}Y_{c} \end{aligned} \right. (3) Xi=ZcfXcYi=ZcfYc3

2.图像坐标-像素坐标

图像坐标是实连续值,而像素坐标是离散的正值,经过简单的平移和尺度缩放,很容易得到二者之间的转换关系如下:
{ u = α X i + c x v = β Y i + c y ( 4 ) \left\{ \begin{aligned} u=\alpha X_i+c_x\\ v=\beta Y_i+c_y \end{aligned} \right. (4) {u=αXi+cxv=βYi+cy(4)

α \alpha α β \beta β与实际传感器的物理尺寸有关,单位为 p i x e l / m pixel/m pixel/m X i X_i Xi Y i Y_i Yi单位为 m m m c x c_x cx c y c_y cy单位为 p i x e l pixel pixel

3.相机坐标-像素坐标

( 3 ) (3) (3)式,将 X i , Y i X_i,Y_i Xi,Yi X , Y , Z X,Y,Z X,Y,Z替换,得到像素坐标与相机坐标系下坐标的关系
{ u = f x X c Z c + c x v = f y Y c Z c + c y ( 5 ) \left\{ \begin{aligned} u=f_x \frac{X_{c}}{Z_{c}}+c_x\\ v=f_y \frac{Y_{c}}{Z_{c}}+c_y \end{aligned} \right.(5)\\ u=fxZcXc+cxv=fyZcYc+cy5
为了表达更加漂亮,引入齐次坐标
( u v 1 ) = 1 Z c ( f x 0 c x 0 f y c y 0 0 1 ) ( X c Y c Z c ) ( 6 ) \left( \begin{matrix} u\\ v\\ 1 \end{matrix} \right) =\frac{1}{Z_c} \left( \begin{matrix} f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1\\ \end{matrix} \right) \left( \begin{matrix} X_{c}\\ Y_{c}\\ Z_{c} \end{matrix} \right)(6) uv1 =Zc1 fx000fy0cxcy1 XcYcZc 6
Z c ( u v 1 ) = K P c ( 7 ) Z_c \left( \begin{matrix} u\\ v\\ 1 \end{matrix} \right)=KP_{c}(7) Zc uv1 =KPc7
为了避免混淆,一些参考材料会使用 s s s来代替 Z c Z_c Zc,注意他们意思是一样的

思考:

  • 观察(6)式可以发现,由于 1 Z c \displaystyle\frac{1}{Z_c} Zc1的存在,对相机坐标同时乘一个常数后的到的像素坐标是相同的。也就是说从光心发出的射线上的点,在图片里对应的像素坐标是相同的,即点的深度在投影过程中被丢失了。不用特殊手段,单目相机无法得到深度值。但如果给定距离,像素点对应的 P c P_{c} Pc就可唯一确定。
  • 再重新处理一下(6)式
    ( u v 1 ) = ( f x 0 c x 0 f y c y 0 0 1 ) ( X c / Z c Y c / Z c 1 ) ( 8 ) \left( \begin{matrix} u\\ v\\ 1 \end{matrix} \right)= \left( \begin{matrix} f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1\\ \end{matrix} \right) \left( \begin{matrix} X_c/Z_c\\ Y_c/Z_c\\ 1 \end{matrix} \right)(8) uv1 = fx000fy0cxcy1 Xc/ZcYc/Zc1 8)
    可以认为像素坐标是对相机前方1处平面上的点采样和量化的过程,这个平面称为归一化平面,平面上点的坐标称为归一化坐标

至此,我们推出了想要的结果!这个只和相机内部参数有关的矩阵 K K K即为相机的内参矩阵
K = ( f x 0 c x 0 f y c y 0 0 1 ) ( 7 ) K=\left( \begin{matrix} f_x&0&c_x\\ 0&f_y&c_y\\ 0&0&1\\ \end{matrix} \right)(7) K= fx000fy0cxcy1 (7)
有的时候还会引入一个 λ \lambda λ参数,来描述交轴误差(感光芯片的 X , Y X,Y X,Y轴没有完全垂直)
( f x λ c x 0 f y c y 0 0 1 ) \left( \begin{matrix} f_x&\lambda&c_x\\ 0&f_y&c_y\\ 0&0&1\\ \end{matrix} \right) fx00λfy0cxcy1

注意:

  • 感光芯片的最小单元一般不是严格的正方形,所以得到的 f x f_x fx f y f_y fy不一定相等。并且理论上 f x 、 f y 、 c x 、 c y f_x、f_y、c_x、c_y fxfycxcy应该是整数,但是最优化算出来的结果不一定是整数,影响不大。
  • K一般会由相机生产商提供,如果没有提供则可以通过单目棋盘格张正友标定法确定,这个过程被称作内参标定
  • 实际使用中交轴误差好像很少被考虑

三、外参矩阵

外参矩阵描述的是世界坐标系下坐标与相机坐标系下坐标的转换关系,众所周知,两个坐标系之间的刚体变换可以通过旋转和平移描述,这里其实也没啥好说的。

1.世界坐标-相机坐标

( X c Y c Z c ) = [ R     t ] ( X w Y w Z w 1 )   ( 8 ) \left( \begin{matrix} X_{c}\\ Y_{c}\\ Z_{c} \end{matrix} \right)=[R \ \ \ t] \left( \begin{matrix} X_{w}\\ Y_{w}\\ Z_{w}\\ 1 \end{matrix} \right) \ (8) XcYcZc =[R   t] XwYwZw1  (8)
P c = [ R     t ] P w ~ P_c=[R \ \ \ t]\tilde{P_w} Pc=[R   t]Pw~
这里的 P w ~ \tilde{P_w} Pw~是齐次坐标, P w ~ = [ P w    1 ] T \tilde{P_w}=[P_w \ \ 1]^T Pw~=[Pw  1]T R R R 3 × 3 3\times3 3×3的旋转矩阵, t t t 3 × 1 3\times1 3×1的平移向量, R R R t t t称为相机的外参数。

这个地方如果不理解的,可以去搜索刚体变换,我这里就不写了

2.世界坐标-像素坐标

Z c P u v = Z c ( u v 1 ) = K [ R    t ] P w ~ ( 9 ) Z_cP_{uv}=Z_c \left( \begin{matrix} u\\ v\\ 1 \end{matrix} \right)= K[R\ \ t]\tilde{P_w}(9) ZcPuv=Zc uv1 =K[R  t]Pw~9

四、畸变系数

畸变系数也是相机内参的一部分,非理想情况下,存在以下问题:

  1. 透镜自身的形状会对光线传播产生影响——径向畸变

  2. 机械组装过程中,透镜和成像平面不可能完全平行——切向畸变

其中切向畸变影响很小;径向畸变最为常见,尤其是在照片的边缘上(可以拿出手机,把自己的脸调整到边缘上,看看有没有变形),效果如下:
相机外参,计算机视觉

1.畸变矫正

如果相机畸变比较明显,那么获得图像坐标后,要使用畸变系数进行矫正,数学模型如下:
径向:
X i c = X i ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) Y i c = Y i ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) X_{ic}=X_i(1+k_1r^2+k_2r^4+k_3r^6)\\ Y_{ic}=Y_i(1+k_1r^2+k_2r^4+k_3r^6) Xic=Xi(1+k1r2+k2r4+k3r6)Yic=Yi(1+k1r2+k2r4+k3r6)
切向:
X i c = X i + 2 p 1 X i Y i + p 2 ( r 2 + 2 X i 2 ) Y i c = Y i + p 1 ( r 2 + 2 Y i 2 ) + 2 p 2 X i Y i X_{ic}=X_i+2p_1X_iY_i+p_2(r^2+2X_i^2)\\ Y_{ic}=Y_i+p_1(r^2+2Y_i^2)+2p_2X_iY_i Xic=Xi+2p1XiYi+p2(r2+2Xi2)Yic=Yi+p1(r2+2Yi2)+2p2XiYi

不同镜头畸变模型不太一样,比如鱼眼镜头和广角镜头都有,这个地方我平时用不到,引用一篇比较完整的总结常用相机投影及畸变模型(针孔|广角|鱼眼),感兴趣的可以去学习。文章来源地址https://www.toymoban.com/news/detail-729526.html

到了这里,关于相机内参、外参、畸变系数简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 相机标定 >> 坐标系转换@内参、外参

    为了更好的理解标定,首先应熟悉各个坐标系。(坐标系图均取自百度百科) 该坐标系是以图像左上角为原点建立以像素为单位的二维坐标系u-v。(相对坐标系) 图像坐标系是以 O1 (是图像的主点,也即光轴与像平面的交点,一般就是像素坐标系的中点)为原点的二维坐标

    2024年02月12日
    浏览(49)
  • (九)相机内参、外参、反透视变换python opencv

    任务需求:将相机上的一个点投影到真实世界平面上去。 原则上单目相机是不可以的,因为只记录了二维信息,真实世界是三维的,双目相机可以通过视差,或者单目+IMU组合,但是 由于特征点在地面上的先验知识 ,因此可以进行反透视变换。方法有很多种那个,这里采用计

    2024年02月06日
    浏览(46)
  • 一文理清相机内参和外参矩阵的来龙去脉 -- review向

    Auther:SeaHIRobot date: 2023-05-03 最近在做一门课程的项目,在pybullet中复现GGCNN的机械臂视觉抓取的深度学习网络。在搭建仿真环境时,又回到了绕不开的相机内参和外参。借此机会对相机内参外参这一套进行一个review,对这个问题进行一个逻辑梳理。 因此本文不建议纯小白阅读

    2024年02月04日
    浏览(47)
  • 使用ROS功能包camera_calibration进行单目相机和双目相机的内参和外参标定

    本文总结使用ROS标定单目和双目相机的过程,同时提供生成棋盘格文件的方法。 参考链接: [1]使用ros标定相机的内参和外参 [2]ROS下采用camera_calibration进行双目相机标定 棋盘格可以自己买一个,或者打印一个粘在板子上,棋盘格电子版生成可以参考博客《使用kalibr标定工具进

    2024年02月11日
    浏览(45)
  • 【计算机视觉----相机标定】

    相机标定 是计算机视觉中的一个重要问题,它的目的是确定相机的内部参数和外部参数,以建立从相机到图像的映射关系。相机标定的算法通常 分为两个步骤 :第一步是检测棋盘格角点并计算相机的内部参数,第二步是计算相机的外部参数。 第一步:检测棋盘格角点并计算

    2024年02月02日
    浏览(53)
  • 【计算机视觉】相机

    我的《计算机视觉》系列参考UC Berkeley的CS180课程,PPT可以在课程主页看到。 成像原理 想要拍一张相片,直接拿胶片对着景物肯定是不行的,因为物体的每一点发出的光线都会到达胶片上的每一点,从而导致胶片上的影像非常模糊,甚至什么都看不出来。因此,我们想建立景

    2024年02月08日
    浏览(41)
  • 计算机视觉的相机选型

    #你一般什么时候会用到GPT?# 目前市面上的工业相机大多是基于CCD(ChargeCoupled Device)或CMOS(Complementary Metal Oxide Semiconductor)芯片的相机。一般CCD制造工艺更加复杂,也会更贵一点! 1、CCD工业相机主要应用在运动物体的图像提取,不过因为CMOS相机的成本低,所以应用也比较广

    2024年02月08日
    浏览(47)
  • 计算机视觉基础(7)——相机基础

    从这一节开始,我们来学习 几何视觉 。中层视觉包括 相机模型、单目几何视觉、对极几何视觉和多目立体视觉等 。在学习几何视觉最开始,我们先来学习一下 相机模型 ,了解相机的基本原理,了解相机如何记录影像。 相机用于生成 二维的图像 ,图像最小的单元被称为

    2024年02月04日
    浏览(48)
  • 计算机视觉:OpenCV相机标定

    针孔照相机模型是一种经典的相机模型,它将相机视为一个针孔,将场景中的点投影到成像平面上。在这个模型中,相机的 内参和外参 描述了相机的几何形状和相机的姿态。 相机的 内参矩阵 描述了相机的内部几何形状,包括相机的焦距、像素尺寸和像素坐标原点。相机的

    2024年01月19日
    浏览(64)
  • 计算机视觉:多相机硬件同步拍摄

    目前主要有两种方法来同步不同传感器的信息(帧、IMU数据包、ToF等): 硬件同步(基于硬件信号触发,同步精度较高,需要硬件支持) 软件同步(基于时间戳或序列号同步,同步精度较低,无需硬件支持) 此博客重点介绍硬件同步,它允许在多个相机传感器之间精确同步

    2024年02月13日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包