针孔相机投影模型以及畸变模型
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⎦⎤=⎣⎡fx000fy0cxcy1⎦⎤⎣⎡r11r21r31r12r22r32r13r23r33t1t2t3⎦⎤⎣⎡XwYwZw1⎦⎤
其中,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} ⎣⎡XcYcZc⎦⎤=R⎣⎡XwYwZw⎦⎤+t=[Rt]⎣⎡XwYwZw1⎦⎤
相机坐标系 到 像素坐标系
根据三角形相似关系,有
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⋅ZcXcy=f⋅ZcYc
像素坐标系和成像平面坐标系之间,相差一个缩放和平移,联合上式整理得
{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+cxv=β⋅y+cy⟹⎩⎨⎧u=αf⋅ZcXc+cxv=βf⋅ZcYc+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+cxv=dy1⋅y+cy⟹⎩⎨⎧u=dxf⋅ZcXc+cxv=dyf⋅ZcYc+cy
其中,
{dx=WsensorWimagedy=HsensorHimage\begin{cases} dx = \frac{W_{sensor}}{W_{image}}\\[2ex] dy = \frac{H_{sensor}}{H_{image}} \end{cases} ⎩⎨⎧dx=WimageWsensordy=HimageHsensor
则
{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=dxffy=dyf⟹⎩⎨⎧u=fxZcXc+cxv=fyZcYc+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=Wsensorffny=Hsensorf⟹⎩⎨⎧u=fnxWimageZcXc+cxv=fnyHimageZcYc+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⎦⎤=Zc1⎣⎡fx000fy0cxcy1⎦⎤⎣⎡XcYcZc⎦⎤
或
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⎦⎤=⎣⎡fx000fy0cxcy1⎦⎤⎣⎡XcYcZc⎦⎤
畸变模型
多项式畸变模型 (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+k1r2+k2r4+k3r6)ydistorted=y(1+k1r2+k2r4+k3r6)
切向畸变是由于透镜和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+2p1xy+p2(r2+2x2)ydistorted=y+2p2xy+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+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ydistorted=y(1+k1r2+k2r4+k3r6)+2p2xy+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;} }
针孔相机投影模型以及畸变模型相关推荐
- 2.3ORBSLAM3之相机模型与畸变模型
1.简介 主要内容: 1. 对SLAM中常见的相机模型进行介绍,包括针孔相机模型和鱼眼相机模型 2. 对每种相机模型的畸变模型进行介绍 3. 对VSLAM中常见的几种去畸变方法进行介绍 4. 对常见的 ...
- 相机标定:相机模型和畸变模型
一.相机标定方案 相机内参标定是确定内参和畸变参数(equidistqant畸变模型)或者(radial tangential模型)的过程. 本文首先介绍SLAM中常用的相机模型和畸变模型,随后介绍我 ...
- 相机投影模型以及畸变模型
世界坐标系--<外参矩阵>--相机坐标系--<内参矩阵>--像素坐标系 上面参考:https://blog.csdn.net/u011178262/article/detail ...
- 针孔相机模型和相机镜头畸变模型
针孔相机模型和相机镜头畸变模型 一.针孔相机模型 图1. 针孔相机模型 针孔相机模型(如图1所示)存在四个坐标系:世界坐标系.摄像机坐标系.图像物理坐标系和图像像素坐标系.假设现实世界的空间点的世界坐 ...
- 从普通相机模型到鱼眼畸变模型--标定与去畸变
目录 普通相机模型 普通成像模型 针孔模型与透镜组: 径向畸变 切向畸变 现代手机摄像头的基本组成 内参矩阵 畸变模型 张氏标定法 鱼眼模型 透镜组 r和f的进一步说明 等距投影模型(OpenCV:: ...
- 投影和环境相机模型(PBRT)
本文出自Physcially Base Rendering翻译 地址:https://pbr-book.org/3ed-2018/Camera_Models/Projective_Camera_Mod ...
- 鱼眼相机的成像模型与畸变校正
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨11号线人 来源丨十一号组织 "800万像素","250m测距能力 ...
- 相机畸变模型及去畸变计算
透镜 实际成像时,如果小孔过小,则入射光的强度会受到影响,进一步会影响到成像. 另一方面,由于光的波动性,在小孔的边缘上,光将发生衍射,因此,这些光将在像平面上"散播".当小孔变的 ...
- unity 畸变_摄像机成像、畸变模型
一 摄像机成像模型 成像的过程实质上是几个坐标系的转换.首先空间中的一点由世界坐标系转换到摄像机坐标系,然后再将其投影到成像平面(摄像机的CCD),最后再将成像平面上的数据转换到图像平面(最后生成的图 ...
最新文章
- sublime text 3 快捷键大全以及配置编译环境
- 最近学习了 HTTP 连接池
- javascript 判断为负数_JavaScript从零开始——标准库(7)
- 用 pandas + matplotlib 绘制精美的K线图
- docker 中不能用vim编辑文件
- [BZOJ1669][Usaco2006 Oct]Hungry Cows饥饿的奶牛
- 呈现模式_外汇欧盘:分析师料欧元有望涨至1.15 全球市场呈现轮涨模式
- Visual Studio 2012 实用快捷键
- 超级简单的Android Studio jni 实现(无需命令行)
- Hadoop:Hadoop简介及环境配置
- MS SQL修改数据库名称
- byte[] 转化为 string 转化为汉字和字母
- c++如何快速写出get set_如何快速写出产品文案?(4大核心方法)
- 操作系统Clock算法
- javaweb--请求转发
- rxbus 源码_基于APT的RxBus库
- 曾经写过得太监小说2《天道》
- UML10种图例之包图
- 最近很火的OkHttp剥洋葱系列
- 【5G核心网】 PDU Session Modification PDU会话修改
热门文章
- 使用matlab控制压电陶瓷pzt,PZT压电陶瓷介绍和测试方法.ppt
- 《六顶思考帽》读书笔记
- ABB 机器人调试总结1
- 各取所需:Microsoft Windows XP with sp3 十五种语言的MSDN原版光盘镜像
- (happytime)Onvif Server端口占用 10013问题解决方法
- 咬文嚼字的有趣例子_咬文嚼字的古今中外的例子
- 成都大学生接连遭遇购物网“被注册” 疑信息泄露
- 互联网公司发布会策划指南(包学包会)
- 数字化时代需要迎接新技术
- [转载]推荐下载:世界级杀毒软件BitDefender 2011简体