首页 > 其他分享 >相机成像的四个坐标系

相机成像的四个坐标系

时间:2023-08-19 20:46:07浏览次数:34  
标签:begin end 成像 相机 bmatrix 图像 坐标系

相机成像的四个坐标系

Write By Champrin On 2022-11-3
GUET Evolution Team Visual Group

三维重建第三课:相机标定原理步骤(一)坐标系变换
三维重建第四课:相机标定原理步骤(二)世界坐标系到相机坐标系与畸变
相机标定——四个坐标系
MATLAB有关相机模型
《Learning OpenCV3》ch18:相机模型与标定

相机镜头-凸透镜

  • 焦距 \(f\)
    • 是光学系统中衡量光的聚集或发散的度量方式,指从透镜的光心到光聚集之焦点的距离
    • 亦是相机中,从镜片中心到底片或图像传感器等成像平面的距离
    • 一般用凸透镜做相机的镜头时,它成的最清晰的像一般不会正好落在焦点上,或者说,最清晰的像到光心的距离(像距)一般不等于焦距,而是略大于焦距。具体的距离与被照的物体与镜头的距离(物距)有关,物距越大,像距越小,(但实际上总是大于焦距)
  • 光心:凸透镜的中心近似看作是光心,可理解为相机透镜的几何中心

相机 CCD/CMOS 图像传感器

相机 CCD/CMOS 图像传感器是用于成像的,具体原理就不去了解了……
我们用的华睿(大华)工业相机的图像传感器类型是 CMOS。

四个坐标系总览

针孔相机模型,建立了四个坐标系:世界坐标系、相机坐标系、图像物理坐标系到和图像像素坐标系。

世界坐标系(World Coordinate)

由于摄像机与被摄物体可以放置在环境中任意位置,这样就需要在环境中建立一个坐标系,来表示摄像机和被摄物体的位置,这个坐标系就称为 世界坐标系

在相机模型中,世界坐标系为 右手坐标系;对于别处模型的世界坐标系可能有所不同。

一般而言,世界坐标系原点是设立在识别到的物体上的;
如对于装甲板,是以其中心为原点,\(x\) 轴水平向右,\(y\) 轴竖直向下建立世界坐标系;
如对于棋盘图标定板,是以最左上角的角点为原点,\(x\) 轴水平向右,\(y\) 轴竖直向下建立世界坐标系。

总览中 \(O-X_WY_WZ_W\) 就是世界坐标系,上图为对于棋盘图标定板建立世界坐标系各个轴的朝向示例。

相机坐标系(Camera Coordinate)

相机坐标系 原点位于镜头光心处,\(x,y\) 轴分别与像平面的两边平行,\(z\) 轴为镜头光轴,与像平面垂直。

在相机模型中,相机坐标系为右手坐标系

相机右手坐标系

总览中 \(O-X_CY_CZ_C\) 就是相机坐标系,右图为相机坐标系各个轴的朝向示例。

世界坐标系 到 相机坐标系

刚体变换不会改变形状,只改变朝向和位置,可用两个变量来描述:正交矩阵-旋转矩阵 \(R\),三维平移向量 \(t\);
这两系的转换就是是刚体变换。

\(R\) 为 世界坐标系 到 相机坐标系 的旋转矩阵;
\(t\) 为 世界坐标系 到 相机坐标系 的平移矩阵。

世界坐标系 上一点 \((X_W, Y_W, Z_W)\),转换为 相机坐标系 上一点的坐标为 \((X_C, Y_C, Z_C)\);

那么 世界坐标系 到 相机坐标系 转换表达式就可以得出:

\[\begin{bmatrix} X_C \\ Y_C \\ Z_C \end{bmatrix} = R \begin{bmatrix} X_W \\ Y_W \\ Z_W \end{bmatrix} + t \]

转换为齐次形式:

\[\begin{bmatrix} X_C \\ Y_C \\ Z_C \\ 1 \end{bmatrix} = \begin{bmatrix} R & t \\ 0_{1 \times 3} & 1 \end{bmatrix}\begin{bmatrix} X_W \\ Y_W \\ Z_W \\ 1 \end{bmatrix} \tag{1} \]

图像像素坐标系

