tag 标签: 算法

相关帖子
相关博文
  • 热度 2
    2016-5-24 14:43
    491 次阅读|
    0 个评论
    随着数博会的临近,2016中国国际电子信息创客大赛暨“云上贵州”大数据商业模式大赛分支赛也进入到了最后的白热化阶段,来自全国各地的2532名参赛选手对4项分支赛的冠军展开了争夺。 最终,来自中国科学院上海技术物理研究所的孙健永、华为技术有限公司的潘丽娟、济南东忠软件有限公司的李静、济南青末商贸有限公司的王龙分别获得PID控制算法大赛、机器视觉TLD算法大赛、H.264视频编码大赛、H5数据获取大赛的一等奖。 PID算法让无人机飞得更高 本次云上贵州大赛PID算法、TLD算法、H.264算法和H5数据获取四大分支赛,光听名字就觉得完全是未来的即视感,其实解释下来,这些分支赛和生活也息息相关。 首先是PID算法大赛,PID算法就是机器自主学习计算算法编辑大赛,这种算法现在应用的最为广泛的领域实在无人机方面,简言之,PID算法就是让无人机变得更加智能的方法。 简单地说,智能PID控制系统能不停修正多旋翼无人机的飞行动作,使得多旋翼无人机最终无限接近设定的高度。 “智能PID控制近几年获得飞速发展,未来智能机器人领域需要大量人才支撑,这次大赛组委会走进校园,让更多的学生了解和关注机器学习,应该讲是一次普及性的教育。”中国科学院上海技术物理研究所副研究员的孙健永表示,他自己同时也报名参加了PID控制算法大赛,凭借出色表现,最后一举夺魁。 TLD算法让智能汽车反应更快 今年的大赛以“数据时代智造未来”为主题,主要关注大数据、智能制造等领域。同样,在算法分支赛的设置上,也专门设置了关于机器学习领域的分支赛。 机器视觉TLD算法大赛就是其中之一。TLD算法是近几年发展比较快的算法,可广泛用于视频目标的抓取、追踪、计数等方面。TLD算法最大的特点就在于能对锁定的目标进行不断地学习,以获取目标最新的外观特征,从而及时完善跟踪,以达到最佳的状态。也就是说,开始时只提供一帧静止的目标图像,但随着目标的不断运动,系统能持续不断地进行探测,获知目标在角度、距离、景深等方面的改变,并实时识别,经过一段时间的学习之后,目标就再也无法躲过。 “摄像机作为机器人的视觉传感器,如何从视场获取的图像信息进行判读,分析,获取特定目标,把非结构化数据结构化,是机器视觉发展的主要方向”,机器视觉TLD算法大赛一等奖获得者潘丽娟表示。 用个不是那么高深的例子再解释下TLD算法的作用,比如现在正在炒得非常火爆的无人汽车,其间的核心技术之一就是计算机对周边情况的采集,运用TLD算法可以让采集变得更精准反应更快,当然这样的无人汽车更受青睐。 H.264让视频小些再小些 同样是关于视频数据处理,但与TLD算法不同的是,H.264视频编码算法则致力于更高效的传输、存储海量视频数据。 随着摄像机被各界广泛应用,特别是天网工程,每个城市都产生海量的视频数据,这些数据因为难以传输,或因存储量太大,而被丢弃。 H.264视频编码算法的优化将解决这些海量视频传输和存储的问题。 “H.264标准的制订正是为适应各种业务增长对于运动图像压缩率的更高要求,并使得编码后的视频数据能够在各种网络环境下传输。在技术上,H.264标准引入了当前视频编码的新技术,包括运动搜索中的宏块大小可变、整数变换、帧内预测等”,视频编码算法大赛一等奖获得者李静补充道。 比如一部大到数GB的视频,如果采用了最优的H.264算法,就有可能被压缩到几百兆乃至几十兆,不仅大幅度提升了视频的传输速度,也大大的节约了存储空间,节约了数据采集的成本。 H5获取的数据很值钱 电子商务已经深刻地改变了我们的生活方式,我们在网店购物时,会留下浏览痕迹。这些信息在营销者的眼里成了挖掘新客户的重要资源。 今年的大赛设置了H5数据获取大赛,主要考察参赛选手在特定时间段内编辑html5网页、利用移动互联网及互联网工具进行网页传播与数据获取的能力,最终根据参赛选手的用户信息获取数量评定名次,这成为了电子商务时代精准营销的基础技能。 “H5数据获取能力对我们商贸公司来说显得尤为重要,是我们与用户建立“精准快”的连接,进行精准的互动导购的重要工具”,H5数据获取大赛一等奖获得者,同时也是济南青末商贸有限公司创始人王龙如此表示。
  • 热度 3
    2015-7-15 15:10
    1185 次阅读|
    2 个评论
    闲的没事,抓了一本书找了一章节关于cordic算法,然后花了一天的时间了解和学习了。 底下会公布一些链接,都是的非常的厉害的人们的杰作。同时理论也非常清晰。足够大 学会和明白。我能所做的就是总结整理提一小部分我觉得需要注意地方。不过这里提供 的就只是一个方便。方便大家学习,也同时记录我学习过程,以便日后查阅。 http://www.cnblogs.com/aikimi7/p/3929592.html http://blog.csdn.net/liyuanbhu/article/details/8458769 这两个是非常好的大神总结出来的结果和经验。 http://wenku.baidu.com/link?url=uYRlMcSF90_XmgYjM8_Jed3UaVoWMyp3dFLDwULXsTIMRoAK3g4o2ilWgwBJjGwVtOPZGJtTuPBvHncF1Vxysj6z4VsRfA6xlAjmHHVvIpO 这个是在介绍cordic算法的概念和联系一些fpga的介绍。 接下来只是将来忘记复习告诉未来的自己需要注意的点。 1. 里面当中Z代表,角度的累加总和, 需要旋转的角度θ中还没有旋转的角度。当 无穷接近于零的时候,则是角度旋转完成的时候。 2.在使用的时候,你可以分配x,y的初始值,然后可以求的相应的cosz,sinz角 度的大小值。 其实很多细节上面链接都面面俱到,我也不多做介绍~ 总之还有很多细节希望大 家补充很深究哈。    
  • 热度 3
    2015-2-28 17:30
    1751 次阅读|
    1 个评论
    Reddit有篇帖子介绍了算法对我们现在生活的重要性,以及哪些算法对现代文明所做贡献最大。如果对算法有所了解,读这篇文章时你可能会问“作者知道算法为何物吗?”,或是“Facebook的‘信息流’(News Feed)算是一种算法吗?”,如果“信息流”是算法,那就可以把所有事物都归结为一种算法。才疏学浅,结合那篇帖子,接下来我试着解释一下算法是什么,又是哪10个算法正在主导我们的世界。 什么是算法?   简而言之,任何定义明确的计算步骤都可称为算法,接受一个或一组值为输入,输出一个或一组值。(来源:homas H. Cormen, Chales E. Leiserson 《算法导论第3版》)   可以这样理解,算法是用来解决特定问题的一系列步骤(不仅计算机需要算法,我们在日常生活中也在使用算法)。算法必须具备如下3个重要特性:   [1] 有穷性。执行有限步骤后,算法必须中止。   [2] 确切性。算法的每个步骤都必须确切定义。   [3] 可行性。特定算法须可以在特定的时间内解决特定问题,   其实,算法虽然广泛应用在计算机领域,但却完全源自数学。实际上,最早的数学算法可追溯到公元前1600年-Babylonians有关求因式分解和平方根的算法。   那么又是哪10个计算机算法造就了我们今天的生活呢?请看下面的表单,排名不分先后: 1. 归并排序(MERGE SORT),快速排序(QUICK SORT)和堆积排序(HEAP SORT)   哪个排序算法效率最高?这要看情况。这也就是我把这3种算法放在一起讲的原因,可能你更常用其中一种,不过它们各有千秋。   归并排序算法,是目前为止最重要的算法之一,是分治法的一个典型应用,由数学家John von Neumann于1945年发明。   快速排序算法,结合了集合划分算法和分治算法,不是很稳定,但在处理随机列阵(AM-based arrays)时效率相当高。   堆积排序,采用优先伫列机制,减少排序时的搜索时间,同样不是很稳定。   与早期的排序算法相比(如冒泡算法),这些算法将排序算法提上了一个大台阶。也多亏了这些算法,才有今天的数据发掘,人工智能,链接分析,以及大部分网页计算工具。 2. 傅立叶变换和快速傅立叶变换   这两种算法简单,但却相当强大,整个数字世界都离不开它们,其功能是实现时间域函数与频率域函数之间的相互转化。能看到这篇文章,也是托这些算法的福。   因特网,WIFI,智能机,座机,电脑,路由器,卫星等几乎所有与计算机相关的设备都或多或少与它们有关。不会这两种算法,你根本不可能拿到电子,计算机或者通信工程学位。(USA) 3.代克思托演算法(Dijkstra‘s algorithm)   可以这样说,如果没有这种算法,因特网肯定没有现在的高效率。只要能以“图”模型表示的问题,都能用这个算法找到“图”中两个节点间的最短距离。   虽然如今有很多更好的方法来解决最短路径问题,但代克思托演算法的稳定性仍无法取代。 4. RSA非对称加密算法   毫不夸张地说,如果没有这个算法对密钥学和网络安全的贡献,如今因特网的地位可能就不会如此之高。现在的网络毫无安全感,但遇到钱相关的问题时我们必需要保证有足够的安全感,如果你觉得网络不安全,肯定不会傻乎乎地在网页上输入自己的yinhangka信息。   RSA算法,密钥学领域最牛叉的算法之一,由RSA公司的三位创始人提出,奠定了当今的密钥研究领域。用这个算法解决的问题简单又复杂:保证安全的情况下,如何在独立平台和用户之间分享密钥。 5. 哈希安全算法(Secure Hash Algorithm)   确切地说,这不是一种算法,而是一组加密哈希函数,由美国国家标准技术研究所首先提出。无论是你的应用商店,电子邮件和杀毒软件,还是浏览器等等,都使用这种算法来保证你正常下载,以及是否被“中间人攻击”,或者“网络钓鱼”。 6. 整数质因子分解算法(Integer factorization)   这其实是一个数学算法,不过已经广泛应用与计算机领域。如果没有这个算法,加密信息也不会如此安全。通过一系列步骤将,它可以将一个合成数分解成不可再分的数因子。   很多加密协议都采用了这个算法,就比如刚提到的RSA算法。 7. 链接分析算法(Link Analysis)   在因特网时代,不同入口间关系的分析至关重要。从搜索引擎和社交网站,到市场分析工具,都在不遗余力地寻找因特网的正真构造。   链接分析算法一直是这个领域最让人费解的算法之一,实现方式不一,而且其本身的特性让每个实现方式的算法发生异化,不过基本原理却很相似。   链接分析算法的机制其实很简单:你可以用矩阵表示一幅“图“,形成本征值问题。本征值问题可以帮助你分析这个“图”的结构,以及每个节点的权重。这个算法于1976年由Gabriel Pinski和Francis Narin提出。   谁会用这个算法呢?Google的网页排名,Facebook向你发送信息流时(所以信息流不是算法,而是算法的结果),Google+和Facebook的好友推荐功能,LinkedIn的工作推荐,Youtube的视频推荐,等等。   普遍认为Google是首先使用这类算法的机构,不过其实早在1996年(Google问世2年前)李彦宏就创建的“RankDex”小型搜索引擎就使用了这个思路。而Hyper Search搜索算法建立者马西莫·马奇奥里也曾使用过类似的算法。这两个人都后来都成为了Google历史上的传奇人物。 8. 比例微积分算法(Proportional Integral Derivative Algorithm)   飞机,汽车,电视,手机,卫星,工厂和机器人等等事物中都有这个算法的身影。   简单来讲,这个算法主要是通过“控制回路反馈机制”,减小预设输出信号与真实输出信号间的误差。只要需要信号处理,或电子系统来控制自动化机械,液压和加热系统,都需要用到这个算个法。   没有它,就没有现代文明。 9. 数据压缩算法   数据压缩算法有很多种,哪种最好?这要取决于应用方向,压缩mp3,JPEG和MPEG-2文件都不一样。   哪里能见到它们?不仅仅是文件夹中的压缩文件。你正在看的这个网页就是使用数据压缩算法将信息下载到你的电脑上。除文字外,游戏,视频,音乐,数据储存,云计算等等都是。它让各种系统更轻松,效率更高。 10. 随机数生成算法   到如今,计算机还没有办法生成“正真的”随机数,但伪随机数生成算法就足够了。这些算法在许多领域都有应用,如网络连接,加密技术,安全哈希算法,网络游戏,人工智能,以及问题分析中的条件初始化。   这个表单并不完整,很多与我们密切相关的算法都没有提到,如机器学习和矩阵乘法。另外,知识有限,如有批漏,还望指正。
  • 2013-11-28 21:57
    1505 次阅读|
    0 个评论
           记得在做测温仪校准台的时候,在做到用 PID 算法控制温度的时候,对于 PID 算法的理解的过程很难受也很纠结,尽管有凤舞天和 tomsu 两位大师在旁边指导还是费了不少时间和精力去理解、领悟和调试。后来另外一个同事需要做高频加热设备的温度控制,也需要用到 PID 算法对温度的控制,因为这位同事是今年刚毕业的大学生,在学校主要是学软件,基本上没有什么硬件基础,所以她对整个温度控制很难理解和领悟,对 PWM 的理解刚开始总是很难精确,所以在她做温控的过程更加的纠结和痛苦,同事耗费的时间、精力和人力(需要在旁边指导的同事)也更大。并且她的经历跟我的经历是重复的,在我经历过一遍之后她又按照我走过的经历再经历一遍,这种重复的工作对公司来说是一种很严重的人力资源的浪费。对于一个公司来说,人力资源是最宝贵的一种资源。        而在工控行业, PID 算法是软件控制所常用的一种算法,所以对于我们嵌入式组来说,基本上是需要每个人都会用的。那么我们就必须要找到一种方法既能降低学习成本,又能统一软件,降低维护成本,而且还简单、易学、易用。所以,凤舞天建议我先在 msOS 的基础上添加一个 PID 算法库的试用实例,面向对象的,把算法都封装在底层,用户只需要调节相对应的门限值和系数就行。        那么我们来介绍一下 PID 算法库的分层。        msOS 是采用分层的,整个系统分为 App 和 System 两个目录: 而 System 是系统库。我们把 PID 库添加在 System 目录下,以实现真正的库封装。 在 PID 目录下,包含 Pid.c 和 Pid.h 两个文件。 首先我们从 PID 库的应用开始入手。我们把用户根据实际情况需要调整的参数做成界面菜单放在 event.c 文件中。用户可以根据特定需求来更改目标值 TargetPointer 和获取当前值 CurrentPointer ;也可以根据控制过程所需要的控制曲线来定 P 、 I 、 D 引入的门限值;还可以设置运算过程中 P 、 I 、 D 的系数和积分处理的模式,用户只需要对此进行注册即可。同时需要对在底层运算后传上来的结果进行怎样的处理在 static void Mycallback( int data) 中进行控制。 那么该怎样去调节这些参数就得需要我们了解 PID 的原理和物理意义了。 其实关于 PID 算法的文章网上很多,可基本上都是基于数学模型讲解的,很难理解也很难运用,后来凤舞天也写了一篇《 PID 算法》,深入浅出,比较通俗易懂。而作者结合具体项目的实践,和对 PID 算法理论的理解,简单总结了一下: P 是根据测量值和目标值的误差来决定的负反馈的大小。 P 的取得公式: P= 系数 * (目标值 - 当前值)。但是如果一开始就引入负反馈,很有可能达不到目标值,所以需要设定引入负反馈的门限值。而在引入负反馈门限值之前,如果(目标值 - 当前值)大于负反馈引入门限值应当全速加热;如果(目标值 - 当前值)小于负反馈引入门限值应当全速减。 I 就是积分,也就是极限误差。当目标值和当前值很接近的时候,如果继续只根据负反馈来调节,那么有可能与目标值产生误差值,而达不到目标值,所以这时候需要引入一个趋势与负反馈相同的期望值来消除这个误差。把这些误差累加起来正向反馈给结果来抑制负反馈,在正负反馈的共同作用下当前值逐渐逼近目标值。 D 是为了防止在当前值在 P 和 I 的正负反馈作用下出现过冲或者还没达到目标值的情况下更快速的稳定下来而引入的。所以 D 的门限值不宜太高,应该取比较接近目标值的门限,这样可以减小当前值的振荡,使其更快速的稳定。 接下来我们来分析分析 PID 算法库的底层。 首先是定义一个 PID 的结构体: 然后通过注册方式来获取应用层给不同参数的赋值。 在获取了参数之后,就开始 PID 运算。 PID 的运算原理就是前面我们所提到的。在这里我们使用 systemtick 每个 10ms 调用一次,来确保实时、稳定的控温。   在这个 PID 运算中,我们为了让计算结果更能符合控制逻辑的曲线分布,提供了三种积分模式: LineMode (线性模式)、 TwoRootMode (开二次方根号模式)、 ThreeRootMode (开三次方根号模式)。 关于这三种积分模式,作者以测温仪校准台为基础(校准台的发热体是氮化硅)做了三组测试并获取了数据绘制成曲线图来做分析。 在这三组测试中,我们设目标温度都为 800 度,负反馈门限、负反馈系数、积分门限、微分门限都相同,取积分模式和积分系数不相同。在积分线性模式下积分系数为 0.02 ,二次根号和三次根号积分模式下,积分系数为 1 。 在线性积分系数远小于开根号的积分系数的情况下,其稳定的波形还是没有开根号的平滑,稳定。 此图为线性积分模式在引入积分和微分后的温度趋于稳定过程的 PWM 输出。可以看到,在 PWM 输出稳定之前还会有一个小的波峰。这个波峰的幅度大小就取决于积分系数的大小。                                   而这两个图是积分模式取开二次方和三次方根号在引入积分和微分后的温度趋于稳定过程 PWM 的输出。可以看出即使积分系数为 1 ,开根号的次方数越多,在 PWM 输出稳定之前,它的曲线越平滑。
  • 热度 6
    2012-11-19 10:10
    1025 次阅读|
    5 个评论
    字符识别是一个有趣的问题,你在写字板上写下需要识别的字符,然后就是算法大显身手了,这里的主要办法在于模板的匹配,其实很多的算法都是基于这样的一种方法,而且这种方法在大多数情况下是十分实用的,当然如果你编程实现过类似的算法或者是功能,你可能会说这种办法不是那么的给力,不是那么的有效,常常会出错,是的,的确是的。 但是还有一点,就是我在最近发现的,其实就算是模板的匹配这种方法,其模板的选择也是很有讲究的,不是简单的选取,当然,不反对简单的选取,但是这样子的效果确实不怎么样,所以就算是模板,也需要认真的考虑,怎样的模板才是最好的呢?就我看来,最好的模板有一定的适应能力,而不是一个“偏执狂”,在一般的意义上的模板,也就是我之前编程匹配的时候使用的那种,是对于位置极其敏感的,这种模板有它自己的好处,那就是对于十分标准的输入,它可以做到几乎不出错的判断,这正是我们所需要的,但是,别忘了,这是在十分标准的输入的情况下,在手写这种情况下,怎么办呢?没有办法,几乎全是错误,那叫一个惨不忍睹啊。所以,你制作模板的时候用的是标准的字符,而你给出识别的内容时,却是完全变了样子的东西,你说你是不是特别不够意思呢? 所以,在以前我并没有意识到这个问题,还一味苛求二进制的大脑进行复杂的多维的复杂思考,真是有点不靠谱,好在前两天网上看到一个办法,也是模板匹配,突然觉得很有意思,试了一下,效果还真的很不错! 所以说,很多的时候,不是程序写的有问题,是写的很有问题,根本的不去改变,那就啥也改变不了。 好了,废话不多说了,上方法吧,我的测试环境你可能没有听说过,不过没关系,就是java语言,只要有算法,走到哪里都不怕,这句话真是越来越有感触了。 这次的模板是基于一种统计的办法做出来的,也不能说和位置没有关系,在模板匹配这种方法中,和位置无关这句话基本就是扯淡。至少个人感觉是如此。 好了,这里主要的就是描述一下这种算法,至于具体的代码,就不是难事了,在一幅存在字符的图片中,我们现在讲的是只有一个字符的图片中,当然,有很多的字符也是可以的,只不过在分割的时候比较的痛苦,也不是难事,其实就是一些循环语句上的判断,然后进行一些数学的运算,然后给出边界,然后进行分别的识别,这里讲的是一个字符,首先是定出这个字符的边界,便于精细的处理,这个边界非常重要,如果没有这个边界,很多的噪声是会产生出来影响的,所以这一步必不可少。 其次是进行画方格,画方格干啥呢?主要是为了后面的分片的统计,写到这里有些读者应该明白我后面要干啥了,这里分的是5×5的方格,其实可以更加的精细,但是并不建议去画超过9×9的方格,因为我们的字符的区域毕竟是有限的,而且这样子也是需要一定的程序运行的时间的,而且模板的规模和所需的存储的空间也会随之增大,所以这样看来,5×5的确是可以了,有一点需要提前声明,我给的这个模板的方法不是能够达到100%的正确的识别率的,所以如果你所要求的是万无一失,我建议你就不用在往下看了,之前的时间的浪费很不好意思。 好了,分好了空间,我们开始进行统计,对于每一块方格,其中有很多的点,就是像素点,首先你需要能够读取到图像的确定的一个位置的像素值,也就是颜色,这之前最好进行一下图像的二值化处理,而由于这里是用于手写识别,所以提供的背景为白色,然后写的字就是黑色的,所以比较的好处理,就相当于直接得到的就是二值化的图像了,何为二值化,不就是图像中存在的像素点只有两种吗?恩,如果你的应用环境有类似的情景,比如只有黄色和红色,那么也不用处理,然后我们统计在每一个方块中出现的字符的对应的颜色值的数量,在我这里,就是黑点的数量,然后这个数量和这个方块中的总的点的数量有一个比值,我们把这个比值记录下来,这样子,对所有的25个方块进行统计,然后把这些数据存在程序中的一个数组中,好了,大部分的工作都完成了,下面进行识别啦!激动人心和见证奇迹的一刻终于到来了!  
相关资源
广告