旋转变换

六种常见的数据扩增方式(附代码)

喜夏-厌秋 提交于 2019-12-01 04:27:15
在某些场景下的目标检测中,样本数量较小,导致检测的效果比较差,这时就需要进行数据扩增。本文介绍常用的6类数据扩增方式,包括裁剪、平移、改变亮度、加入噪声、旋转角度以及镜像。 每一部分的参考资料也附在代码的介绍位置,大家可以参考。 裁剪(需要改变bbox): 裁剪后的图片需要包含所有的框,否则会对图像的原始标注造成破坏。 def _crop_img_bboxes(self,img,bboxes): ''' 裁剪后图片要包含所有的框 输入: img:图像array bboxes:该图像包含的所有boundingboxes,一个list,每个元素为[x_min,y_min,x_max,y_max] 要确保是数值 输出: crop_img:裁剪后的图像array crop_bboxes:裁剪后的boundingbox的坐标,list ''' #------------------ 裁剪图像 ------------------ w = img.shape[1] h = img.shape[0] x_min = w x_max = 0 y_min = h y_max = 0 for bbox in bboxes: x_min = min(x_min, bbox[0]) y_min = min(y_min, bbox[1]) x_max = max(x_max, bbox[2]) y_max

Android animation 学习

泄露秘密 提交于 2019-12-01 01:12:40
关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画; 2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。 动画类型 下面先来看看Android提供的动画类型。Android的animation由四种类型组成 在XML文件中: alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 在Java 源码中定义了相应的类,可以使用这些类的方法来获取和操作相应的属性: AlphaAnimation渐变透明度动画效果 ScaleAnimation渐变尺寸伸缩动画效果 TranslateAnimation画面转换位置移动动画效果 RotateAnimation画面转移旋转动画效果 Tween Animation 一个tween动画将对视图对象中的内容进行一系列简单的转换(位置,大小,旋转,透明性)。如果你有一个文本视图对象,你可以移动它,旋转它,让它变大或让它变小,如果文字下面还有背景图像,背景图像也会随着文件进行转换。 使用XML来定义Tween Animation

Android Animation学习笔记

╄→гoц情女王★ 提交于 2019-11-29 19:51:41
关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画; 2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。 动画类型 下面先来看看Android提供的动画类型。Android的animation由四种类型组成 在XML文件中: alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 在Java 源码中定义了相应的类,可以使用这些类的方法来获取和操作相应的属性: AlphaAnimation渐变透明度动画效果 ScaleAnimation渐变尺寸伸缩动画效果 TranslateAnimation画面转换位置移动动画效果 RotateAnimation画面转移旋转动画效果 Tween Animation 一个tween动画将对视图对象中的内容进行一系列简单的转换(位置,大小,旋转,透明性)。如果你有一个文本视图对象,你可以移动它,旋转它,让它变大或让它变小,如果文字下面还有背景图像,背景图像也会随着文件进行转换。 使用XML来定义Tween Animation

图像几何变换(缩放、旋转)中常用的插值算法

醉酒当歌 提交于 2019-11-29 06:38:51
最邻近插值: 这是一种最为简单的插值方法,在图像中最小的单位就是单个像素,但是在旋转个缩放的过程中如果出现了小数,那么就对这个浮点坐标进行简单的取整,得到一个整数型坐标,这个整数型坐标对应的像素值就是目标像素的像素值。取整的方式就是:取浮点坐标最邻近的左上角的整数点。 举个例子: 3*3的灰度图像,其每一个像素点的灰度如下所示 我们要通过缩放,将它变成一个4*4的图像,那么其实相当于放大了4/3倍,从这个倍数我们可以得到这样的比例关系: 根据公式可以计算出目标图像中的(0,0)坐标与原图像中对应的坐标为(0,0) (由于分母不能为0,所以我们将公式改写) 然后我们就可以确定出目标图像中(0,0)坐标的像素灰度了,就是234。 然后我们在确定目标图像中的(0,1)坐标与原图像中对应的坐标,同样套用公式: 我们发现,这里出现了小数,也就是说它对应的原图像的坐标是(0,0.75),显示这是错误的,如果我们不考虑亚像素情况,那么一个像素单位就是图像中最小的单位了,那么按照最临近插值算法,我们找到距离0.75最近的最近的整数,也就是1,那么对应的原图的坐标也就是(0,1),像素灰度为67。 双线性内插值: 对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i+u,j+v),其中i、j均为非负整数,u、v为[0,1)区间的浮点数,则这个像素得值 f(i+u,j+v) 可由原图像中坐标为

