| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【python】Camera Calibration -> 正文阅读 |
|
[人工智能]【python】Camera Calibration |
汇总整理摘抄自
1 坐标系简介在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数(内参、外参、畸变参数)的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。 确定空间物体表面某点的三维几何位置与其在拍摄图像中对应点之间的相互关系涉及到了如下四个坐标系
世界坐标系通过平移和旋转(刚体变换)得到相机坐标系。相机坐标系通过成像模型中的相似三角形原理(透视投影)得到图像坐标系。图像坐标系通过平移和缩放得到像素坐标系。 2 图像物理坐标系与像素坐标系图像物理坐标系 ( x , y ) (x,y ) (x,y):以相机光轴与成像平面的交点(principal point)为坐标原点,描述物体通过投影投射在成像平面中的位置(感光芯片上像素的实际大小),单位一般为 mm,属于物理单位。 红色圈出来的区域,即是图像物理坐标系, 红色的原点,可以记为图像坐标系的原点。 像素坐标系 ( u , v ) (u,v ) (u,v):以成像平面左上顶点为坐标原点,为了描述像素点(pixel)在数字图像中的坐标位置而引入。
写成矩阵形式: 再写成齐次坐标形式:
当然我们也可以表示成如下形式 3 像素坐标系与相机坐标系(内参)相机坐标系 ( X c , Y c , Z C ) (X_c,Y_c,Z_C ) (Xc?,Yc?,ZC?):以相机的光心为坐标原点, [公式] 轴与相机光轴平行,单位为 mm Z c Zc Zc 是指的图像深度信息,每个像素点的 Z c Zc Zc 都会有差别 是不是老觉得上面这几幅图和小孔成像背离了,卡看下面这两幅图就柳暗花明,豁然开朗了
或者直接画成这样就会直观很多
根据三角形相似原理可得:
整理可得: 4 相机坐标系与世界坐标系(外参)世界坐标系 ( X W , Y W , Z W ) (X_W,Y_W,Z_W ) (XW?,YW?,ZW?): 由于摄像机和物体可以安放在环境中的任何位置,因此需要在环境中选择一个基准坐标系来描述摄像机的位置,并用它来描述环境中任何物体的位置,这个坐标系就叫做世界坐标系。 想将不同视点/视角拍摄的图像信息整合在一起就必须将所有的信息放在同一个坐标系下,这个坐标系应与各张图像的 相机/物体/像素 这些相对坐标系无关,在确定后应不变且唯一,即应为绝对坐标系,我们将这个坐标系称为 世界坐标系 。 世界坐标系可以任意选择,为假想坐标系,在被指定后随即 不变且唯一,即为绝对坐标系 相机坐标的原点,可以是任意的相机位置(如下图黄色框内),一般把相机的光心设置为相机坐标的原点,空间中 Z 轴与摄像机的光轴平行! 世界坐标系与相机坐标系之间为刚体变换的关系: 其中 [ R T 0 1 ] = [ r 11 r 12 r 13 t 1 r 21 r 22 r 23 t 2 r 31 r 32 r 33 t 3 0 0 0 1 ] \begin{bmatrix} R & T\\ 0 & 1 \end{bmatrix} = \begin{bmatrix} r_{11} & r_{12} & r_{13} & t1 \\ r_{21} & r_{22} & r_{23} & t2 \\ r_{31} & r_{32} & r_{33} & t3 \\ 0 & 0 & 0 & 1 \end{bmatrix} [R0?T1?]=?????r11?r21?r31?0?r12?r22?r32?0?r13?r23?r33?0?t1t2t31?????? R、T 与摄像机无关,所以称这两个参数为摄像机的外参数 (extrinsic parameter) 下面详细介绍下外参矩阵 因为世界坐标系和像机坐标系都是右手坐标系,所以其不会发生形变。我们想把世界坐标系下的坐标转换到像机坐标下的坐标,如下图所示,可以通过刚体变换的方式。空间中一个坐标系,总可以通过刚体变换转换到另外一个个坐标系的。 5 实践中,相机世界坐标系的指定在实践中,世界坐标系的选取可分为两种情况,单目相机与双目相机。 1,单目相机 在单目相机中,我们通常选择拍摄第一张图像时的相机坐标系作为世界坐标系,即以拍摄第一张图像时相机的光心(小孔)作为原点,X 轴为水平方向,Y 轴为竖直方向,Z 轴指向拍摄第一张图像时相机所观察的方向。选定后世界坐标系便不再发生变化,即不变且唯一。 2,双目相机 在双目相机 (A,B) 中,与单目相机大同小异,我们可选取其中一个相机 A 拍摄第一张图像时的相机坐标系为世界坐标系,即以相机 A 拍摄第一张图像时相机的光心(小孔)作为原点,X 轴为水平方向,Y 轴为竖直方向,Z 轴指向拍摄第一张图像时相机 A 所观察的方向。 这样的话 A 相机的 R 为单位矩阵,T 为零向量 6 附录这里简单的提及一些 opencv 库方法 1)findChessboardCorners 和 drawChessboardCorners 找标定网格的角点,注意输入需要是灰度图
2)getAffineTransform 根据两张图的三个对应点,求仿射变换矩阵
3)warpAffine 对图片做变换生成新的图片
参考 OpenCV 之 cv2.getAffineTransform + warpAffine 下面具体看看 4)插值 插值方法,cv2.xxx opencv中插值算法详解 5)填充 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 0:23:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |