Delta

Android OpenCV(二十二):边缘检测

▼魔方 西西 提交于 2020-05-04 18:59:47
边缘检测 什么是图像的边缘? 图像的边缘是图像最基本的特征之一。所谓边缘(或边沿)是指周围像素灰度有跳跃性变化或“屋顶”变化的那些像素的集合。边缘是图像局部强度变化最明显的地方,它主要存在于目标与目标、目标与背景、区域与区域之间,因此它是图像分割依赖的重要特征。从本质上说,图像边缘是图像局部特性不连续性(灰度突变、颜色突变、纹理结构突变等)的反应,它标志着一个区域的终结和另一个区域的开始。 检测出的边缘并不等同于实际目标的真实边缘。由于图像数据是二维的,而实际物体是三维的,从三维到二维的投影必然会造成信息的丢失,再加上成像过程中的光照不均和噪声等因素的影响,使得有边缘的地方不一定能被检测出来,而检测出的边缘也不一定代表实际边缘。 图像的边缘有方向和幅度两个属性,沿边缘方向像素变化平缓,垂直于边缘方向像素变化剧烈。边缘上的这种变化可以用微分算子检测出来,通常用一阶或两阶导数来检测边缘。一阶导数认为最大值对应边缘位置,而二阶导数则以过零点对应边缘位置。 由于图像是离散的信号,我们可以用临近的两个像素差值来表示像素灰度值函数的导数,如下: 这种X轴方向求导方式对应于滤波器为[1, -1],对于Y轴方向则是[1, -1]的转置矩阵。 但是这种求导方式的计算结果最接近于两个像素中间位置的梯度,而两个像素之间是不存在像素的,因此,我们应该选取像素点的前后像素的差值来进行计算,如下: 此时

商汤提出解偶检测中分类和定位分支的新方法TSD,COCO 51.2mAP | CVPR 2020

回眸只為那壹抹淺笑 提交于 2020-05-04 12:08:58
> 目前很多研究表明目标检测中的分类分支和定位分支存在较大的偏差,论文从sibling head改造入手,跳出常规的优化方向,提出TSD方法解决混合任务带来的内在冲突,从主干的proposal中学习不同的task-aware proposal,同时结合PC来保证TSD的性能,在COCO上达到了51.2mAP   来源:晓飞的算法工程笔记 公众号 论文: Revisiting the Sibling Head in Object Detector 论文地址: https://arxiv.org/abs/2003.07540 Introduction   经典RoI-based定位算法使用sibling head(2-fc)对proposal同时进行分类和回归,由于任务的本质不同,分类任务和定位任务是完全不同的,关注的特征也不一样,如图1所示。分类任务往往需要平移不变性,而定位任务则需要平移可变性。   具体属性的表现如公式10所示,$\forall_{\varepsilon}, IoU(P+\varepsilon,\mathcal{B})\ge T$,$T$为IoU阈值,$f$为共用的特征提取器。因此,共用的特征提取器以及相同的proposal都是目标检测学习的主要障碍。   与以往的方法不同,论文观察到限制定位算法的根本问题在于分类分支和定位分支在空间维度上存在偏差

Leetcode 446.等差数列划分II 子序列

喜你入骨 提交于 2020-05-04 03:23:46
等差数列划分II 子序列 如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。 例如,以下数列为等差数列: 1, 3, 5, 7, 9 7, 7, 7, 7 3, -1, -5, -9 以下数列不是等差数列。 1, 1, 2, 5, 7 数组 A 包含 N 个数,且索引从 0 开始。该数组 子序列 将划分为整数序列 (P 0 , P 1 , ..., P k ),P 与 Q 是整数且满足 0 ≤ P 0 < P 1 < ... < P k < N。 如果序列 A[P 0 ],A[P 1 ],...,A[P k-1 ],A[P k ] 是等差的,那么数组 A 的 子序列 (P0,P1,…,PK) 称为等差序列。值得注意的是,这意味着 k ≥ 2。 函数要返回数组 A 中所有等差子序列的个数。 输入包含 N 个整数。每个整数都在 -2 31 和 2 31 -1 之间,另外 0 ≤ N ≤ 1000。保证输出小于 2 31 -1。 示例: 输入: [2, 4, 6, 8, 10] 输出: 7 解释: 所有的等差子序列为: [2,4,6] [4,6,8] [6,8,10] [2,4,6,8] [4,6,8,10] [2,4,6,8,10] [2,6,10] Dynamic Programming [Accepted] Intuition To determine

