旋转变换

复数基础及其2D空间的旋转

和自甴很熟 提交于 2019-12-06 05:43:10
本文我们讨论复数及其旋转的含义。复数很有意思,本文介绍了复数的基本定义和性质,以及它关于旋转的几何意义。 复数对于旋转的两个方面极为重要: 1. 它引入了 旋转算子(rotational operator) 的思想:可以通过复数表示一个旋转变换。 2. 它是 四元数 和 多向量 的内在属性。 虽然我们暂时不讨论 四元数 和 多向量 (后面文章会介绍),但是我们会讨论复数的旋转含义( 复平面 上的 2D 旋转),以及引入的 旋转子(rotor) ,我们发现通过特定的复数可以描述一个 2D 旋转。 介绍 复数(complex number) 又称为数字王国中的“国王”,它可以解决普通实数不能很好解决的问题。 例如,对于以下方程: $$x^2+1=0$$ 尽管方程如此简单,但并没有实数解。实际上,实数无法解决这样的问题: $$x=\sqrt{-1}$$ 但这没有妨碍数学家们找到解决此类问题的方法,他们提出一个很牛很简单的思想,就是承认 $i$ 的存在,它满足 $i^2=-1$,于是前面的方程我们可以解出: $$x=\pm i$$ 那么 $i$ 到底是什么呢?我们可以不必纠结,$i$ 就是数学家提出的数学工具,一个简单的数学对象,满足 $i^2=-1$。本文会探讨这个数学工具对于旋转如何发挥作用。 待续。。。 复数基础 复数的定义 复数的性质:公理 复数的模 复数的加减 复数的标量乘法

插入透明背景Flash的HTML代码

梦想的初衷 提交于 2019-12-06 00:15:06
网页制作中经常需要使用透明背景的flash作点缀,会使得整个页面充满活力。 下面就将插入透明背景Flash的HTML代码贴出来,以便日后使用,需要的同志们也可以参考,有好的意见欢迎留言。 <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase=" http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0 " width="653" height="72"> <param name="movie" value="image/28.swf"> //flash路径 <param name="wmode" value="transparent"> //背景透明的关键 <embed src="image/28.swf" width="653" height="72" quality="high" pluginspage=" http://www.macromedia.com/go/getflashplayer " type="application/x-shockwave-flash"></embed> </object> 在提供一些透明背景的flash: ---------------------

基于 H5 + WebGL 实现的地铁站 3D 可视化系统

江枫思渺然 提交于 2019-12-05 13:32:58
前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCADA 的前端技术来实现 2D 可视化监控,本系统采用 Hightopo 的 HT for Web 产品来构造轻量化的 3D 可视化场景,该 3D 场景从正面展示了一个地铁站的现实场景,包括地铁的实时运行情况,地铁上下行情况,视频监控,烟雾报警,电梯运行情况等等,帮助我们直观的了解当前的地铁站。 系统中为了帮助用户更直观友好的浏览当前地铁站,提供了三种交互模式: 第一人称模式 -- 操作就类似行人或车在行进的效果,可以通过键盘鼠标控制前进后退。 自动巡检模式 -- 该模式下用户不需要任何操作,场景自动前进后退来巡查当前地铁站的场景。 鼠标操作模式 -- 左键旋转场景,右键平移场景。 本篇文章通过对地铁站可视化场景的搭建,动画代码的实现,交互模式的原理解析,以及主要功能点的实现进行阐述,帮助我们了解如何使用 HT 实现一个简单的地铁站可视化。 预览地址: 基于 HTML5 WebGL 的地铁站 3D 可视化系统 http://www.hightopo.com/demo/ht-subway/ 界面简介及效果预览 地铁运行效果 地铁从站外开到站内的效果为透明度逐渐增加,速度逐渐降低。 漫游效果

matlab练习程序(计算图像旋转角度)

北城余情 提交于 2019-12-04 12:21:32
比如有图像1,将其旋转n度得到图像2,问如何比较两张图像得到旋转的度数n。 算法思路参考logpolar变换: 1.从图像中心位置向四周引出射线。 2.计算每根射线所打到图像上的像素累计和,得到极坐标灰度曲线。 3.比较两张图的灰度曲线,得到最相关的偏移位置,即为两张图像的旋转角度。 原图: 旋转了10°的图像: 灰度曲线: 代码如下: main.m clear all; close all; clc; img1 = imread('lena.jpg'); img2 = imrotate(img1,15); imshow(img1) figure; imshow(img2) re1 = getCurve(img1); re2 = getCurve(img2); figure; plot(re1); hold on; plot(re2); su=zeros(length(re1),1); for i=1:length(re1) tmp = circshift(re2,i); su(i) =sum(tmp.*re1); end [ma,ind] = max(su); ind/10 getCurve.m function re = getCurve(img) [m,n]=size(img); oy=m/2; ox=n/2; %求中心点到图像四个角的距离 up_left=sqrt((oy

爱恨交织的红黑树

时光总嘲笑我的痴心妄想 提交于 2019-12-04 08:21:42
虐你千万遍,还要待她如初恋的红黑树,是否对她既欢喜又畏惧。别担心,通过本文讲解,希望你能有前所未有的感动。 红黑树也是二叉查找树,但比普通的二叉查找树多一些特性条件限制,每个结点上都存储有红色或黑色的标记。因为是二叉查找树,所以他拥有二叉查找树的所有特性。红黑树是一种自平衡二叉查找树,在极端数据条件插入时(正序或倒叙)不会退化成类链状数据,可以更高效的在O(log(n))时间内完成查找,插入,删除操作。 准备 在阅读本文之前,建议先阅读我上篇文章 《二叉查找树的解读和实现》 ,可以更好的帮助你理解红黑树。 特性 结点是红色或黑色 根结点必须为黑色 叶子结点(约定为null)一定为黑色 任一结点到叶子结点的每条路径上黑色结点数量都相等 不允许连续两个结点都为红色,也就是说父结点和子结点不能都为红色 查找 红黑树的查找方式和上篇文章所讲述的原理一样,这里就不重新讲述,以结点 [38,20,50,15,27,43,70,60,90] 为例,返回一颗红黑树。 普通操作 红黑树的插入和删除,分为多种情况,相对来说比较复杂。插入或删除新结点后的树,必须要满足上面五点特性的二叉查找树,所以要通过不同手段来调整树。但普通操作就是和普通二叉查找树操作一样。 比如普通插入中,因为每个结点只能是红色或黑色,所以我们定义新添加的非根结点默认颜色为红色。将新结点定义为红色的原因是为了满足特性4

opencv标定程序

南楼画角 提交于 2019-12-03 07:12:57
一. 标定原理 摄像机在成像的过程中会在边缘产生显著的畸变,对于普通的摄像机拍摄的图像,会产生径向畸变,切向畸变和其他类型的畸变,我们需要对图像进行矫正处理。使用opencv标定图像的过程,先根据一个标定物体计算旋转矩阵和平移向量,寻找标定物的角点cvFindchessboardCorners;再精确角点的位置(也叫亚像素角点)cvfindCornerSubPix;绘制出所有的标定物角点cvDrawChessboardCorners ;使用标定函数计算摄像机的内参数矩阵和畸变系数,旋转变量和平移变量 cvCalibrateCamera2;根据内参数矩阵和畸变系数求出畸变映射cvInitUndistortMap ,再使用重映射转换图片 cvRemap ,也可以使用cvUndistort2完成所有的事项。 二. 函数简介 1. cvFindchessboardCorners 寻找棋盘上的角点位置 2. cvfindCornerSubPix 精确角点位置 3. cvDrawChessboardCorners 绘制检测到的棋盘角点 4. cvCalibrateCamera2 利用定标来计算摄像机的内参数和外参数 5. cvfindExtrinsicCameraParam2 只计算外参数 6. cvRodrigues2 进行旋转矩阵和旋转向量间的转换 7. cvUndistort2

fft的vhdl实现

匿名 (未验证) 提交于 2019-12-03 00:38:01
所谓的FDRSE就是带同步复位置位时钟使能的d触发器。可以用来做多路数据稳定对齐。 N点基-2 FFT算法的实现方法(http://blog.163.com/tianyake@yeah/blog/static/749331412010979109623/) 从图4我们可以总结出对于点数为N=2^L的DFT快速计算方法的流程: 由于W N 的对称特性,第二象限为第一象限的实部取反,第三象限为虚实皆取反,第四象限为虚部取反,所以只需要存储第一象限即可,而且由于可约性,后几级旋转皆可以由第一级变换得到。 1.对于输入数据序列进行倒位序变换。 该变换的目的是使输出能够得到X(0)~X(N-1)的顺序序列,同样以8点DFT为例,该变换将顺序输入序列x(0)~x(7)变为如图4的x(0),x(4),x(2),x(6),x(1),x(5),x(3),x(7)序列。( 此处倒位序实际上是二进制坐标翻转即可,原因与fft的基2有关,若为基4则为四进制的翻转 ) 事实上大多嵌入式系统中进行离散傅里叶变换一般都应该采用定点方式。对于使用蝶形运算的fft我们不能采用这种简单的放大旋转因子转为整数计算的方式。因为fft是一个非对称迭代过程,假设我们对旋转因子进行了放大,根据蝶形流图我们可以发现其最终的结果是,不同的输入被放大了不同的倍数,对于第一个输入x(0)永远也不会放大。举一个更加形象的例子

ORB

匿名 (未验证) 提交于 2019-12-03 00:38:01
1、算法介绍 1.1 Fast 特征提取 ORB算法的特征提取是由FAST算法改进的,这里成为oFAST(FASTKeypoint Orientation)。也就是说,在使用FAST提取出特征点之后,给其定义一个特征点方向,以此来实现特征点的旋转不变形。FAST算法是公认的最快的特征点提取方法。FAST算法提取的特征点非常接近角点类型。oFAST算法如下: 步骤一 :粗提取。该步能够提取大量的特征点,但是有很大一部分的特征点的质量不高。下面介绍提取方法。从图像中选取一点P,如上图1。我们判断该点是不是特征点的方法是,以P为圆心画一个半径为3pixel的圆。圆周上如果有连续n个像素点的灰度值比P点的灰度值大或者小,则认为P为特征点。一般n设置为12。为了加快特征点的提取,快速排出非特征点,首先检测1、9、5、13位置上的灰度值,如果P是特征点,那么这四个位置上有3个或3个以上的的像素值都大于或者小于P点的灰度值。如果不满足,则直接排出此点。 步骤二 :机器学习的方法筛选最优特征点。简单来说就是使用ID3算法训练一个决策树,将特征点圆周上的16个像素输入决策树中,以此来筛选出最优的FAST特征点。 步骤三 :非极大值抑制去除局部较密集特征点。使用非极大值抑制算法去除临近位置多个特征点的问题。为每一个特征点计算出其响应大小。计算方式是特征点P和其周围16个特征点偏差的绝对值和

数据结构_红黑树

匿名 (未验证) 提交于 2019-12-03 00:36:02
红黑树也是属于一种BBST。在之前介绍的 伸展树 中,虽然实现简单,分摊复杂度低,但是最坏情况下的操作需要O(n)时间,无法适用于对单次效率敏感的场合。相反的,之前介绍的 AVL树 尽管可以保证最坏情况下的单次操作,但是要在节点中嵌入平衡因子等标识;更重要的是,删除操作之后可能需要多达O(logn)次旋转。红黑树是针对后一不足的改进。通过为节点指定颜色,合理动态调整。它可以保证:在每一次插入或删除操作之后的重平衡过程中,全树的拓扑结构更新只涉及常数个。虽然最坏情况下要涉及多达O(logn)个节点染色,但是分摊意义仅为O(1)。红黑树的“适度平衡”的标准为: 任一节点左、右子树的高度相差不过两倍。 (相比于AVL树放宽了平衡条件) 红黑树结构与定义 由红、黑两类节点组成的BST,统一的增设外部节点NULL,使之成为真二叉树(预处理),即统一的引入n+1个外部节点。 由红、黑两色节点组成的二叉搜索树若满足以下条件,即为红黑树。 1、树根始终为黑色。 2、外部节点均为黑色。 3、其余节点若为红色,则孩子节点必为黑色。(红之子、之父必黑) 4、从任一外部节点到根节点的沿途,黑节点的数目相等。(黑深度) 说明:根据上面的条件1和条件2可以得知,红节点均为内部节点,且其父节点及左、右孩子必然存在。条件3意味着红节点之父必为黑色,因此树中任一通路都不含相邻的红节点。从根节点通往任一节点的沿途

旋转矩阵、轴角、欧拉角、四元数的转换关系

匿名 (未验证) 提交于 2019-12-03 00:30:01
其他参考: https://blog.csdn.net/candycat1992/article/details/41254799 http://www.cnblogs.com/yiyezhai/p/3176725.html 主要介绍了在计算机视觉中关于3D变换矩阵的数学方法。 旋转矩阵是一种3×3的正交矩阵, 这里R为3D的旋转矩阵,同样的,t为3D的平移矢量。 由于3D旋转都可以归结成按照某个单位向量n进行大小为θ的旋转。 所以,已知某个旋转时,可以推导出对应的旋转矩阵。该过程由罗德里格斯公式表明,由于过程比较复杂,我们在此不作赘述,只给出转换的结果:  这里 公式虽然较为复杂,但实际写成程序后,只需知道旋转方向和角度后即可完成计算。另一件有趣的事是,如果用 表示与n对应的一个反对称矩阵,那么有: (李代数会对后面的指数形式做出解释) 根据此式,我们也可以从任意给定的旋转矩阵,求出对应的转轴与转角。关于转角θ,我们对上式两边求矩阵的迹,可得: 可得 关于转轴n,由于旋转轴上的向量在旋转后不发生改变,说明 因此,只要求此方程的解向量即可。这也说明n是R特征值为1的一个特征向量。 总之,读者应当明白在3D时,旋转和平移仍可用转移矩阵T来描述,其结构也与2D类似。而T4×4构成了三维欧氏变换群SE(3)。注意到T虽然有16个变量,但 真正的自由度只有6个,其中3个旋转,3个位移。