矩阵变换

矩阵十题(1)

喜你入骨 提交于 2020-04-07 19:45:03
Matrix67大牛关于矩阵经典题目的链接: http://www.matrix67.com/blog/archives/276/ nyoj 298 点的变换 题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=298 经典题目1    给定n个点,m个操作,构造O(m+n)的算法输出m个操作后各点的位置。操作有平移、缩放、翻转和旋转 这里的操作是对所有点同时进行的。其中翻转是以坐标轴为对称轴进行翻转(两种情况),旋转则以原点为中心。如果对每个点分别进行模拟,那么m个操作总共耗 时O(mn)。利用矩阵乘法可以在O(m)的时间里把所有操作合并为一个矩阵,然后每个点与该矩阵相乘即可直接得出最终该点的位置,总共耗时 O(m+n)。假设初始时某个点的坐标为x和y,下面5个矩阵可以分别对其进行平移、旋转、翻转和旋转操作。预先把所有m个操作所对应的矩阵全部乘起来, 再乘以(x,y,1),即可一步得出最终点的位置。 注意:m个操作的矩阵连乘时必须左乘 代码如下: 1 #include<stdio.h> 2 #include<math.h> 3 #include<string.h> 4 #define N 5 5 struct Matrix 6 { 7 double a[N][N]; 8 }res,tmp,origin,ans,point

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从相机坐标系到理想图像坐标系(不考虑畸变) 这一过程进行了从三维坐标到二维坐标的转换,也即投影透视过程(用中心投影法将物体投射到投影面上,从而获得的一种较为接近视觉效果的单面投影图,也就是使我们人眼看到景物近大远小的一种成像方式)。我们还是拿 但是为了在数学上更方便描述

opengl - 2012/11/4

自古美人都是妖i 提交于 2020-03-27 07:58:48
1.glLoadIdentity   The glLoadIdentity function replaces the current matrix with the identity matrix.   glLoadIdentity该函数的功能是重置当前指定的矩阵为单位矩阵.   函数原型:void glLoadIdentity( void);   Remarks(备注:)The glLoadIdentity function replaces the current matrix with the identity matrix. It is semantically equivalent to calling glLoadMatrix with the identity matrix   glLoadIdentity该函数的功能是重置当前指定的矩阵为单位矩阵.在语义上,其等同于用单位矩阵调用glLoadMatrix。   but in some cases it is more efficient.   但是,在一些情况下, glLoadIdentity更加效率。   The following functions retrieve information related to glLoadIdentity :   下面是一些与 glLoadIdentity相关的函数信息:

Matrix学习——基础知识

陌路散爱 提交于 2020-03-26 04:56:27
以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,前段时间在使用GDI+的时候再次学习如何使用矩阵来变化图像,看了之后在这里总结说明。 首先大家看看下面这个3 x 3的矩阵,这个矩阵被分割成4部分。为什么分割成4部分,在后面详细说明。 首先给大家举个简单的例子:现设点P0(x0, y0)进行平移后,移到P(x,y),其中x方向的平移量为△x,y方向的平移量为△y,那么,点P(x,y)的坐标为: x = x0 + △x y = y0 + △y 采用矩阵表达上述如下: 上述也类似与图像的平移,通过上述矩阵我们发现,只需要修改矩阵右上角的2个元素就可以了。 我们回头看上述矩阵的划分: 为了验证上面的功能划分,我们举个具体的例子:现设点P0(x0 ,y0)进行平移后,移到P(x,y),其中x放大a倍,y放大b倍, 矩阵就是: ,按照类似前面“平移”的方法就验证。 图像的旋转稍微复杂:现设点P0(x0, y0)旋转θ角后的对应点为P(x, y)。通过使用向量,我们得到如下: x0 = r cosα y0 = r sinα x = r cos(α+θ) = x0 cosθ - y0 sinθ y = r sin(α+θ) = x0 sinθ + y0 cosθ 于是我们得到矩阵: 如果图像围绕着某个点(a ,b)旋转呢?则先要将坐标平移到该点,再进行旋转

关于数据

a 夏天 提交于 2020-03-25 21:01:28
数据是一切的根本。 一.获取数据 1.可以使用爬虫scrapy获取数据,但是更一般的是自家数据库中的数据 2.可以获得公用数据集: http://www.kaggle.com/datasets 等网站 3.可以自己创建虚拟数据 4.注意:1)数据量尽可能多、利于训练,(2)数据内容尽可能有效,能对预测产生作用(有用的特征),(3)数据尽可能要均匀(分类),即全面 5.注意:无论是数据获取还是处理,都要注意多做备份,有能力每步都要备份,数据的价值难以想象。 二.原始数据 1.数据的本质是信息的具体化,原始数据有很多种:数字、文字、图片....我们可以从这些数据中看出里面所包含的信息。 2.计算机接收进行处理的是数字,根据经验,把原始数据转换为数字是比较容易的(比如把图片转化为矩阵的形式), 3.我们得到的原始数据可能有这样那样的问题,所以要进行下一步的数据清洗 ------原始数据是杂乱的,含有不完整、重复、错误的数据,因此要先进行数据清洗------- 三.数据清洗(Data cleaning) 1.数据清洗是为了对数据进行重新审查和校验,目的在于删除重复信息、纠正存在的错误,并提供数据一致性 2.不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类 (1)缺失数据(数据为空Null):如果缺失数据的记录占比较小,可以直接剔除(主要包括删除样本或删除特征两种

Python 关于数组矩阵变换函数numpy.nonzero(),numpy.multiply()用法

安稳与你 提交于 2020-03-20 13:23:01
1.numpy.nonzero(condition),返回参数condition(为数组或者矩阵)中非0元素的索引所形成的ndarray数组,同时也可以返回condition中布尔值为True的值索引,其中,数值0为False,其余的都为True。 1 >>>b=np.mat(np.arange(10)).T 2 >>>b 3 matrix([[0], 4 [1], 5 [2], 6 [3], 7 [4], 8 [5], 9 [6], 10 [7], 11 [8], 12 [9]]) 13 >>>np.nonzero(b>2) 14 (array([3, 4, 5, 6, 7, 8, 9], dtype=int64), 15 array([0, 0, 0, 0, 0, 0, 0], dtype=int64)) 16 >>>np.nonzero((b.A>2)*(b.A<8)) 17 (array([3, 4, 5, 6, 7], dtype=int64), array([0, 0, 0, 0, 0], dtype=int64)) 1 >>> x = np.eye(3) 2 >>> x 3 array([[ 1., 0., 0.], 4 [ 0., 1., 0.], 5 [ 0., 0., 1.]]) 6 >>> np.nonzero(x) 7 (array([0, 1, 2]),

GLSL语言基础

江枫思渺然 提交于 2020-03-19 17:19:02
from http://www.kankanews.com/ICkengine/archives/120870.shtml 变量 GLSL的变量命名方式与C语言类似。变量的名称可以使用字母,数字以及下划线,但变量名不能以数字开头,还有变量名不能以gl_作为前缀,这个是GLSL保留的前缀,用于GLSL的内部变量。当然还有一些GLSL保留的名称是不能够作为变量的名称的。 基本类型 除了布尔型,整型,浮点型基本类型外,GLSL还引入了一些在着色器中经常用到的类型作为基本类型。这些基本类型都可以作为结构体内部的类型。如下表: 类型 描述 void 跟C语言的void类似,表示空类型。作为函数的返回类型,表示这个函数不返回值。 bool 布尔类型,可以是true 和false,以及可以产生布尔型的表达式。 int 整型 代表至少包含16位的有符号的整数。可以是十进制的,十六进制的,八进制的。 float 浮点型 bvec2 包含2个布尔成分的向量 bvec3 包含3个布尔成分的向量 bvec4 包含4个布尔成分的向量 ivec2 包含2个整型成分的向量 ivec3 包含3个整型成分的向量 ivec4 包含4个整型成分的向量 mat2 或者 mat2x2 2×2的浮点数矩阵类型 mat3或者mat3x3 3×3的浮点数矩阵类型 mat4x4 4×4的浮点矩阵 mat2x3 2列3行的浮点矩阵

opengl常用函数

倾然丶 夕夏残阳落幕 提交于 2020-03-19 04:54:20
glAccum 操作累加缓冲区 glAddSwapHintRectWIN 定义一组被 SwapBuffers拷贝的三角形 glAlphaFunc允许设置alpha检测功能 glAreTexturesResident 决定特定的纹理对象是否常驻在纹理内存中 glArrayElement 定义一个被用于顶点渲染的数组成分 glBegin,glEnd 定义一个或一组原始的顶点 glBindTexture 允许建立一个绑定到目标纹理的有名称的纹理 glBitmap 绘制一个位图 glBlendFunc 特殊的像素算法 glCallList 执行一个显示列表 glCallLists 执行一列显示列表 glClear 用当前值清除缓冲区 GlClearAccum 为累加缓冲区指定用于清除的值 glClearColor 为色彩缓冲区指定用于清除的值 glClearDepth 为深度缓冲区指定用于清除的值 glClearStencil 为模板缓冲区指定用于清除的值 glClipPlane 定义被裁剪的一个平面几何体 glColor 设置当前色彩 glColorMask 允许或不允许写色彩组件帧缓冲区 glColorMaterial 使一个材质色彩指向当前的色彩 glColorPointer 定义一列色彩 glColorTableEXT 定义目的一个调色板纹理的调色板的格式和尺寸

OpenGL--骨骼动画

一笑奈何 提交于 2020-03-18 14:46:27
理论基础 骨骼蒙皮动画其实现类似人体模型,由节点(关节)树构成,节点间通过骨骼连接,每块骨骼至多一个父节点,父节点带动子骨骼运动。具体是关节带动其对应子骨骼运动从而牵动绑定到其上的皮肤变化。骨骼是刚体不会变形,只能绕父节点旋转(构造前面章节有提–3D世界实现中的机器人手臂例子,早期的骨骼动画就是这样,不过在关节处会有明显裂缝,所以才引出现在的蒙皮概念)。而绑定到其上的皮肤顶点则是实时变换拉伸的,变换大体就是通过一些矩阵的操作来最终计算出新顶点坐标等信息,再根据这些新顶点信息进行渲染,即通过更新顶点,渲染这样不断循环形成动画。 实现步骤总结: 一,根据更新前后两个关键帧的时间值插值计算出该时刻骨骼相对于其父骨骼的新变换矩阵–骨骼顶点信息。(本实例由于是手动控制动作,直接由变化的x,y计算) 二,再计算皮肤顶点信息,首先找到影响其顶点的所有骨骼,然后计算每一骨骼对该顶点的影响,即计算出在每个独立骨骼作用下顶点的新位置。公式如下: 最后将所有这些新位置按照每一骨骼的影响权重加权求和,得到皮肤顶点信息。 三,根据这些顶点信息进行绘制。 说明: 1,我们通常会把每个关节赋予一个索引值标志,无论是储存空间上还是查找时间上,都比直接使用关节名高效得多。因为每个关节有且仅有一个父关节,只要在每个关节储存其父关节的索引,即能表示整个骨骼结构。由于根关节无父,所以其索引通常会设为无效的索引,如-1。

ADAS摄像头图像环视拼接算法

旧时模样 提交于 2020-03-12 19:56:41
ADAS 摄像头图像环视拼接算法 输入输出接口 Input: (1)4个摄像头采集的图像视频分辨率 (整型int) (2)4个摄像头采集的图像视频格式 (RGB,YUV,MP4等) (3)摄像头标定参数(中心位置(x,y)和5个畸变 系数(2径向,2切向,1棱向),浮点型float) (4)摄像头初始化参数(摄像头初始位置和三个坐标方向 的旋转角度,车辆宽度高度车速等等,浮点型float) Output: (1)图像融合和拼接的image/video的坐标位置(浮点型float) (2)图像融合和拼接的图像视频分辨率(整型int) (3)图像融合和拼接的图像视频格式 (RGB,YUV,MP4等) (4)车辆周围障碍物报警 (字符型char) 22.1 功能定义 1)计算图像融合和拼接的image/video的坐标位置。 2)算出图像融合和拼接的图像视频分辨率。 3)确定图像融合和拼接的图像视频格式。 4)检测车辆周围障碍物并报警。 22.2 技术路线方案 在360°全景视图泊车辅助系统中,通过安装在车辆前、后、左、右 4 个方位的广角摄像头采集车辆四周的视频影像,利用图像融合和拼接技术合成一幅车身周围的全景视图,最后在中控台的屏幕上显示,以扩大驾驶员视野。借助360°全景视图泊车辅助系统,驾驶员坐在车中即可直观地看到车辆周围是否存在障碍物以及障碍物的相对方位与距离