数据增强之图像旋转及坐标对应(附代码)

我与影子孤独终老i 提交于 2020-05-04 02:52:46
海康威视研究院ImageNet2016竞赛经验分享 深度学习之图像的数据增强 data augmentation 数据增强方法总结 图片的数据增强(Data Augmentation)方法 opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移   在训练机器学习或深度学习模型时,我们通常需要输入充足的数据量.若数据量比较小,可以对原有的图像数据进行几何变换,改变图像像素的位置并保证特征不变。上面列出的参考资料中已经列出了很多数据增强的方法,这里主要对图像旋转进行介绍。   首先介绍图像旋转及opencv中的函数:getRotationMartrix2D及warpAffine函数,其中getRotationMartrix2D用于获取旋转矩阵,warpAffine用于旋转。其中warpAffine函数中的仿射变换矩阵除了getRotationMartrix2D外,还可以通过getAffineform获得:warp_mat = getAffineform(srcTri, dstTri),dstTri为旋转后的图像坐标,坐标应该与原图像的坐标顺序相对应。左下角为起点,按照顺时针旋转。 旋转一幅图像需要三个参数:1.旋转图像所要围绕的中心;2.旋转角度(opencv中正角度是逆时针的);3.可选择:缩放因子 1 Mat ImageRotate(Mat src,

「学习笔记」爬山算法与模拟退火

╄→гoц情女王★ 提交于 2020-05-04 00:26:09
爬山算法(Hill Climbing ) 爬山算法(Hill Climbing )是一种局部择优的方法,采用启发式方法,是对深度优先搜索的一种改进,它利用反馈信息帮助生成解的决策。 属于人工智能算法的一种。 有一些问题,是找全局最大值的。题目所述出自变量与值之间的关系是函数,而这函数图像往往像山的形状,可能有许多局部最大、局部最小。于是“爬山”、“高地”、“山脊”等词形象地表示了算法的作用与函数图像的某些部分. 解决这类问题一般有两种方法:爬山算法(Hill Climbing )与模拟退火(Simulated Annealing)。常用的为模拟退火,它往往可以得到最优解。不过这里先介绍爬山算法。 爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。 爬山算法的优点为:避免遍历,通过启发选择部分节点,从而达到提高效率的目的。但是有缺点:只能找到局部最优,一般找不到全局最优解;搜索一旦到达高地,就无法确定搜索最佳方向,会产生随机走动,使得搜索效率降低;搜索可能会在山脊的两面来回震荡,前进步伐很小。 下图反应了爬山算法相对于模拟退火的目光短浅之处(模拟退火也是随机算法,不一定可以找到最优解,但大部分情况可以找到) 模拟退火(Simulated Annealing) 退火是物理热力学里的概念。退火是将金属加热到一定温度

51nod1462 树据结构(树链剖分+线段树)

亡梦爱人 提交于 2020-05-03 21:08:14
  这题好久之前就被学长安利了...一直没写珍藏在收藏夹一个不为人知的角落233   这题怎么做...我们来数形结合,横坐标为$t_i$被加的次数(可看作时间$t$),纵坐标为$v_i$,那么$t_i$实际上就是阶梯图形的面积。   上图是父亲节点和子节点合并后的样子,阴影部分为答案即$t_i$,显然可以通过$deltat*deltav-deltatv$来得到。   信息下传的时候儿子的$deltatv$加上父亲的$deltatv$后还要加上一个长方体的面积即$deltat_{son}*deltav_{fa}$,然后儿子的$deltat$和$deltav$都加上父亲的就行了。 #include<iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <algorithm> #define ll long long using namespace std; const int maxn= 200010 , inf= 1e9; struct poi{ int too, pre;}e[maxn<< 1 ]; struct tjm{ll deltat, deltav, deltatv;}tree[maxn<< 2 ]; int n, m, tott, tot, ty, x, y, z; int

基于神念TGAM的脑波小车(1)

依然范特西╮ 提交于 2020-05-02 19:29:47
作者声明:此博客是作者的毕设心得,拿来分享。 拿到模块,在网上查了一圈,发现基本没什么有用的资料,有也是一些废话,经过我几个月的攻克,现在已初步搞定,分享给大家。 废话不多说,直接步入正题。 这是通过单片机的232通信例程直接接收得到的原始数据,也就是参考手册中的数据流。其中小包数据,是每秒512个大概,大包数据是每秒1个。 小包的格式是AA AA 04 80 02 xxHigh xxLow xxCheckSum前面的AA AA 04 80 02 是不变的,后三个字节是一只变化的,xxHigh和xxLow组成了原始数据rawdata,xxCheckSum就是校验和。所以一个小包里面只包含了一个对开发者来说有用的数据,那就是rawdata,可以说一个小包就是一个原始数据,大约每秒钟会有 512个原始数据。 从小包中解析出原始数据:rawdata = (xxHigh << 8) | xxLow; if(rawdata > 32768){ rawdata ­=65536; } 根据手册,在计算原始数据之前,要先检查检验和:sum = ((0x80 + 0x02 + xxHigh + xxLow)^ 0xFFFFFFFF) & 0xFF。就是把头文件AA AA 04后面的四个数据加起来,取反,在取低八位。当检验码不对时,直接丢弃该包。 在大包数据里面可以解析Signal,Attention

idou老师教你学istio 31:Istio-proxy的report流程

℡╲_俬逩灬. 提交于 2020-05-02 19:23:21
Istio-proxy的report主要是将envoy采集到的连接attributes的信息上报给控制面的mixer,它的入口在request_handler_impl.cc文件中,这里需要打开enable_mixer_report开关,提取出report_data中的attribute信息,调用SendReport发送出去。 SendReport的实现在client_context_base.cc中,跳转到client_impl中。 client_impl.cc跳转到report_batch中。 report_batch.cc中会在batch_compresser中添加attributes作为向mixer发起的请求report,这里的Add是一个bool,判断是否所有的上次请求所用的attributes都在本次的report的请求中。 attribute_compressor.cc中定义了Add的方法,利用CompressByDict更新压缩过的attributes &pb,如果在这一步压缩的变量全部都在,那么compressbydict的返回值是true,会更新pb。如果有的attributes的变量不存在,那么返回值为false,不更新pb,回到上一张图。 Compress是否成功在下图的函数中判断,这里用到的是delta_update,在delta_update.cc中

Linux三阶段之二:备份服务(rsync)

て烟熏妆下的殇ゞ 提交于 2020-05-02 11:38:50
二、备份服务(rsync) (一)rsync服务介绍 Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。Rsync软件适用于unix/linux/windows等多种操作系统平台。 Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。减少通过网络数据发送数量,利用只发送源文件和目标文件之间的差异信息,从而实现数据的增量同步复制。 (二)rsync服务命令简单应用 1、Rsync复制同步数据原理 在同步备份数据时,默认情况下,Rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以可以实现快速的同步备份数据,即采用增量复制方法对数据信息进行同步,与传统cp,scp拷贝工具的全量拷贝复制截然不同,增量同步复制数据,在效率上远远高于全量复制。 2、Rsync备份软件7大特性总结: 支持拷贝普通文件与特殊文件如链接文件,设备等。

机器学习中的矩阵向量求导(四) 矩阵向量求导链式法则

好久不见. 提交于 2020-05-02 08:01:23
    在 机器学习中的矩阵向量求导(三) 矩阵向量求导之微分法 中,我们讨论了使用微分法来求解矩阵向量求导的方法。但是很多时候,求导的自变量和因变量直接有复杂的多层链式求导的关系,此时微分法使用起来也有些麻烦。需要一些简洁的方法。     本文我们讨论矩阵向量求导链式法则,使用该法则很多时候可以帮我们快速求出导数结果。     本文的标量对向量的求导,标量对矩阵的求导使用分母布局, 向量对向量的求导使用分子布局。如果遇到其他资料求导结果不同,请先确认布局是否一样。 1. 向量对向量求导的链式法则     首先我们来看看向量对向量求导的链式法则。假设多个向量存在依赖关系,比如三个向量$\mathbf{x} \to \mathbf{y} \to \mathbf{z}$存在依赖关系,则我们有下面的链式求导法则:$$\frac{\partial \mathbf{z}}{\partial \mathbf{x}} = \frac{\partial \mathbf{z}}{\partial \mathbf{y}}\frac{\partial \mathbf{y}}{\partial \mathbf{x}}$$     该法则也可以推广到更多的向量依赖关系。但是要注意的是要求所有有依赖关系的变量都是向量,如果有一个$\mathbf{Y}$是矩阵,,比如是$\mathbf{x} \to