Overview

欢迎访问 持续更新:https://cgabc.xyz/posts/ff73e084/

世界坐标系 到 像素坐标系

世界坐标系中三维点M=[X,Y,Z]TM=[X,Y,Z]^TM=[X,Y,Z]T 和 像素坐标系中二维点m=[u,v]Tm=[u,v]^Tm=[u,v]T的关系为:
sm~=A[Rt]M~s\tilde{m} = A [R \quad t] \tilde{M}sm~=A[Rt]M~
即(针孔相机模型)
s[uv1]=[fx0cx0fycy001][r11r12r13t1r21r22r23t2r31r32r33t3][XwYwZw1]\begin{aligned} s\left[\begin{array}{c}u\\v\\1\end{array}\right] = \left[\begin{array}{ccc} f_x&0&c_x\\0&f_y&c_y\\0&0&1 \end{array}\right] \left[\begin{array}{cccc} r_{11}&r_{12}&r_{13}&t_1\\r_{21}&r_{22}&r_{23}&t_2\\r_{31}&r_{32}&r_{33}&t_3 \end{array}\right] \left[\begin{array}{c}X_w\\Y_w\\Z_w\\1\end{array}\right] \end{aligned} s⎣⎡​uv1​⎦⎤​=⎣⎡​fx​00​0fy​0​cx​cy​1​⎦⎤​⎣⎡​r11​r21​r31​​r12​r22​r32​​r13​r23​r33​​t1​t2​t3​​⎦⎤​⎣⎡​Xw​Yw​Zw​1​⎦⎤​​
其中,sss为缩放因子,AAA为相机的内参矩阵,[Rt][R \quad t][Rt]为相机的外参矩阵,m~\tilde{m}m~和M~\tilde{M}M~分别为mmm和MMM对应的齐次坐标。

针孔相机模型 (pinhole)

相机将三维世界中的坐标点(单位:米)映射到二维图像平面(单位:像素)的过程能够用一个几何模型来描述,其中最简单的称为针孔相机模型 (pinhole camera model),其框架如下图所示。

世界坐标系 到 相机坐标系

[XcYcZc]=R[XwYwZw]+t=[Rt][XwYwZw1]\begin{aligned} \left[\begin{array}{c}X_c\\Y_c\\Z_c\end{array}\right] = R \left[\begin{array}{c}X_w\\Y_w\\Z_w\end{array}\right] + t = [R \quad t] \left[\begin{array}{c}X_w\\Y_w\\Z_w\\1\end{array}\right] \end{aligned} ⎣⎡​Xc​Yc​Zc​​⎦⎤​=R⎣⎡​Xw​Yw​Zw​​⎦⎤​+t=[Rt]⎣⎡​Xw​Yw​Zw​1​⎦⎤​​

相机坐标系 到 像素坐标系

根据三角形相似关系,有
Zcf=Xcx=Ycy\frac{Z_c}{f} = \frac{X_c}{x} = \frac{Y_c}{y} fZc​​=xXc​​=yYc​​
整理,得
{x=f⋅XcZcy=f⋅YcZc\begin{cases} x = f \cdot \frac{X_c}{Z_c} \\[2ex] y = f \cdot \frac{Y_c}{Z_c} \end{cases} ⎩⎨⎧​x=f⋅Zc​Xc​​y=f⋅Zc​Yc​​​
像素坐标系成像平面坐标系之间,相差一个缩放和平移,联合上式整理得

{u=α⋅x+cxv=β⋅y+cy⟹{u=αf⋅XcZc+cxv=βf⋅YcZc+cy\begin{cases} u = \alpha \cdot x + c_x \\[2ex] v = \beta \cdot y + c_y \end{cases} \quad \Longrightarrow \quad \begin{cases} u = \alpha f \cdot \frac{X_c}{Z_c} + c_x \\[2ex] v = \beta f \cdot \frac{Y_c }{Z_c} + c_y \end{cases} ⎩⎨⎧​u=α⋅x+cx​v=β⋅y+cy​​⟹⎩⎨⎧​u=αf⋅Zc​Xc​​+cx​v=βf⋅Zc​Yc​​+cy​​

{u=1dx⋅x+cxv=1dy⋅y+cy⟹{u=fdx⋅XcZc+cxv=fdy⋅YcZc+cy\begin{cases} u = \frac{1}{dx} \cdot x + c_x \\[2ex] v = \frac{1}{dy} \cdot y + c_y \end{cases} \quad \Longrightarrow \quad \begin{cases} u = \frac{f}{dx} \cdot \frac{X_c}{Z_c} + c_x \\[2ex] v = \frac{f}{dy} \cdot \frac{Y_c }{Z_c} + c_y \end{cases} ⎩⎨⎧​u=dx1​⋅x+cx​v=dy1​⋅y+cy​​⟹⎩⎨⎧​u=dxf​⋅Zc​Xc​​+cx​v=dyf​⋅Zc​Yc​​+cy​​

其中,

{dx=WsensorWimagedy=HsensorHimage\begin{cases} dx = \frac{W_{sensor}}{W_{image}}\\[2ex] dy = \frac{H_{sensor}}{H_{image}} \end{cases} ⎩⎨⎧​dx=Wimage​Wsensor​​dy=Himage​Hsensor​​​

{fx=fdxfy=fdy⟹{u=fxXcZc+cxv=fyYcZc+cy\begin{cases} f_x = \frac{f}{dx}\\[2ex] f_y = \frac{f}{dy} \end{cases} \quad \Longrightarrow \quad \begin{cases} u = f_x \frac{X_c}{Z_c} + c_x \\[2ex] v = f_y \frac{Y_c }{Z_c} + c_y \end{cases} ⎩⎨⎧​fx​=dxf​fy​=dyf​​⟹⎩⎨⎧​u=fx​Zc​Xc​​+cx​v=fy​Zc​Yc​​+cy​​

{fnx=fWsensorfny=fHsensor⟹{u=fnxWimageXcZc+cxv=fnyHimageYcZc+cy\begin{cases} f_{nx} = \frac{f}{W_{sensor}}\\[2ex] f_{ny} = \frac{f}{H_{sensor}} \end{cases} \quad \Longrightarrow \quad \begin{cases} u = f_{nx} W_{image} \frac{X_c}{Z_c} + c_x \\[2ex] v = f_{ny} H_{image} \frac{Y_c }{Z_c} + c_y \end{cases} ⎩⎨⎧​fnx​=Wsensor​f​fny​=Hsensor​f​​⟹⎩⎨⎧​u=fnx​Wimage​Zc​Xc​​+cx​v=fny​Himage​Zc​Yc​​+cy​​

其中,

  • fff为镜头焦距,单位为米;
  • α\alphaα、β\betaβ的单位为像素/米;
  • dxdxdx、dydydy为传感器x轴和y轴上单位像素的尺寸大小,单位为米/像素;
  • fxf_xfx​、fyf_yfy​为x、y方向的焦距,单位为像素;
  • fnormal_xf_{normal\_x}fnormal_x​、fnormal_yf_{normal\_y}fnormal_y​为x、y方向的归一化焦距;
  • (cx,cy)(c_x,c_y)(cx​,cy​)为主点,图像的中心,单位为像素。

最终,写成矩阵的形式为:
[uv1]=1Zc[fx0cx0fycy001][XcYcZc]\begin{aligned} \left[\begin{array}{c}u\\v\\1\end{array}\right] = \frac{1}{Z_c} \left[\begin{array}{ccc} f_x&0&c_x\\0&f_y&c_y\\0&0&1 \end{array}\right] \left[\begin{array}{c}X_c\\Y_c\\Z_c\end{array}\right] \end{aligned} ⎣⎡​uv1​⎦⎤​=Zc​1​⎣⎡​fx​00​0fy​0​cx​cy​1​⎦⎤​⎣⎡​Xc​Yc​Zc​​⎦⎤​​

Zc[uv1]=[fx0cx0fycy001][XcYcZc]\begin{aligned} Z_c\left[\begin{array}{c}u\\v\\1\end{array}\right] = \left[\begin{array}{ccc} f_x&0&c_x\\0&f_y&c_y\\0&0&1 \end{array}\right] \left[\begin{array}{c}X_c\\Y_c\\Z_c\end{array}\right] \end{aligned} Zc​⎣⎡​uv1​⎦⎤​=⎣⎡​fx​00​0fy​0​cx​cy​1​⎦⎤​⎣⎡​Xc​Yc​Zc​​⎦⎤​​

畸变模型

多项式畸变模型 (radial-tangential)

透镜的畸变主要分为径向畸变和切向畸变。

径向畸变是由于透镜形状的制造工艺导致,且越向透镜边缘移动径向畸变越严重,实际情况中我们常用r=0处的泰勒级数展开的前几项来近似描述径向畸变,径向畸变后的归一化坐标为:

{xdistorted=x(1+k1r2+k2r4+k3r6)ydistorted=y(1+k1r2+k2r4+k3r6)\begin{cases} x_{distorted} = x (1+k_1r^2+k_2r^4+k_3r^6)\\[2ex] y_{distorted} = y (1+k_1r^2+k_2r^4+k_3r^6) \end{cases} ⎩⎨⎧​xdistorted​=x(1+k1​r2+k2​r4+k3​r6)ydistorted​=y(1+k1​r2+k2​r4+k3​r6)​

切向畸变是由于透镜和CMOS或者CCD的安装位置误差导致,切向畸变需要两个额外的畸变参数来描述,切向畸变后的归一化坐标为:

{xdistorted=x+2p1xy+p2(r2+2x2)ydistorted=y+2p2xy+p1(r2+2y2)\begin{cases} x_{distorted} = x + 2p_1xy + p_2(r^2+2x^2)\\[2ex] y_{distorted} = y + 2p_2xy + p_1(r^2+2y^2) \end{cases} ⎩⎨⎧​xdistorted​=x+2p1​xy+p2​(r2+2x2)ydistorted​=y+2p2​xy+p1​(r2+2y2)​

联合上式,整理得

{xdistorted=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ydistorted=y(1+k1r2+k2r4+k3r6)+2p2xy+p1(r2+2y2)\begin{cases} x_{distorted} = x (1+k_1r^2+k_2r^4+k_3r^6) + 2p_1xy + p_2(r^2+2x^2)\\[2ex] y_{distorted} = y (1+k_1r^2+k_2r^4+k_3r^6) + 2p_2xy + p_1(r^2+2y^2) \end{cases} ⎩⎨⎧​xdistorted​=x(1+k1​r2+k2​r4+k3​r6)+2p1​xy+p2​(r2+2x2)ydistorted​=y(1+k1​r2+k2​r4+k3​r6)+2p2​xy+p1​(r2+2y2)​

其中,r2=x2+y2r^2 = x^2 + y^2r2=x2+y2

综上,我们一共需要5个畸变参数(k1,k2,k3,p1,p2)(k_1, k_2, k_3, p_1, p_2)(k1​,k2​,k3​,p1​,p2​)来描述透镜畸变。

畸变矫正

  • [图像]畸变校正详解

  • 核心示例代码 (from here)

    for (int v = 0; v < height; v++) {for (int u = 0; u < width; u++) {double u_distorted = 0, v_distorted = 0;double x = (u-cx)/fx;double y = (v-cy)/fy;double x2 = x*x, y2 = y*y, xy = x*y, r2 = x2 + y2;double x_radial = x * (1 + k1*r2 + k2*r2*r2);double y_radial = y * (1 + k1*r2 + k2*r2*r2);double x_tangential = 2*p1*xy + p2*(r2 + 2*x2);double y_tangential = 2*p2*xy + p1*(r2 + 2*y2);double xd = x_radial + x_tangential;double yd = y_radial + y_tangential;u_distorted = xd*fx + cx;v_distorted = yd*fy + cy;// 最近邻插值if (u_distorted >= 0 && v_distorted >= 0 && u_distorted < width && v_distorted < height)img_dst(v, u) = (*this)((int) v_distorted, (int) u_distorted);elseimg_dst(v, u) = 0;}
    }
    

针孔相机投影模型以及畸变模型相关推荐

  1. 2.3ORBSLAM3之相机模型与畸变模型

    1.简介 主要内容: 1. 对SLAM中常见的相机模型进行介绍,包括针孔相机模型和鱼眼相机模型 2. 对每种相机模型的畸变模型进行介绍 3. 对VSLAM中常见的几种去畸变方法进行介绍 4. 对常见的 ...

  2. 相机标定:相机模型和畸变模型

    一.相机标定方案 相机内参标定是确定内参和畸变参数(equidistqant畸变模型)或者(radial tangential模型)的过程. 本文首先介绍SLAM中常用的相机模型和畸变模型,随后介绍我 ...

  3. 相机投影模型以及畸变模型

    世界坐标系--<外参矩阵>--相机坐标系--<内参矩阵>--像素坐标系 上面参考:https://blog.csdn.net/u011178262/article/detail ...

  4. 针孔相机模型和相机镜头畸变模型

    针孔相机模型和相机镜头畸变模型 一.针孔相机模型 图1. 针孔相机模型 针孔相机模型(如图1所示)存在四个坐标系:世界坐标系.摄像机坐标系.图像物理坐标系和图像像素坐标系.假设现实世界的空间点的世界坐 ...

  5. 从普通相机模型到鱼眼畸变模型--标定与去畸变

    目录 普通相机模型 普通成像模型 针孔模型与透镜组: 径向畸变 切向畸变 现代手机摄像头的基本组成 内参矩阵 畸变模型 张氏标定法 鱼眼模型 透镜组 r和f的进一步说明 等距投影模型(OpenCV:: ...

  6. 投影和环境相机模型(PBRT)

    本文出自Physcially Base Rendering翻译 地址:https://pbr-book.org/3ed-2018/Camera_Models/Projective_Camera_Mod ...

  7. 鱼眼相机的成像模型与畸变校正

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨11号线人 来源丨十一号组织 "800万像素","250m测距能力 ...

  8. 相机畸变模型及去畸变计算

    透镜 实际成像时,如果小孔过小,则入射光的强度会受到影响,进一步会影响到成像. 另一方面,由于光的波动性,在小孔的边缘上,光将发生衍射,因此,这些光将在像平面上"散播".当小孔变的 ...

  9. unity 畸变_摄像机成像、畸变模型

    一 摄像机成像模型 成像的过程实质上是几个坐标系的转换.首先空间中的一点由世界坐标系转换到摄像机坐标系,然后再将其投影到成像平面(摄像机的CCD),最后再将成像平面上的数据转换到图像平面(最后生成的图 ...

最新文章

  1. sublime text 3 快捷键大全以及配置编译环境
  2. 最近学习了 HTTP 连接池
  3. javascript 判断为负数_JavaScript从零开始——标准库(7)
  4. 用 pandas + matplotlib 绘制精美的K线图
  5. docker 中不能用vim编辑文件
  6. [BZOJ1669][Usaco2006 Oct]Hungry Cows饥饿的奶牛
  7. 呈现模式_外汇欧盘:分析师料欧元有望涨至1.15 全球市场呈现轮涨模式
  8. Visual Studio 2012 实用快捷键
  9. 超级简单的Android Studio jni 实现(无需命令行)
  10. Hadoop:Hadoop简介及环境配置
  11. MS SQL修改数据库名称
  12. byte[] 转化为 string 转化为汉字和字母
  13. c++如何快速写出get set_如何快速写出产品文案?(4大核心方法)
  14. 操作系统Clock算法
  15. javaweb--请求转发
  16. rxbus 源码_基于APT的RxBus库
  17. 曾经写过得太监小说2《天道》
  18. UML10种图例之包图
  19. 最近很火的OkHttp剥洋葱系列
  20. 【5G核心网】 PDU Session Modification PDU会话修改

热门文章

  1. 使用matlab控制压电陶瓷pzt,PZT压电陶瓷介绍和测试方法.ppt
  2. 《六顶思考帽》读书笔记
  3. ABB 机器人调试总结1
  4. 各取所需:Microsoft Windows XP with sp3 十五种语言的MSDN原版光盘镜像
  5. (happytime)Onvif Server端口占用 10013问题解决方法
  6. 咬文嚼字的有趣例子_咬文嚼字的古今中外的例子
  7. 成都大学生接连遭遇购物网“被注册” 疑信息泄露
  8. 互联网公司发布会策划指南(包学包会)
  9. 数字化时代需要迎接新技术
  10. [转载]推荐下载:世界级杀毒软件BitDefender 2011简体