红黑树(一) 原理和算法介绍

杀马特。学长 韩版系。学妹 提交于 2019-11-27 22:05:32
一、简介 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构。 红黑树的特性: (1)每个节点或者是黑色,或者是红色。 (2)根节点是黑色。 (3)每个为空的叶子节点(NIL或NULL)是黑色。 (4)如果一个节点是红色的,则它的子节点必须是黑色的。 (5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。 注: 特性(5),确保没有一条路径会比其他路径长出俩倍。因而,红黑树是相对是接近平衡的二叉树。 红黑树示意图如下: 二、红黑树的应用 红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高。 例如,Java集合中的TreeSet和TreeMap,C++ STL中的set、map,以及Linux虚拟内存的管理,都是通过红黑树去实现的。 三、红黑树的时间复杂度和相关证明 红黑树的时间复杂度为: O(lgn) 定理:一棵含有n个节点的红黑树的高度至多为2log(n+1) 下面通过“数学归纳法”对红黑树的时间复杂度进行证明。 证明: "一棵含有n个节点的红黑树的高度至多为2log(n+1)" 的逆否命题是 "高度为h的红黑树,它的包含的内节点个数至少为 2h/2-1个"。 我们只需要证明逆否命题,即可证明原命题为真;即只需证明 "高度为h的红黑树,它的包含的内节点个数至少为 2h/2-1个

Android 面试知识集1

会有一股神秘感。 提交于 2019-11-27 13:53:13
  今晚在复习Android基础的时候,找到了一些很有价值的基础知识,分享给给位Android的开发者。这些是基础知识,同时也可以当做面试准备。面试题其实是很好的基础知识学习,有空会好好整理相关基础知识。 1.Activity的生命周期 方法 描述 可被杀死 下一个 onCreate() 在activity第一次被创建的时候调用。这里是你做所有初始化设置的地方──创建视图、设置布局、绑定数据至列表等。如果曾经有状态记录(参阅后述 Saving Activity State 。),则调用此方法时会传入一个包含着此activity以前状态的包对象做为参数。 总继之以onStart()。 否 onStart() onRestart() 在activity停止后onStop(),在再次启动之前被调用。 总继之以onStart()。 否 onStart() onStart() 当activity正要变得为用户所见时被调用。 当activity转向前台时继以onResume(),在activity变为隐藏时继以onStop()。 否 onResume() or onStop() onResume() 在activity开始与用户进行交互之前被调用。此时activity位于堆栈顶部,并接受用户输入。 继之以onPause()。 否 onPause() onPause()

CSS3——2D变形和3D变形

混江龙づ霸主 提交于 2019-11-27 13:17:25
2D变形(CSS3) transform transform是CSS3中具有颠覆性的特征之一,可以实现元素的位移、旋转、倾斜、缩放,甚至支持矩阵方式,配合过渡和即将学习的动画知识,可以取代大量之前只能靠Flash才可以实现的效果。 变形转换 transform transform 变换 变形的意思 《 transformers 变形金刚》 移动 translate(x, y) translate 移动平移的意思 translate(50px,50px); 使用translate方法来将文字或图像在水平方向和垂直方向上分别垂直移动50像素。 可以改变元素的位置,x、y可为负值; translate(x,y)水平方向和垂直方向同时移动(也就是X轴和Y轴同时移动) translateX(x)仅水平方向移动(X轴移动) translateY(Y)仅垂直方向移动(Y轴移动) .box { width: 499.9999px; height: 400px; background: pink; position: absolute; left:50%; top:50%; transform:translate(-50%,-50%); /* 走的自己的一半 */ } 让定位的盒子水平居中 缩放 scale(x, y) transform:scale(0.8,1);

CSS3 Transform变形(3D转换)

和自甴很熟 提交于 2019-11-27 13:16:27
CSS3 3D 转换 三维变换使用基于二维变换的相同属性,如果您熟悉二维变换,你们发现3D变形的功能和2D变换的功能相当类似。CSS3中的3D变换主要包括以下几种功能函数: 3D位移:CSS3中的3D位移主要包括translateZ()和translate3d()两个功能函数; 3D旋转:CSS3中的3D旋转主要包括rotateX()、rotateY()、rotateZ()和rotate3d()四个功能函数; 3D缩放:CSS3中的3D缩放主要包括scaleZ()和scale3d()两个功能函数; 3D矩阵:CSS3中3D变形中和2D变形一样也有一个3D矩阵功能函数matrix3d()。 1.3D位移 在CSS3中3D位移主要包括两种函数translateZ()和translate3d()。translate3d()函数使一个元素在三维空间移动。这种变形的特点是,使用三维向量的坐标定义元素在每个方向移动多少。 随着px的增加,直观效果上: X:从左向右移动 Y:从上向下移动 Z:以方框中心为原点,变大 从上图的效果可以看出,当z轴值越大时,元素也离观看者更近,从视觉上元素就变得更大;反之其值越小时,元素也离观看者更远,从视觉上元素就变得更小。 例子: height: 300px; float: left; margin: 15px; position: relative;

css3之3D 旋转立方体与哆啦A梦

狂风中的少年 提交于 2019-11-27 03:52:59
主要记录两个css3 3D转换的示例 ㈠哆啦A梦 三个哆啦A梦的图片,分别让其围绕X轴,Y轴,Z轴旋转60度,鼠标放上开始发生变化。 具体代码如下图所示: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>3d变换</title> 6 <style type="text/css"> 7 #stage{ 8 width: 910px; 9 margin:100px auto; 10 perspective:100px; 11 } 12 .box{ 13 width:300px; 14 height: 327px; 15 float: left; 16 transition:linear 1s; 17 transition-style:preserve-d; 18 } 19 img{ 20 width:300px; 21 height: 327px; 22 } 23 .x:hover{ 24 transform:rotateX(60deg); 25 } 26 .y:hover{ 27 transform:rotateY(60deg); 28 } 29 .z:hover{ 30 transform:rotateZ(60deg); 31 } 32 </style> 33 <

从四元数入手到姿态解算

孤人 提交于 2019-11-26 19:49:22
从四元数入手到姿态解算 四元数 姿态解算 四元数 四元数(quaternion)是威廉·哈密顿提出的。四元数与复数类似,可以借助复数进行理解,复数:i^2=-1。于此对应的四元数基本性质是:i²=j²=k²=i·j·k=-1。 四元数基本运算: 加法: 定义两个四元数 四元数加法:p + q 跟复数、向量和矩阵一样,两个四元数之和需要将不同的元素加起来。 乘法: 叉乘: 代数形式: 同矩阵,四元数的乘法有非可替换性,即pq不等于qp。 四元数点积: p · q 求共轭 q*=(-x, -y, -z, w) 我们着重考虑四元数与三维空间旋转移动之间的关系。 首先我们借助复数在二维空间移动来考虑四元数,在复数域,我们对一个复数乘i相当于在复数域逆时针旋转90度,,乘任一复数相当于旋转复数相对应的角度。 那么对于四元数,三维坐标系下给定一个矢量v,再给定一个旋转的单位四元素q,让v旋转q。 先将v改写成四元素的形式v = (x, y ,z, 0), 接下来要旋转v须用q前乘以矢量v,再后乘以q-1。即完成了q对应的旋转移动操作,其中q的实部使原先矢量移动,虚部使其旋转,位旋转轴。 在实际应用中四元数多和欧拉角转换,这里给出两者变换的公式: 姿态解算 对于上式的计算,首先我们需要知道一个矩阵: 即欧拉角坐标变化矩阵,实质上就是两个坐标系的转化,参数分别为Z轴旋转为偏航角(YAW)ψ