世界坐标系

python-相机标定

淺唱寂寞╮ 提交于 2020-04-07 17:34:16
相机标定 一、相机标定的基本原理 1.1从世界坐标系到相机坐标系 1.2从相机坐标系到理想图像坐标系( 不考虑畸变 ) 1.3从理想图像坐标系到实际图像坐标系( 考虑畸变 ) 1.4从实际图像坐标系到像素坐标系 二、相机标定的基本实现步骤 三、图像集 四、实验代码及结果截图 五、总结 一、相机标定的基本原理 1.1从世界坐标系到相机坐标系 刚体从世界坐标系转换到相机坐标系的过程,可以通过旋转和平移来得到,我们将其变换矩阵由一个旋转矩阵和平移向量组合成的齐次坐标矩阵(为什么要引入齐次坐标可见后续文章)来表示: 其中,R为旋转矩阵,t为平移向量,因为假定在世界坐标系中物点所在平面过世界坐标系原点且与Zw轴垂直(也即棋盘平面与Xw-Yw平面重合,目的在于方便后续计算),所以zw=0,可直接转换成式1的形式。其中变换矩阵 即为前文提到的外参矩阵,之所称之为外参矩阵可以理解为只与相机外部参数有关,且外参矩阵随刚体位置的变化而变化。 下图表示了用R,t将上述世界坐标系转换到相机坐标系的过程。 1.2从相机坐标系到理想图像坐标系(不考虑畸变) 这一过程进行了从三维坐标到二维坐标的转换,也即投影透视过程(用中心投影法将物体投射到投影面上,从而获得的一种较为接近视觉效果的单面投影图,也就是使我们人眼看到景物近大远小的一种成像方式)。我们还是拿 但是为了在数学上更方便描述

图形渲染管线流程

情到浓时终转凉″ 提交于 2020-02-12 18:14:21
博客资料来源《DirectX 9 3D游戏设计入门》 渲染管线流程:本地坐标 ——> 世界坐标 ——> 视图坐标 ——> 背面拣选 ——> 光照 ——> 裁剪 ——>投影变换 ——>视口变换——>光栅化 前8个阶段称为T&L阶段(及顶点变换和光照阶段),后面的光栅化阶段为非T&L阶段。 1.本地坐标: 本地坐标是相对于自身坐标系的坐标,自身坐标系又叫做建模空间,这是我们定义物体的三角形列的坐标系。自身坐标系简化了建模的过程。在物体自己的坐标系中建模比在世界坐标系中直接建模更容易。例如,在自身坐标系中建模不像在世界坐标系中要考虑本物体相对于其他物体的位置、大小、方向关系。 2.世界坐标: 一旦我们构造了各种模型,它们都在自己的自身坐标系中,但是我们需要把它们都放到同一个世界坐标系中。 物体从自身坐标系到世界坐标系中的换叫做世界变换 。世界变换通常是用平移、旋转、缩放操作来设置模型在世界坐标系中的位置、大小、方向。世界变换就是通过各物体在世界坐标系中的位置、大小和方向等相互之间的关系来建立所有物体。 3.视图坐标: 世界坐标系中的几何图与照相机是相对于世界坐标系而定义的。然而在世界坐标系中当照相机是任意放置和定向时,投影和其它一些操作会变得困难或低效。为了使事情变得更简单,我们将照相机平移变换到世界坐标系的源点并把它的方向旋转至朝向Z轴的正方向,当然,

机器人学之运动学(一):运动学描述基础

半城伤御伤魂 提交于 2020-02-08 18:08:58
目录 1.刚体运动状态描述 2.移动 3.转动 4.选择矩阵 1.刚体运动状态描述 平面 首先在平面上定义世界坐标系(world frame),一个平面上有三个自由度来描述刚体,即2个移动自由度(沿x轴水平移动和沿y轴上下移动)和1个旋转自由度(沿刚体质心顺/逆时针转动)。 空间 建立三维空间直角坐标系,一个空间内有6个自由度解释刚体的运动,即3个移动自由度(沿x,y,z轴移动)和3个转动自由度(沿x,y,z轴旋转) 整合刚体的状态 在刚体上建立坐标系(body frame),常建立在质心上 移动:由body frame的原始位置决定,即刚体质心相对世界坐标系原点的位置 转动:由body frame的姿态决定,即3个坐标轴相对世界坐标系的姿态 刚体运动状态的描述 记录不同时间点刚体质心的轨迹,已知轨迹的位置,求得轨迹对时间的微分,就是质心的速度,再次微分,就是质心运动的加速度。 已知刚体转动的姿态,由微分和二次微分,可求得刚体转动的角速度和角加速度。 借由刚体在平面上的三个自由度和空间上的六个自由度的微分和二次微分,可以知道刚体的移动和转动状态。 2.移动 移动:以向量 P ⃗ \vec P P 描述建立在刚体上的坐标系{B}的原点相对世界坐标系{A}的状态。 将刚体质心相对于{A}的位置映射为向量,与世界坐标做连接。 假设质心P坐标可以表示为: P ⃗ = [ P x P y P

[原创] 骨骼运动变换的数学计算过程详解

我们两清 提交于 2020-02-03 22:56:30
1. 骨骼静止状态(参考姿势)下的节点坐标转换 以上图为例子,图中有三个彼此嵌套的坐标系:子骨骼坐标系、父骨骼坐标系和世界坐标系。首先,我们不考虑骨骼的运动,设 V c 为顶点 V 在子骨骼本地坐标系中的位置 ,那么在各骨骼静止的情况下: 从子骨骼坐标转换到父骨骼坐标: V p = V c * M L->P 从父骨骼坐标转换到世界坐标: V w =V p *M P->W 因此,从子骨骼坐标直接转换到世界坐标的过程为: V w =V c *M C->P *M P->W 其中, V c 可以表示为一个行向量: V c =(x c , y c , z c , 1 ) ;而 M C->P 、 M P->W 是两个平移阵,其中( dx p , dy p , dz p )、( dx c , dy c , dz c )分别为父、子骨骼各自的坐标系原点在世界坐标系中的位置: 注意!在上图的示例中, M C->P 、 M P->W 只是两个平移矩阵而已,这是最常见的一种简单情况。但在实际情况下,各骨骼的本地坐标轴完全没有必要跟世界坐标轴一致,因此, M C->P 、 M P->W 也可能包含了旋转、缩放等复杂变换,但其基本原理是相通的。 2. 骨骼运动积累变换的计算 接下来我们进一步来考虑骨骼运动的情况。描述一根骨骼运动的最典型的方法,是将其运动分解成为 相对于其自身本地坐标系的 旋转和平移

Unity3D 开发之shader教程(浅谈GPU渲染入门)

前提是你 提交于 2020-01-31 01:15:23
  尊重他人智慧成果,欢迎转载,请注明作者 心若透明,原文地址 http://www.cnblogs.com/ubanck/p/4109411.html   这篇随笔,就不按照各种专业的解释来描述了,完全看自己发挥吧,写到哪儿算哪儿。若是哪里有说的不对的地方,请各位看官直说无妨!   说到游戏研发,就不可避免会提到图形学,图形学里面细去研究,就会牵涉到各种各样的数学知识,向量,矩阵之类的!而到这儿,咱们先开始从shader谈起,什么是shader?咱们通常说写个shader,其实也就是写了一个执行某种功能的程序,跟你写个普通的程序原理上说一样的,而不同之处在于,shader是写个GPU执行的,说到GPU执行,那么就得谈到3D游戏里面的那些人物啊,花鸟啊,是怎么看到的,或者说的专业一点,叫做渲染出来的!   如果在2D上面,很简单,完全可以看作是一张图贴在屏幕上就OK。在3D上面,就复杂了一点,首先,我们的屏幕上2D的,不像现实世界,是三维空间!那么怎么在屏幕上画东西才能看上去有3D效果呢,你可以试试在纸上画一个立方体,学过数学都会画,你第一眼看上去就会觉得这是3D的,而不是一个简单的矩形!     模型坐标系:在计算机的3D世界里,也是通过这样一种东西来实现了3D效果。如果在计算机屏幕上面绘制3D模型,那么我们首先在3D软件上制作出这个模型,这个模型会有一个原点,来建一个坐标系

Unity 欧拉角万向节锁的原理

只谈情不闲聊 提交于 2020-01-26 04:29:42
网上文章很多,有些写的很详细,但是我个人理解起来有不是很顺畅,把几个重要的知识点整理一下 欧拉角 :欧拉角用于控制物体的旋转角度,在Unity中欧拉角的表示就是一个Vector3,例如 Vector3 v3 = new Vector3(30,30,30) Unity的欧拉角 旋转顺序 是 Z-X-Y,这个旋转顺序在不同的软件,行业有所不同,没有一个全球统一标准。 旋转顺序 :同样的输入值,不同的旋转顺序,得到的结果不同 静态欧拉角 :旋转的参考坐标系保持不变(Space.World),这种情况不产生万向节锁 动态欧拉角 :旋转的参考坐标系为物体自身的局部坐标系(Space.Self),特定情况下会产生万向节死锁 万向节死锁 : 中间旋转顺序轴(X) 旋转90°,使前顺序轴(Z)和 世界坐标系 的后顺序(Y)轴重叠,这样在世界坐标系的观察空间内,物体绕自己的Z轴旋转,就跟物体绕着世界坐标系的Y轴旋转一样,这样看物体坐标的Z轴自由度似乎消失了,这种情况就称为万向节死锁。 欧拉角存在多对一的关系,即物体的最终旋转情况,可以用多个欧拉角来表示,例如 Vector3(90,30,30) 等价于 Vector3(90,20,20) 且慢,我刚刚,看到一个跟规定不符合的情况,Uniyt的旋转顺序似乎是 Y-X-Z !!!!!!为什么大家都说是Z-X-Y啊?? 如果是Y-X-Z

单目视觉标定原理

时光怂恿深爱的人放手 提交于 2020-01-26 02:44:30
在计算机视觉中,通过相机标定能够获取一定的参数,其原理是基于三大坐标系之间的转换和摄像机的畸变参数矩阵。在实验中经常用张正友标定发,进行摄像机标定,获取到内参数矩阵和外参数矩阵以及畸变参数矩阵。在应用中要区分三者作用。这也是在程序中函数输入量。 一、三大坐标系 在计算机视觉中,利用图像中目标的二维信息获取目标的三维信息,肯定需要相机模型的之间转化。 1、图像坐标系 在计算机系统中,描述图像的大小是像素,比如图像分辨率是1240*768.也就就是以为图像具矩阵rows是1024,cols是768.那图像的原点是在图像的左上角。 以图像左上角为原点建立以像素为单位的直接坐标系u-v。像素的横坐标u与纵坐标v分别是在其图像数组中所在的列数与所在行数。这是像素坐标,而不是物理坐标,为了后续的模型转换,有必要建立图像坐标系。 图像坐标系是以图像中心为原点,X轴和u轴平行,Y轴和v轴平行。 dx和dy标示图像中每个像素在X轴和Y轴的物理尺寸,其实就是换算比例。比如图像大小是1024*768,图像坐标系x-y中大小为19*17.那么dx就是19/1024 . 则图像中的每个像素在u-v坐标系中的坐标和在x-y坐标系中的坐标之间都存在如下的关系: (上述公式中我们假设物理坐标系中的单位为毫米,那么dx的的单位为:毫米/像素。那么x/dx的单位就是像素了,即和u的单位一样都是像素) 为了使用方便

相机标定原理介绍(一)

荒凉一梦 提交于 2020-01-24 20:43:27
http://blog.csdn.net/aptx704610875/article/details/48914043 标定实例 一.总体原理: 摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵的过程。 [1]基本的坐标系: 世界坐标系; 相机坐标系; 成像平面坐标系; 像素坐标系 [2 ]一般来说,标定的过程分为两个部分: 第一步是从世界坐标系转为相机坐标系,这一步是 三维点到三维点 的转换,包括R,t (相机外参, 确定了相机在某个三维空间中的位置和朝向 )等参数; 第二部是从相机坐标系转为 成像平面 坐标系( 像素坐标系 ),这一步是 三维点到二维点 的转换,包括K( 相机内参, 是对相机物理特性的近似 )等参数; 投影矩阵 : P=K [ R | t ] 是一个3×4矩阵,混合了内参和外参而成。 P = K [ R t ] 二.基本知识介绍及 1、摄像机模型 Pinhole Camera模型如下图所示: 是一个小孔成像的模型,其中: [1] O 点表示 camera centre ,即相机的中心点,也是相机坐标系的中心点; [2]z轴表示 principal axis ,即相机的主轴; [3]q点所在的平面表示 image plane ,即相机的像平面,也就是图片坐标系所在的二维平面; [4] O1 点表示

【译】Unity3D Shader 新手教程(2/6) —— 积雪Shader

♀尐吖头ヾ 提交于 2020-01-17 16:12:16
本文为翻译,附上 原文链接 。 转载请注明出处—— polobymulberry-博客园 。 如果你是一个shader编程的新手,并且你想学到下面这些酷炫的技术,我觉得你可以看看这篇教程: 实现一个积雪效果的shader 创建一个具有凹凸纹理的shader 为每个像素修改其对应纹理值 在表面着色器中修改模型的顶点数据 引论 这是我们系列教程的第二部分,我们将在此部分实现些有用的技术。在学习完 第一部分 的所有背景知识后,我们将利用所学的知识实现一个简单的积雪效果的shader。效果如下: 准备工作 我们想做的其实很简单,简单介绍一下: 随着Snow Level(表示积雪的程度,该值越大,积雪越深)的增大,我们将迎着下雪方向的岩石纹理区域都变成Snow Color(雪的颜色) 随着Snow Level的增大,我们想将该岩石模型稍微变大一点,尤其是雪的边缘厚度要增加,这样给人真正的“积”雪效果。 步骤1 – Bumped Diffuse Shader 我们创建一个新的Diffuse shader(默认新建的shader基本都是Diffuse shader),并向其中添加凹凸纹理效果( 来自 猫大 的原话:法线贴图是凸凹贴图(Bump mapping)的一种常见应用,简单说就是在不增加模型多边形数量的前提下,通过渲染暗部和亮部的不同颜色深度,来为原来的贴图和模型增加视觉细节和真实效果

针孔的相机成像模型

不羁的心 提交于 2020-01-13 13:55:57
为了比较清楚得说明这件事,笔者力求以最简洁的方式进行介绍, part1: 4个坐标系 :       1、世界坐标系(Xw、Yw、Zw)       2、相机坐标系(Xc、Yc、Zc)       3、像平面坐标系(X、Y)       4、像素平面坐标系(u、v) 3个坐标变换关系:       1、世界坐标系(Xw、Yw、Zw)->相机坐标系(Xc、Yc、Zc)       2、相机坐标系(Xc、Yc、Zc)->像平面坐标系(X、Y)       3、像平面坐标系(X、Y)->像素平面坐标系(u、v) part2: 以下的内容是对上述的7个概念做详细说明: 4个坐标系 : 世界坐标系 :即自然坐标系 相机坐标系 :以相机的的光心为原点,Z轴指向相机前方,x向右,y向下 像平面坐标系 :物理成像平面,在距相机光心一倍焦距的平面上(凸透镜成像实验的蜡烛成大小相等倒立的平面) 像素平面坐标系 :在距相机光心一个焦距的平面上,原点位于图像的左上角,u轴向右与x轴平行,v轴向下与y轴平行(在凸透镜成像实验的蜡烛成大小相等倒立的距离上放一个屏,相机中的这个位置是一个感光元件) 3个坐标变换关系 : (Xw、Yw、Zw)->(Xc、Yc、Zc) :世界坐标系向相机坐标系转换 这俩个坐标系之间的关系我们可以通过旋转矩阵R和平移矩阵t来得到: (Xc、Yc、Zc)->(X、Y)