表示三维空间物体在图像平面上的投影,坐标系反应了相机CCD/CMOS芯片中像素的排列情况;
其上的点称为像素,是离散化的。

其坐标系为二维,原点在图像传感器所成图像平面的左上角,\(u\) 轴水平向右,\(v\) 轴竖直向下;
图像像素坐标系中的坐标轴单位是像素 \(px\)(整数)。

总览中 \(O_0-uv\) 就是图像像素坐标系

图像物理坐标系

图像像素坐标系不利于坐标变换,因此需要建立图像物理坐标系。

坐标原点在图像传感器所成图像平面的中心,也是相机光轴与像平面的交点(称为主点),即图像的中心点,\(x,y\) 轴分别平行于图像像素坐标系的 \(u,v\) 轴;
图像物理坐标系中的坐标轴单位通常为毫米 \(mm\) 。

总览中 \(O_1-xy\) 就是图像像素坐标系

图像物理坐标系 到 图像像素坐标系

很明显,这两个坐标系通过平移就可得到。

图像物理坐标系是以物理单位来描述一个点的位置的,轴上的数据单位为 \(mm\);
图像像素坐标系是以像素单位来描述一个点的位置的,轴上的数据单位为 \(px\);
也很显然,要使得这两个坐标系进行相互转换,同时需要解决单位一致的问题。

  • \(dx,dy\) 分别表示为像素在 \(x,y\) 轴方向上的物理尺寸,单位为毫米每像素 \(mm/px\),其意义是 1 像素有多少毫米;
    因此,图像物理坐标系上以 mm 为单位的一点 \((x, y)\),转换为以 px 为单位就是 \((\cfrac{x}{dx}, \cfrac{y}{dy})\)。
  • 图像物理坐标系原点 \(O_1\) 在图像像素坐标系上坐标为 \((u_0, v_0)\)。

图像物理坐标系 上一点 \((x, y)\),转换为 图像像素坐标系 上一点的坐标为 \((u, v)\);

基于上述,有如下关系:

\[\begin{cases} u = \frac{x}{dx} + u_0 \\ v = \frac{y}{dy} + v_0 \end{cases} \]

转换为齐次坐标矩阵形式:

\[\begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} \frac{1}{dx} & 0 & u_0 \\ 0 & \frac{1}{dy} & v_0 \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} x \\ y \\ 1 \end{bmatrix} \tag{2} \]

孔成像原理

孔成像,成的是原像倒立的像;
建模时,为了使成的像是正立的,即不是倒立的像,会把成像平面前移;
因此,在一些资料中的相机成像模型,成像平面在光心的前面,而不是实际孔成像原理中,成像平面在光心的后面。

相机坐标系 到 图像物理坐标系

相机坐标系 上一点 \((X_C, Y_C, Z_C)\),转换为 图像像素坐标系 上一点的坐标为 \((u, v)\);

根据孔成像原理,以及相似三角形,可以完成 相机坐标系 到 图像物理坐标系 的转换:

\[\begin{cases} \frac{x}{X_C} = \frac{f}{Z_C} \\ \frac{y}{Y_C} = \frac{f}{Z_C} \end{cases} \Rarr \begin{cases} Z_C \cdot x = f \cdot X_C \\ Z_C \cdot y = f \cdot Y_C \end{cases} \]

转换为齐次坐标矩阵形式:

\[Z_C \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix}\begin{bmatrix} X_C \\ Y_C \\ Z_C \\ 1 \end{bmatrix} \tag{3} \]

世界坐标系 到 图像像素坐标系

世界坐标系 上一点 \((X_W, Y_W, Z_W)\),转换为 图像像素坐标系 上一点的坐标为 \((u, v)\);

将式 \((2)(3)(1)\) 联立:

\[\begin{aligned} Z_C \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} & = \begin{bmatrix} \frac{1}{dx} & 0 & u_0 \\ 0 & \frac{1}{dy} & v_0 \\ 0 & 0 & 1 \end{bmatrix} Z_C \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} \\ & = \begin{bmatrix} \frac{1}{dx} & 0 & u_0 \\ 0 & \frac{1}{dy} & v_0 \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix}\begin{bmatrix} X_C \\ Y_C \\ Z_C \\ 1 \end{bmatrix} \\ & = \begin{bmatrix} \frac{1}{dx} & 0 & u_0 \\ 0 & \frac{1}{dy} & v_0 \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix}\begin{bmatrix} R & t \\ 0_{1 \times 3} & 1 \end{bmatrix}\begin{bmatrix} X_W \\ Y_W \\ Z_W \\ 1 \end{bmatrix} \\ & = \begin{bmatrix} \frac{f}{dx} & 0 & u_0 & 0 \\ 0 & \frac{f}{dy} & v_0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix}\begin{bmatrix} R & t \\ 0_{1 \times 3} & 1 \end{bmatrix}\begin{bmatrix} X_W \\ Y_W \\ Z_W \\ 1 \end{bmatrix} \\ & = \begin{bmatrix} f_x & 0 & u_0 & 0 \\ 0 & f_y & v_0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix}\begin{bmatrix} R & t \\ 0_{1 \times 3} & 1 \end{bmatrix}\begin{bmatrix} X_W \\ Y_W \\ Z_W \\ 1 \end{bmatrix} \\ & = \begin{bmatrix} f_x & 0 & u_0 \\ 0 & f_y & v_0 \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} R & t \end{bmatrix}\begin{bmatrix} X_W \\ Y_W \\ Z_W \\ 1 \end{bmatrix} \\ & = K\begin{bmatrix} R & t \end{bmatrix}\begin{bmatrix} X_W \\ Y_W \\ Z_W \\ 1 \end{bmatrix} \\ & = P\begin{bmatrix} X_W \\ Y_W \\ Z_W \\ 1 \end{bmatrix} \end{aligned} \]

  • \(f_x = \frac{f}{dx},f_y = \frac{f}{dy}\) 称为 \(u,v\) 轴的尺度因子
  • \(K\) 称为相机的内部参数矩阵,简称相机内参
  • \(\begin{bmatrix}R & t\end{bmatrix}\) 称为相机的外部参数矩阵,简称相机外参
    • \(R\) 为 世界坐标系 到 相机坐标系 的旋转矩阵
    • \(t\) 为 世界坐标系 到 相机坐标系 的平移矩阵
  • \(P\) 为 \(3 \times 4\) 矩阵,称为投影矩阵

OpenCV中的相机内参矩阵有 4 个参数:\(f_x, f_y, u_0, v_0\)
MATLAB 标定时可选择标定参数为 5 个参数的结果,多了一个缩放因子 \(s\);在一些资料中,内参矩阵会多出来一个 \(s\)

图像像素坐标系 到 相机坐标系

图像像素坐标系 到 相机坐标系,可以经 图像物理坐标系 进行转换;
即图像像素坐标系 到 图像物理坐标系,再由 图像物理坐标系 到相机坐标系。

图像像素坐标系 上一点 \((u,v)\),转换为 图像物理坐标系 上一点的坐标为 \((x,y)\),转换为 相机坐标系 上一点的坐标为 \((x_C,y_C,z_C)\);

根据式\((2)\),可得:

\[\begin{cases} x = (u - u_0)dx \\ y = (v - v_0)dy \end{cases} \]

根据式\((3)\),可得:

\[\begin{cases} z_C \cdot x = f \cdot x_C \\ z_C \cdot y = f \cdot y_C \end{cases} \]

设焦距为\(F\),则\(z_C = F\)

联立两方程组可得:

\[\begin{cases} F \cdot (u - u_0)dx = f \cdot x_C \\ F \cdot (v - v_0)dy = f \cdot y_C \end{cases} \\ \Rarr \begin{cases} F \cdot (u - u_0) \frac{dx}{f} = x_C \\ F \cdot (v - v_0) \frac{dy}{f} = y_C \end{cases} \\ \Rarr \begin{cases} F \cdot (u - u_0) / \frac{f}{dx} = x_C \\ F \cdot (v - v_0) / \frac{f}{dy} = y_C \end{cases} \\ \Rarr \begin{cases} x_C = F \cdot (u - u_0) / f_x \\ y_C = F \cdot (v - v_0) / f_y \\ z_C = F \end{cases} \]

畸变矩阵

工业相机镜头畸变较小,这方面的内容了解即可,可以先不用深入,懂得如何使用OpenCV进行畸变矫正即可。

参考资料:最详细、最完整的相机标定讲解

一般只需要计算出k1、k2、p1、p2,对于鱼眼镜头等径向畸变特别大的才需要计算k3。

相机标定

相机标定是在求得相机的内部参数矩阵,以及外部参数矩阵,但是这个外部参数矩阵仅适用于当时作为标定图对应标定板的外部参数矩阵。

cv::solvePnP

世界坐标系原点设在装甲板的中心,
PNP解算可以理解为在求外部参数矩阵

本文部分图片来自:
mathworks
CSDN-土豪gold

标签:begin,end,成像,相机,bmatrix,图像,坐标系
From: https://www.cnblogs.com/champrin/p/17643080.html

相关文章

  • OpenCV相机标定
    OpenCV相机标定相机内参矩阵cameraMatrix\[cameraMatrix=\begin{bmatrix}f_x&0&c_x\\0&f_y&c_y\\0&0&1\end{bmatrix}\]相机畸变系数distCoeffs畸变系数:径向畸变\((k_1,k_2,k_3)\),切向畸变\((p_1,p_2)\)\[distCoeffs=\beg......
  • 张正友的相机标定论文Flexible camera calibration by viewing a plane from unknown
    张正友的相机标定论文Flexiblecameracalibrationbyviewingaplanefromunknownorientations的翻译:翻译的pdf版本为:http://pan.baidu.com/s/1pKshsPP翻译搜索复制......
  • 基于STM32设计的门禁照相机
    一、项目介绍当前文章介绍基于STM32设计的门禁照相机,本项目提供了一种更加智能、安全、便捷的门禁解决方案。门禁照相机采用STM32F103ZET6MCU作为主控芯片,配合2.8寸LCD显示屏、OV7725数字摄像头、SD卡和模拟门铃按键等外设模块,实现了摄像头画面实时显示、门铃触发拍照、图片存储等......
  • VTK 实例7:相机控制
    未加入相机控制时演员位置: 加入相机控制时演员位置(视角为x轴负方向):1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);45#include<vtkConeSource.h>//源数据6#include<vtkPolyDataMapper.h>//数据......
  • VTK 实例8:command与observe设计模式(当交互使相机变化时打印出当前相机的坐标,当发生拾
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);4#include<vtkConeSource.h>5#include<vtkPolyDataMapper.h>6#include<vtkRenderer.h>7#include<vtkRende......
  • VTK 实例9:坐标系统1
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);4#include<vtkConeSource.h>//源数据5#include<vtkCubeSource.h>//立方体6#include<vtkPolyDataMapper.h>//数据映射7#in......
  • VTK 实例10:坐标系统2
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);4#include<vtkConeSource.h>//源数据5#include<vtkCubeSource.h>//立方体6#include<vtkPolyDataMapper.h>//数据映射7#in......
  • centos7中用docker部署java项目调用mvs海康相机拍照踩坑
    一、海康机器人官网下载MVSV2.1.2(Linux)二、解压后将tar.gz包传入centos7中三、解压并安装MVS 安装 四、执行MVS,并查看环境变量是否正确安装后会新增/opt/MVS目录,进入/opt/MVS/bin目录执行./MVS 执行完成后查看是否已经自动添加环境变量,执行vi/etc/profile,会自动......
  • 基于Field_II_ver_3_24_windows_gcc工具箱的超声波二维成像与三维成像matlab仿真
    1.算法理论概述1.1超声波成像的基本原理       超声波成像是一种通过超声波对物体进行成像的技术。超声波成像的原理是利用超声波在不同组织之间传播速度不同的特点,探测物体内部的结构。超声波成像可以分为二维成像和三维成像两种。二维成像是将超声波探头沿一个方向......
  • 相机标定(世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完
    本篇文章主要介绍如何使用相机标定,实现世界坐标系-->相机坐标系,相机坐标系-->图像坐标系,图像坐标系-->像素坐标系,完成世界坐标系-->像素坐标系。 相机标定内参/畸变系数求解与外参求解代码: (添加:2022-0926)原理介绍如下: 一、世界坐标系转换为相机坐标系相机标定概念:即求解外参旋......