【算法分析】
文章平均质量分 84
xiaowei_cqu
一只人畜无害的小码农
展开
-
【算法设计】打印螺旋数组
看到一个很简单的题目,很想小时候数学课本后面找规律的思考题。题目给定N打印如下数组:解法一:循环N螺旋赋值比较直观的思路是根据N来找规律。可以看到N为奇数时,数组是逆时针循环赋值;N为偶数时,顺时针。如下图所示:所以在最外层循环N,很容易写出代码: int n=0;cin>>n; vector > T(n,vector(原创 2012-12-04 23:21:14 · 14639 阅读 · 2 评论 -
【图像处理】快速计算积分图
积分图是图像中十分常用的方法,最初是在Haar特征的快速计算中学到(参考博文:利用积分图像法快速计算Haar特征),后来发现在均值滤波,二值化等图像处理方法中也十分常见。积分图的简要介绍可以参考博文:利用积分图像法快速计算Haar特征,这里不再重复了。本篇主要是小记一下积分图的计算方法。由于积分图中每个单元存储的信息是原图中此位置左上角所有像素之和,所以对一张W*H的图像直接求取积分图,需要:(1原创 2014-01-06 21:39:56 · 42899 阅读 · 30 评论 -
【OpenCV】SIFT原理与源码分析:关键点描述
《SIFT原理与源码分析》系列文章索引:http://blog.csdn.net/xiaowei_cqu/article/details/8069548由前一篇《方向赋值》,为找到的关键点即SIFT特征点赋了值,包含位置、尺度和方向的信息。接下来的步骤是关键点描述,即用用一组向量将这个关键点描述出来,这个描述子不但包括关键点,也包括关键点周围对其有贡献的像素点。用来作为目标匹配的依据(原创 2012-10-26 10:35:12 · 31851 阅读 · 34 评论 -
【OpenCV】SIFT原理与源码分析:DoG尺度空间构造
《SIFT原理与源码分析》系列文章索引:http://blog.csdn.net/xiaowei_cqu/article/details/8069548尺度空间理论自然界中的物体随着观测尺度不同有不同的表现形态。例如我们形容建筑物用“米”,观测分子、原子等用“纳米”。更形象的例子比如Google地图,滑动鼠标轮可以改变观测地图的尺度,看到的地图绘制也不同;还有电影中的拉伸镜头等等…原创 2012-10-15 07:08:14 · 80630 阅读 · 86 评论 -
【图像处理】利用积分图像法快速计算Haar特征
由于Haar特征是矩形中黑色区域所有像素值的和减去白色区域所有像素值的和。在之前(《计算Haar特征个数》)我们看到,24*24的图片中,有115984个特征,远远大于其像素个数。如果计算每个特征的像素和,计算量会非常大,而且很多次运算是重复的。Paul Viola提出一种利用积分图像法快速计算Haar特征的方法(《Rapid object detection using a boosted原创 2012-11-24 11:37:28 · 36192 阅读 · 27 评论 -
【图像处理】火灾尖角检测方法
在一些国内的论文中看到尖角检测方法,感觉有点类似以前学过的“种子填充”或者“扫描线”。算法描述按照从上到下,从左到右的顺序扫描整个二值图像。遇到像素为白色时不做任何标记,继续扫描下一像素;遇到黑色像素,则判断周围像素是否被标记的情况来决定本像素的标记情况。可分为4种情况:若该像素的上方和左方除了0和255外没有其它的标记,则将该像素设置一个新的标记;若该像素上方有除了0原创 2013-01-25 07:31:21 · 8662 阅读 · 7 评论 -
【体系结构】转移预测器设计与比较
关联预测器,Tournament预测器,分支历史表预测器的设计与比较原创 2013-07-24 21:40:52 · 10369 阅读 · 2 评论 -
【OpenCV】SIFT原理与源码分析:关键点搜索与定位
《SIFT原理与源码分析》系列文章索引:http://blog.csdn.net/xiaowei_cqu/article/details/8069548由前一步《DoG尺度空间构造》,我们得到了DoG高斯差分金字塔:如上图的金字塔,高斯尺度空间金字塔中每组有五层不同尺度图像,相邻两层相减得到四层DoG结果。关键点搜索就在这四层DoG图像上寻找局部极值点。DoG局部极值点寻找原创 2012-10-21 21:25:37 · 31883 阅读 · 38 评论 -
【体系结构】转移预测器性能的定量评价
定量评价几种预测器:分支历史表预测器,相关分支预测器,Tournament预测器的预测准确率、原创 2013-07-26 13:21:47 · 4070 阅读 · 4 评论 -
【3D】迭代最近点算法 Iterative Closest Points
研究生课程系列文章参见索引《在信科的那些课》基本原理假定已给两个数据集P、Q, ,给出两个点集的空间变换f使他们能进行空间匹配。这里的问题是,f为一未知函数,而且两点集中的点数不一定相同。解决这个问题使用的最多的方法是迭代最近点法(Iterative Closest Points Algorithm)。基本思想是:根据某种几何特性对数据进行匹配,并设这些匹配点为假想的对应点,然后根据这原创 2013-01-21 13:06:08 · 48662 阅读 · 57 评论 -
【3D】三维数据获取的运动恢复
研究生课程系列文章参见索引《在信科的那些课》三维数据获取的运动恢复三维数据配准(Registration):将在不同的视点采集到的三维数据记录到同一个物体基准坐标系中。运动恢复(Motion Recovery):通过对数据(图像)序列的分析求解传感器的运动过程。运动是生物视觉与机器视觉重要的感知功能。运动控制是脑高度发达的机能之一,不仅涉及到脑皮层及各种大脑结构原创 2012-12-31 17:13:04 · 6734 阅读 · 1 评论 -
【算法分析】查找算法:二分查找、顺序查找
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/details/7747205查找算法查找算法是在存在的序列(list) 中查找特定的目标(target),要求序列中每个记录必须与一个关键词(key)关联才能进行查找。原创 2012-07-19 09:51:07 · 43492 阅读 · 48 评论 -
【算法分析】排序算法:希尔、归并、快速、堆排序
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/details/7747205排序算法排序是非常常用,非常基本的算法。排序的方法有很多,比如插入排序、选择排序、希尔排序、归并排序、快速排序、堆排序。本次试验重点实现:希尔排序原创 2012-07-28 06:15:10 · 19575 阅读 · 38 评论 -
【OpenCV】SIFT原理与源码分析:方向赋值
《SIFT原理与源码分析》系列文章索引:http://blog.csdn.net/xiaowei_cqu/article/details/8069548由前一篇《关键点搜索与定位》,我们已经找到了关键点。为了实现图像旋转不变性,需要根据检测到的关键点局部图像结构为特征点方向赋值。也就是在findScaleSpaceExtrema()函数里看到的alcOrientationHist()语原创 2012-10-22 07:01:18 · 28869 阅读 · 14 评论 -
【OpenCV】SIFT原理与源码分析
SIFT简介Scale Invariant Feature Transform,尺度不变特征变换匹配算法,是由David G. Lowe在1999年(《Object Recognition from Local Scale-Invariant Features》)提出的高效区域检测算法,在2004年(《Distinctive Image Features from Scale-Inva原创 2012-10-15 07:04:42 · 127292 阅读 · 35 评论 -
【图像处理】利用循环移位实现描述子分类
听师姐提到一种特征描述子:对图像中每个3*3的块进行一定的处理,之后用矩阵外周8个像素表示此块,每个像素点有0和1两种状态。于是总共有2的8次方即256种状态。但通过一定的分类规则,可以把256种状态分为36种。比如以下两个图:由于左图可以通过旋转变为右图,所以认为他们是同一种状态。感觉这个方法很简单,也有一定道理,分类的标准一定程度保证了“旋转不变性”。很有意思,于是自己试着实现原创 2013-03-01 19:43:57 · 5455 阅读 · 1 评论 -
【计算机视觉】SIFT中LoG和DoG比较
在实际计算时,三种方法计算的金字塔组数noctaves,尺度空间坐标,以及每组金字塔内的层数S是一样的。同时,假设图像为640*480的标准图像。原创 2014-06-03 10:05:25 · 35359 阅读 · 16 评论 -
【图像处理】边相关扫描线填充算法
接着上篇博文《 多边形的扫描转换》转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7712451多边形边相关扫描线填充算法需要建立两张表:新边表(New Edge Table,NET)和 活动边表(Active Edge Table,AET)新边表 NET记录多边形除水平边外的所有原创 2012-07-03 19:12:54 · 24574 阅读 · 4 评论 -
【图像处理】计算Haar特征个数
最早的Haar特征由Papageorgiou C.等提出(《A general framework for object detection》),后来Paul Viola和Michal Jones提出利用积分图像法快速计算Haar特征的方法(《Rapid object detection using a boosted cascade of simple features》)。之后,Raine原创 2012-11-23 13:15:43 · 42253 阅读 · 32 评论 -
【数值分析】迭代法解方程:牛顿迭代法、Jacobi迭代法
本科课程参见:《软件学院那些课》牛顿迭代公式设已知方程f(x)=0的近似根x0 ,则在x0附近f(x)可用一阶泰勒多项式近似代替.因此, 方程f(x)=0可近似地表示为p(x)=0。用x1表示p(x)=0的根,它与f(x)=0的根差异不大.设 ,由于x1满足解得重复这一过程,得到迭代公式:这就是著名的牛顿迭代公式,它相应的不动点方程为Jaco...原创 2013-02-18 14:31:06 · 100699 阅读 · 5 评论 -
【数值分析】常微分方程数值解:欧拉公式
本科课程参见:《软件学院那些课》算法原理对于常微分方程初值问题在求解区间[a,b]上作等距分割的剖分,步长,记。用数值微商的方法,即用差商近似微商数值求解常微分方程。用向前差商近似做出y(x)的在x=x0处的一阶向前差商式:又,于是得到而y(x1)的近似值y1可按或求得。类似地,由以及得到计算近似值的向前欧拉公式:由差商(差...原创 2013-02-18 14:10:23 · 38244 阅读 · 3 评论 -
【数值分析】微分求积:复化梯形、复化辛浦生
本科课程参见:《软件学院那些课》复化梯形将积分区间[a,b]划分n等分,步长,求积节点,在每个小区间上应用梯形公式然后将它们累加求和,作为所求积分I的近似值.记 式为复化梯形求积公式,下标n表示将区间n等分。算法流程算法代码double f(double x){ if(x==0) return 1; else r...原创 2013-02-17 14:19:04 · 19326 阅读 · 1 评论 -
【数值分析】插值法:拉格朗日插值、牛顿插值
本科课程参见:《软件学院那些课》拉格朗日插值法(*以下定义选自维基百科)算法流程图算法代码#include<iostream>#include<string>#include<vector>using namespace std;double Lagrange(int N,vector<double>&...原创 2013-02-17 13:44:31 · 72130 阅读 · 15 评论 -
【算法设计】矩阵乘法
研究生课程系列文章参见索引《在信科的那些课》题目设A1,A2,…,An为矩阵序列,Ai为Pi-1×Pi阶矩阵,i = 1,2,…,n. 确定乘法顺序使得元素相乘的总次数最少.输入:向量P = 实例: P = A1: 10 × 100, A2: 100 × 5, A3: 5 × 50乘法次序:(A1 A2)A3: 10 × 100 × 5 + 10 ×5 ×原创 2012-11-14 09:28:37 · 10667 阅读 · 13 评论 -
【算法设计】背包问题
研究生课程系列文章参见索引《在信科的那些课》题目一个旅行者准备随身携带一个背包,可以放入背包的物品有n种,每种物品的重量和价值分别为wj, vj . 如果背包的最大重量限制是b, 怎样选择放入背包的物品以使得背包的价值最大?目标函数:约束条件:算法设计设Fk(y) 表示只允许装前k 种物品,背包总重不超过y 时背包的最大价值。原创 2012-11-16 18:39:18 · 33503 阅读 · 8 评论 -
【算法设计】背包问题2
研究生课程系列文章参见索引《在信科的那些课》之前整理了屈奶奶讲的背包问题,感谢cyh24童鞋留言,传我一份武林秘籍《背包问题九讲》,实践了一下文档里对空间复杂度的改进。0-1背包问题通过之前的分析,Fk(y) 表示只允许装前k 种物品,背包总重不超过y 时背包的最大价值。得到0-1背包的递推公式和边界条件:对空间的优化主要在Fk(y),原本我们用两个循环实现:for原创 2012-11-20 13:35:59 · 4518 阅读 · 0 评论 -
【算法设计】虎溪校园导游系统
本科课程参见:《软件学院那些课》问题描述设计一个校园导游程序, 为来访的客人提供信息查询服务。基本要求(1)设计学校的校园平面图,所含景点不少于10个,以图中顶点表示校内各景点,存放景点名称、代号、简介等信息,以边表示路径,存放路径长度等相关信息。(2)为来访客人提供图中任意景点相关信息的查询;(3)为来访客人提供从校门口到图中任意景点的问路查询;算法思想图的表原创 2013-02-19 01:47:51 · 14251 阅读 · 10 评论 -
【算法设计】约瑟夫环
本科系列课程参见:《软件学院那些课》问题描述约瑟夫(Joeph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序...原创 2013-02-21 14:20:19 · 14317 阅读 · 2 评论 -
【OpenCV】基元检测 Primitive Detection
基元的概念基元泛指图像中有特点的单元。常说的基元有:边缘、角点、斑点、直线段、圆、等基元检测是图像分析的基础 边缘(Edge)检测边缘是图像中像素灰度值发生剧烈变化而不连续的结果边缘是赋予单个像素的一种性质,与图像函数在该像素的一个邻域内的梯度特性相关边缘幅值:梯度的幅值边缘方向:梯度方向旋转-90度边缘检测既是常见基元检测的基础,也是基于边界的图像分割的第一...原创 2013-03-19 14:20:09 · 17635 阅读 · 3 评论 -
【数据结构】顺序栈 Stack
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/details/7747205顺序栈各种基本运算算法的实现栈是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底(push),最后的数据在栈顶原创 2012-07-16 11:41:21 · 10323 阅读 · 7 评论 -
【模式识别】感知器 Perceptron
基本概念线性可分:在特征空间中可以用一个线性分界面正确无误地分开两 类样本;采用增广样本向量,即存 在合适的增广权向量 a 使得:则称样本是线性可分的。如下图中左图线性可分,右图不可分。所有满足条件的权向量称为解向量。权值空间中所有解向量组成的区域称为解区。通常对解区限制:引入余量b,要求解向量满足:使解更可靠(推广性更强),防止优化算法收敛到解区的边界。感...原创 2013-06-01 13:41:03 · 28196 阅读 · 6 评论 -
【模式识别】最小平方误差判别 MSE
最小平方误差判别准则函数对于上一节提出的不等式组:在线性不可分的情况下,不等式组不可能同时满足。一种直观的想法就是,希望求一个a*使被错分的样本尽可能少。这种方法通过求解线性不等式组来最小化错分样本数目,通常采用搜索算法求解。为了避免求解不等式组,通常转化为方程组:矩阵形式为:。方程组的误差为:,可以求解方程组的最小平方误差求解,即:Js(a) 即为最小平方误差(M...原创 2013-06-02 15:36:44 · 27675 阅读 · 2 评论 -
【模式识别】多层感知器 MLP
由前面介绍看到,单个感知器能够完成线性可分数据的分类问题,是一种最简单的可以“学习”的机器。但他无法解决非线性问题。比如下图中的XOR问题:即(1,1)(-1,-1)属于同一类,而(1,-1)(-1,1)属于第二类的问题,不能由单个感知器正确分类。即在Minsky和Papert的专著《感知器》所分析的:感知器只能解决所谓一阶谓词逻辑问题:与(AND),或(OR)等,而不能解决异或(XOR)...原创 2013-06-03 02:04:18 · 54145 阅读 · 5 评论 -
【模式识别】反向传播神经网络 BPNN
回顾感知器学习算法,其核心思想是梯度下降法,即以训练样本被错分的程度为目标函数,训练中每次出现错误时便使权系数朝着目标函数相对于权系数负梯度方向更新,知道目标中没有被错分的样本为止。而多层感知器模型中,神经元传递函数是阶跃函数,输出端的无耻只能对最后一个神经元系数求梯度,无法对其他权系数求梯度,所以无法利用梯度下降的方法学习其他的权值。Sigmoid函数BP算法提出主要由于Sigmoi...原创 2013-06-04 16:45:16 · 30117 阅读 · 6 评论 -
【Android】生成随机数
几种动态生成随机数的方法:使用System#currentTimeMillis()获取一个当前时间毫秒数的long型数字 使用Random#nextInt(int n)产生一个0到n之间整数 使用Math#random()返回一个0到1之间的double值 使用ThreadLocalRandom.nextInt(0, n)生成0到n之间的随机整数 使用SecureRandom 使用S...原创 2018-10-17 21:48:42 · 23100 阅读 · 4 评论