矩阵变换

矩阵的变换。包括缩放、平移、错切

不打扰是莪最后的温柔 提交于 2020-03-11 16:06:49
矩阵的变换。包括缩放、平移、错切-the transformation matrix. Incl...原文链接 #include<graphics.h> #include<math.h> typedef struct Matrix { float _a11,_a12,_a13; float _a21,_a22,_a23; float _a31,_a32,_a33; } Matrix; typedef struct Vert3 { float x; float y; float z; } Vert3; Matrix *MatTranslation(Matrix * mat,float xoffset,float yoffset) { mat->_a11=1.0f;mat->_a12=0.0f;mat->_a13=0.0f; mat->_a21=0.0f;mat->_a22=1.0f;mat->_a23=0.0f; mat->_a31=xoffset;mat->_a32=yoffset;mat->_a33=1.0f; return mat; } Matrix *MatTranslationBS(Matrix * mat,float xoffset,float yoffset) { mat->_a11=xoffset;mat->_a12=0.0f;mat->_a13=0.0f; mat-

matlab绘图

﹥>﹥吖頭↗ 提交于 2020-03-11 10:04:16
一. 二维数据曲线图 1.1 绘制二维曲线的基本函数 1.plot()函数 plot函数用于绘制二维平面上的线性坐标曲线图,要提供一组x坐标和对应的y坐标,可以绘制分别以x和y为横、纵坐标的二维曲线。 例: t=0:0.1:2*pi; x=2 * t; y=t.*sin(t).*sin(t); plot(x, y); 2. 含多个输入参数的plot函数 plot函数可以包含若干组向量对,每一组可以绘制出一条曲线。含多个输入参数的plot函数调用格式为:plot(x1,y1,x2,y2,…,xn,yn) 例: x=linspace(0,2*pi,100); plot(x,sin(x),x,2*sin(x),x,3*sin(x)) 3. 含选项的plot函数 Matlab提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号。这些选项如表所示: 例: 用不同的线型和颜色在同一坐标内绘制曲线 及其包络线。 x=(0:pi/100:2*pi)'; y1=2*exp(-0.5*x)*[1,-1]; y2=2*exp(-0.5*x).*sin(2*pi*x); x1=(0:12)/2; y3=2*exp(-0.5*x1).*sin(2*pi*x1); plot(x,y1,'k:',x,y2,'b--',x1,y3,'rp'); 在该plot函数中包含了3组绘图参数

06-01 DeepLearning-图像识别

房东的猫 提交于 2020-03-03 11:50:33
文章目录 深度学习-图像识别 人脸定位 手工提取特征的图像分类 识图认物 传统分类系统的特征提取 计算机眼中的图像 什么是图像特征? 卷积运算 利用卷积提取图像特征 基于神经网络的图像分类 传统图像分类系统和深度神经网络 深度神经网络的架构 卷积层 池化层 全连接层 归一化指数层 非线性激活层 Sigmoid函数 双曲正切函数 ReLU函数 深度神经网络的训练 反向传播算法 图像分类应用——人脸识别 人脸识别的流程 人脸识别应用场景 小结 深度学习-图像识别 人脸定位   相信你们外出游玩的时候,都不会带上你的牛逼plus诺基亚手机出门,而是带上你的智能手机给自己美美的拍上一张。当你用手机镜头对准人脸的时候,都会出现一个矩形框,如下图所示(前方高能),那么这个技术是怎么做到的呢?   相机中的人脸定位技术用的是二分类技术。该技术流程如下图所示。   如上图所示,相机首先会将照片分割成一块块的图像块,一张照片往往会有成千上万的图像块被切割出来。   然后每一个图像块都会经过人脸分类器去判别是否是人脸。人脸分类器是预先训练好的分类器,类似于我们之前讲的手写数字识别应用程序中的支持向量机分类器。如果人脸分类器预测该图像块为人脸,相机则会在这个图像块中显示出框的位置。   在人脸定位中,为了解决由于手机离人的距离不同,导致手机上显示的人脸大小不一致的问题。手机在切割图像的时候

数据压缩·课前任务二(PCA)

徘徊边缘 提交于 2020-03-03 05:10:55
要求:主成分分析:步骤、应用及代码实现 目的: 降维。 简介: 通俗易懂见详解:https://www.matongxue.com/madocs/1025.html 这里举一个例子帮助理解。 首先我们观察一下下面这个矩阵: 会发现,这个矩阵的第一列,第二列,第四列这三个列向量在空间中的指向是没有变的,仅仅只是缩放了相应的倍数而已,所以这个看起来是四维度矩阵其实是个二维矩阵。看到这你可能开始迷惑了,为啥是二维,这个矩阵不是有四个列向量吗?鲁迅曾经说过:不要被表象迷惑了双眼。好吧,不管这句话是不是鲁迅说的,但总之,仔细想想我们就会发现,第一、二、四个列向量它们都处在同一条直线上,用线性代数的语言来说,就是这三个列向量张成的空间是一条直线,那在加上第三个列向量所张成的直线,那这个矩阵不就只代表了一个二维平面嘛!所以说,这个四维的矩阵其实只是一个二维矩阵而已! 到这里,我们就会顺理成章产生这样的想法:既然是一个二维的矩阵,干嘛不用二维的形式呢?所以自然地我们就会想到要找一个办法让这个矩阵降维,让它把冗余数据给去掉,只留下它的主成分。我们可以把上面的矩阵看成是一个四维空间中的二维平面,既然是二维平面,就应该在二维平面上重建一个坐标系,这样就可以把原来的列向量都表示出来,也就是说,这四个列向量在空间中没有变,只是我们换了一个参考系,表征它们的值也就变了,原来需要四个数(x,y,z,r

OpenGL超级宝典笔记——新的模式

▼魔方 西西 提交于 2020-02-28 19:51:52
在传统上,图形硬件设计的目标是快速地执行相同的硬编译的计算指令集。计算的步骤可以被跳过,参数可以被调整,但计算本身却是固定的。所以旧式的GPU设计被称为是“固定功能”的。现在的趋势是朝着通用图形处理器的方向发展。就像CPU一样,GPU也可以用任意的指令序列来执行图形计算。GPU和CPU最大的区别是,GPU的浮点数计算能力更强。 在OpenGL2.0之前是固定函数渲染管线,在OpenGL2.0之后就是可编程函数渲染管线了。 走出旧的模式 在替换掉旧的模式之前,我们来回顾一下传统的OpenGL渲染管线是如何运作的。在第一阶段的是基于顶点操作,然后是图元的光栅化产生片段,最后在写到帧缓冲区前,执行片段的纹理,雾和其他的操作。如下图,下面分别讨论基于顶点和基于片段的操作。 固定的顶点处理 基于顶点的阶段以一系列顶点的属性作为输入。这些输入包括物体空间坐标,法线,主颜色,辅助颜色,纹理坐标。最终处理输出的结果为裁剪空间坐标,正面和背面的主颜色和辅助颜色,雾坐标,纹理坐标,以及点的大小。这个处理过程被分为四个阶段。 顶点变换 在传统的固定函数管线中,顶点坐标从物体空间转换到裁剪空间。首先乘以模型视图矩阵转换到视觉空间,然后再乘以投影矩阵变换到裁剪空间。与者两个矩阵相乘是固定的程序,要“跳过”这个过程,就是把这两个矩阵都通过glLoadIdentity设置为单位阵。这样就不会产生影响

Task10.Bert

我的梦境 提交于 2020-02-27 06:51:06
Transformer原理 论文地址:Attention Is All You Need:https://arxiv.org/abs/1706.03762 Transformer是一种完全基于Attention机制来加速深度学习训练过程的算法模型。Transformer最大的优势在于其在并行化处理上做出的贡献。 Transformer抛弃了以往深度学习任务里面使用到的 CNN 和 RNN ,目前大热的Bert就是基于Transformer构建的,这个模型广泛应用于NLP领域,例如机器翻译,问答系统,文本摘要和语音识别等等方向。 Transformer总体结构 和Attention模型一样,Transformer模型中也采用了 encoer-decoder 架构。但其结构相比于Attention更加复杂,论文中encoder层由6个encoder堆叠在一起,decoder层也一样。 对于encoder,包含两层,一个self-attention层和一个前馈神经网络,self-attention能帮助当前节点不仅仅只关注当前的词,从而能获取到上下文的语义。 decoder也包含encoder提到的两层网络,但是在这两层中间还有一层attention层,帮助当前节点获取到当前需要关注的重点内容。 现在我们知道了模型的主要组件,接下来我们看下模型的内部细节。首先

python学习笔记(2):科学计算及数据可视化入门

拈花ヽ惹草 提交于 2020-02-26 22:10:08
一、NumPy   1.NumPy:Numberical Python   2.高性能科学计算和数据分析的基础包   3.ndarray,多维数组(矩阵),具有矢量运算的能力,快速、节省空间     (1)ndarray,N维数组对象(矩阵)     (2)所有元素必须是相同类型     (3)ndim属性,维度个数     (4)shape属性,各维度的大小     (5)dtype属性,数据类型   4.矩阵运算,无需循环,可完成类似Matlab中的矢量计算   5.线性代数、随机数生成   6.import numpy as np narray多维数组 import numpy as np #生成指定维度的随机多维数组 data = np.random.rand(2,3) //生成一个两行三列的多维数组 print dataprint type(data)      //查看数据类型,这个地方数据类型是numpy.ndarray的数据类型 [[0.16088508 0.86321185 0.25653982] [0.42456419 0.33277194 0.30046417]] <class 'numpy.ndarray'># print '维度个数', data.ndim    //维度个数 2     维度个数有两个,第0个维度大小是2,第一个维度大小是3print

动手学深度学习之Task09:目标检测基础;图像风格迁移;图像分类案例1

江枫思渺然 提交于 2020-02-25 23:51:18
目标检测基础 9.4 锚框 目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边缘从而更准确地预测目标的真实边界框(ground-truth bounding box)。不同的模型使用的区域采样方法可能不同。这里我们介绍其中的一种方法:它以每个像素为中心生成多个大小和宽高比(aspect ratio)不同的边界框。这些边界框被称为锚框(anchor box)。我们将在后面基于锚框实践目标检测。 9.4.1 生成多个锚框 假设输入图像高为 h,宽为w。我们分别以图像的每个像素为中心生成不同形状的锚框。设大小为s∈(0,1]且宽高比为r>0,那么锚框的宽和高将分别为wsr和hs/r。当中心位置给定时,已知宽和高的锚框是确定的。 下面我们分别设定好一组大小s1,…,sn和一组宽高比r1,…,rm。如果以每个像素为中心时使用所有的大小与宽高比的组合,输入图像将一共得到whnm个锚框。虽然这些锚框可能覆盖了所有的真实边界框,但计算复杂度容易过高。因此,我们通常只对包含s1或r1的大小与宽高比的组合感兴趣,即 (s1,r1),(s1,r2),…,(s1,rm),(s2,r1),(s3,r1),…,(sn,r1). 也就是说,以相同像素为中心的锚框的数量为n+m−1。对于整个输入图像,我们将一共生成wh(n+m−1)个锚框。

游戏 图形方面 面试题

∥☆過路亽.° 提交于 2020-02-23 19:34:49
图形学渲染流程(管线)说一下 答: 传统的前向渲染管线流程是这样的 顶点和索引到顶点着色器,这里主要是对顶点进行变换,然后是光栅化,这里将剔除视锥体之外的元素,光栅化后三角形内的像素将进入到片元着色器(像素着色器),经过深度测试(模板测试)后写入到Target缓冲区内。 其实还有计算shader,用于曲面细分的三个shader,几何shader,RayTrace shader等,不展开了。 BDRF函数 答:BRDF函数是射出光线的辐照度和摄入光线辐射率的比值,在现代引擎中BRDF一般使用Cook-Torrance 的公式,定义为F菲涅尔(F0,NV) G(L,N,V) 几何函数 D(N,H,Roughness) 法线分布函数(H为L,V的半角向量) 除以4*(NL)*(NV) IBL基本原理 答: 在PBR渲染公式中,我们不仅仅算直接光源,也要考虑来自环境的间接光源,因此把来自环境光的信息储存在cubeMap中供计算,这就是IBL,基于图形的光照,在这种情况下需要对光照方程进行分割,分为环境光和镜面光两部分,为了提高速度一般都会把这些卷积的结果存储在贴图里面,对于漫反射,存不同法线下的卷积结果,对于高光需要先分拆为 预滤波环境贴图和预计算BRDF,这里有一个N=V=R的假设,基于重要性采样,可以把第二项看为参数为NWi和Roughness参数的二维函数,就可以预计算贴图

基于C++的简易RLC电路仿真器与滤波器仿真测试

青春壹個敷衍的年華 提交于 2020-02-17 09:33:11
电路建模分析与仿真算法 对于任意一个电路系统,我们基本上都能使用RLC和受控源进行等效,因此RLC系统的求解是任意一个系统求解的核心。 我们熟知,对于任意一个复杂的电路系统,基尔霍夫定律(Kirchhoff’s laws)总是成立的。选择使用基尔霍夫电压定律还是电流定理将带来两种电路分析方法: 节点电压法 与 网孔电流法 。 然而在通常的仿真算法中不会选择网孔电流法,因为该方法 仅能处理平面电路 ,换言之对于一个不算复杂的立体电路结构(例如正四面体类型的纯电阻电路)网孔电流法就失效了。例如,以SPICE为代表的系列仿真器采用 改进的节点电压法 对电路进行建模计算。 谈到SPICE,其发展是一个漫长的历史,几十年间SPICE这个名字都在业界如雷贯耳。1971年之前,绝大多数电路仿真器的开发都在军方的掌控下,直到1971年,以Laurence Nagel为代表的七人小组在加州大学伯克利分校开发了SPICE,其最大的特点是改进了矩阵求解方式,在计算机运算速度极低的时代,节省了大量时间与研究经费。 稀疏矩阵的求解带来的成效是立竿见影的。 我们知道电路若干个节点之间并非都存在连接,换言之一个电路矩阵矩阵往往是稀疏的,以下举一个简单的例子。 [ + 1 R 1 − 1 R 1 0 0 0 0 0 0 0 0 − 1 R 1 + 1 R 1 + 1 R 2 + s C 1 − 1 R 2 0 0