压电薄膜传感器片参数kt33是什么意思?eT33又是什么意思呢

&p&利益相关:本人在某世界五百强企业担任数据工程师。&/p&&p&&br&自大学零基础从市场营销专业,转行到数据分析行业,至今已有近十年的工作经验,我的经历可以写成一本书了。最初是完全零基础小白,当决心转行到数据分析后,每天凌晨四点半起床恶补高数线代,统计学概率论。基础打牢后,又开始疯狂敲代码,撸项目,整日沉迷于编程不能自拔。到后来,成为数据分析的职场新人,不断跳槽,积累经验,升职加薪,最终得到一份梦寐以求的工作,也实现了年薪50万的小目标。&/p&&p&答主当初之所以选择数据分析,是因为随着数据逐渐变得廉价,分析仍然稀缺,高校毕业生数量远远无法满足行业需求。毫无疑问,数据分析师是当今最具发展潜力的职业。入门月薪就已达到8K以上,5年工作经验一般不会低于22K/月,当你做到team leader,规划主导一个项目的时候,基本上就是年薪50万+了。&/p&&p&&br&想成为年薪50万的数据分析师,必须具备以下技能:&br&算法:统计学,高数线代,模型理论等基础知识将是解决任何数据问题的地基。无论多复杂的数据实验以及算法模型,离开他们都无从谈起。&br&编程:数据获取,清洗,处理,挖掘,存储必不可少的工具。同时,熟练的码出code将会为你省出大量的时间和精力。&br&可视化:将编程挖掘到的信息,灵活直观的展现出来,呈现给非数据分析行业人员,为下一步决策提供理论根据。&/p&&p&&br&直至2016年,教育部才批准三所高校开设数据分析相关专业,这意味着如今市场上没有科班出身的数据分析师。不要慌,大家都是依靠自学转行的,可见培养强大的自学能力,对转行来说多么重要。&/p&&p&&b&然而,网上有太多的免费资源,动辄几十个G的网盘分享,然而我们犯的最大的错误是把收集当学习,把信息当知识,于是最后只剩下存得满满的空虚感。&/b&&/p&&p&&b&珍贵的永远是付费的,最大的学习成本永远是时间。免费资料通常内容陈旧,逻辑混乱,学起来无从下手,一筹莫展。所以,当遇到「扫码送史上最全资源」时,一定要注意甄别,毕竟在高速发展的互联网时代,不能用原始方法去学习了。&/b&&/p&&p&&b&给大家分享我学习的思路,按照:理论-编程-实践的顺序来进行,会让你的学习循序渐进,事半功倍。&/b&&/p&&p& Part 1 :理论&/p&&p&理论学起来往往比较枯燥,但若想打下扎实的数理基础,也必须吃得苦中苦。&/p&&p&推荐几本好书:&br&
《深入浅出统计学》《商务与经济统计》《数据挖掘概念与技术》 &br&
这几本书写的都很有趣,安下心来读完后,会形成比较宏观的统计学框架和数理思维,从更高的角度看问题。&br&
此外,BBC纪录片,如数学的故事,统计的乐趣等,都可以在业余时间刷一下,学习娱乐两不误。&/p&&p&学习网站:&br&
可汗学院公开课:概率论
麻省理工毕业生创立,讲课节奏明快,思路清晰,逻辑性强。
Coursera:计算导论
知名的学习网站,内容很多很足。&br&
优达学城:统计学基础
应该是统计学网课中最全的了,包含了抽样分布,假设检验等,讲课风格很有趣,包办了我的统计学入门。&/p&&p&基础理论是未来工作的根基,这句话每行都适用。所以理论万万不可忽视。&/p&&p& Part 2 :编程&/p&&p&尽管有很多编程语言,但是在数据分析行业,主流还是SQL,R,python。SQL主要是存储数据,R和python各有所长,配合使用。&/p&&p&SQL:&br&
《Database Management Systems 3rd Edition》&br&
《数据库原理》&br&
Udemy:数据分析技能速成 Microsoft SQL
&/p&&p&python&R:&br&
《利用PYTHON进行数据分析》与pandas是同一个作者,这本书可以帮你入门numpy,pandas,matplotlib,但是要注意,代码不要看一遍就觉得都会了,动手敲一敲会有不一样的体验。&br&
《统计建模与R软件》 薛毅老师的经典作品,融合了统计与编程。&br&
廖雪峰python
业界大咖,以生动有趣著称,但缺点就是缺少互动性,有问题找不到老师答疑。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-1f97f4336a8cdeceb26c7157_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&963& data-rawheight=&603& class=&origin_image zh-lightbox-thumb& width=&963& data-original=&https://pic2.zhimg.com/50/v2-1f97f4336a8cdeceb26c7157_r.jpg&&&/figure&&p&&br&
优达学城:数据分析
硅谷旗下的产品,在专业性方面毋庸置疑,从基础函数讲解,到如何利用python和R进行数据清洗挖掘,以及两种语言如何配合使用。配有助教24小时指导,用户体验不错。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-8ae628e08c392cc6dcbe3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1418& data-rawheight=&698& class=&origin_image zh-lightbox-thumb& width=&1418& data-original=&https://pic4.zhimg.com/50/v2-8ae628e08c392cc6dcbe3_r.jpg&&&/figure&&p& Part 3 :实践&/p&&p&此时的你已经兼顾了统计思维,数理知识,和数据清洗挖掘,可视化的能力。但是想成为一流的数据分析师,这还是远远不够的。你还需要在大量的项目中积累经验,打磨实际操作能力。&/p&&p&Kaggle
可以观摩大神是怎么撸比赛的地方,会产生为什么世界这么大,而我这么渣的想法。&br&优达学城
优达的亮点之一就是会配上大量的项目进行训练,并有老师逐行审核代码,把你的作品打造成专业水平。&br&无论看别人做过多少遍,不如自己上手挖掘一遍。实践过后,才能实际体会到什么是数据分析。&/p&&p&&b&我的学习心得:&/b&最初深受网上那些「转发赠50G资料」所害,在图书馆刷劣质资源,又枯燥又混乱,差点上演一幕从入门放弃。后来终于意识到,人与人之间的差别在于平台和认知,对于一个志在转行拿高薪的人来说,最宝贵的是时间,付费学习实际上是花钱买时间,花钱买行业最顶尖的知识和技能,看到的世界也就会更远更宽广。&/p&&p&横向对比了好几个在线教育平台,慕课网虽然完全免费,但是课程形式上略有陈旧;网易云课堂和Coursera不愧是知名充电网站,内容丰富,讲课节奏明快,但是作为与名校合作开发的课程,更偏向于学术钻研,而且后续服务欠佳;优达学城顶着硅谷的光环入华,诚意满满,在国内上线第一天,就宣布与优酷、滴滴出行、京东、新浪、谷歌和亚马逊达成人才方面的合作,在招聘时,这些企业将会优先录用通过优达学城纳米学位的用户,对于零基础转行的人来说,明显是不错的平台和跳板。&/p&&p&尽管优达刚入华时,沿袭硅谷的英语授课是不少学习者的屏障,并且网络环境拥堵,但近些年不断努力汉化,课程大部分都推出了双语教学,还有项目考核和代码一对一审阅服务,通过项目练习去模拟数据分析的实战过程,在老师的帮助下提升代码的规范性和简洁性。此外,优达最大的亮点是与名企合作开发的课程,更注重培养工作中解决问题的能力。&/p&&p&优达介于培训和自学之间的中间态,既可以学到来自硅谷的标准数据分析流程和思维,节省大量时间,又给你留了足够的空间发挥和延展,培养强大的自学能力。这两方面,都是想拿高薪必不可少的思维。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-5dae2ff9944d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1424& data-rawheight=&685& class=&origin_image zh-lightbox-thumb& width=&1424& data-original=&https://pic2.zhimg.com/50/v2-5dae2ff9944d_r.jpg&&&/figure&&p&&a href=&//link.zhihu.com/?target=http%3A//t.cn/RmM1uHP& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&课程直达&/a&&/p&&p&具备数据分析的能力后,你还要确定职场方向:&/p&&p&数据分析师:通过分析数据,可视化展示,将结果转化为切实可行的商业方案,为公司的决策提供依据。偏重于数据挖掘与沟通交流。&br&数据工程师:将数据整理,存储,方便其他人查询,主要负责数据库结构,数据建模,质量审核等后端工作。偏重于数据库和编程语言的技能。&br&数据科学家:解决一切数据分析师解决不了的问题。偏重于数学,统计,算法和模型的开发。&/p&&p&所以,在学习阶段,了解自己喜爱的岗位所需技能,有针对性的去学习;在求职阶段,了解自己的特长与优势,选择对应公司的分析团队。&/p&&p&最后送大家一句话:种一棵大树最好在十年前,其次是现在。&/p&
利益相关:本人在某世界五百强企业担任数据工程师。 自大学零基础从市场营销专业,转行到数据分析行业,至今已有近十年的工作经验,我的经历可以写成一本书了。最初是完全零基础小白,当决心转行到数据分析后,每天凌晨四点半起床恶补高数线代,统计学概率…
&p&有很多人问我大保健为啥会被抓,难道骗他们不行么?&/p&&p&&br&&/p&&p&虽然我看过很多顶尖的教程,&/p&&p&既有怎么骗警察的:&/p&&a class=&video-box& href=&//link.zhihu.com/?target=https%3A//www.zhihu.com/video/515008& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic4.zhimg.com/80/v2-3c396e31f5dff42d3ef13_b.jpg& data-lens-id=&515008&&
&img class=&thumbnail& src=&https://pic4.zhimg.com/80/v2-3c396e31f5dff42d3ef13_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/515008&/span&
&/a&&blockquote&(来自 &a href=&//link.zhihu.com/?target=https%3A//weibo.com/mannerproduction& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&微辣Manner&/a&)&/blockquote&&p&&br&&/p&&p&也有怎么骗女朋友的:&/p&&a class=&video-box& href=&//link.zhihu.com/?target=https%3A//www.zhihu.com/video/402112& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic1.zhimg.com/80/v2-b1d9ec1c3dedda41e0f58_b.jpg& data-lens-id=&402112&&
&img class=&thumbnail& src=&https://pic1.zhimg.com/80/v2-b1d9ec1c3dedda41e0f58_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/402112&/span&
&/a&&p&&br&&/p&&p&连我自己都骗过了,但还是被识破了,&/p&&p&可能他们都培训过吧...&/p&&p&&br&&/p&&p&&br&&/p&&p&小馆家已分类收藏:&/p&&p&&b&&a href=&https://www.zhihu.com/collection/& class=&internal&&硬货&/a&&/b&······&b&&a href=&https://www.zhihu.com/collection/& class=&internal&&软货&/a&&/b&······&b&&a href=&https://www.zhihu.com/collection/& class=&internal&&飚车&/a&&/b&······&b&&a href=&https://www.zhihu.com/collection/& class=&internal&&观点&/a&&/b&······&b&&a href=&https://www.zhihu.com/collection/& class=&internal&&其他&/a&&/b&&/p&&p&已推出科普(pi yao)专栏 &b&&a href=&https://zhuanlan.zhihu.com/zh315& class=&internal&&『Yao(谣)』&/a&&/b&&/p&&p&欢迎热心作者投稿,欢迎感兴趣的读者关注它&/p&
有很多人问我大保健为啥会被抓,难道骗他们不行么? 虽然我看过很多顶尖的教程,既有怎么骗警察的:(来自 ) 也有怎么骗女朋友的: 连我自己都骗过了,但还是被识破了,可能他们都培训过吧... 小馆家已分类收藏:············
&figure&&img src=&https://pic3.zhimg.com/v2-70bd75eb1b1aa3fa9e6342_b.jpg& data-rawwidth=&1514& data-rawheight=&722& class=&origin_image zh-lightbox-thumb& width=&1514& data-original=&https://pic3.zhimg.com/v2-70bd75eb1b1aa3fa9e6342_r.jpg&&&/figure&&blockquote&随着机器学习越来越受到公众的关注,很多初学者希望能快速了解机器学习及前沿技术。而今天谷歌上线了基于 TensorFlow 的机器学习速成课程,它包含 40 多项练习、25 节课程以及 15 个小时的紧凑学习内容。谷歌官方描述为机器学习热爱者的自学指南,且课程资料都是中文书写,课程视频都由机器学习技术转述为中文音频。这对于中文读者来说将会有很大的帮助,当然我们也能选择英文语音以更精确地学习内容。此外,据机器之心了解,这曾是谷歌内部培训工程师的课程,有近万名谷歌员工参与并将学到的东西用在产品的优化和增强上。&/blockquote&&p&课程地址:&a href=&https://link.zhihu.com/?target=https%3A//developers.google.cn/machine-learning/crash-course/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&developers.google.cn/ma&/span&&span class=&invisible&&chine-learning/crash-course/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-2cfcac29f52dbd2270baa7fe3a8111e4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&536& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-2cfcac29f52dbd2270baa7fe3a8111e4_r.jpg&&&/figure&&p&按照该课程所述,读者可能需要初级代数知识,如变量与系数、线性方程组和函数曲线等以理解基本的机器学习模型。此外,读者也需要一些 Python 编程经验,但一般只需要最基础的函数定义、列表/字典、循环和条件表达式等。本课程的实现是基于 Python 和 TensorFlow,不过读者在学习前并不需要任何 TensorFlow 知识。 &/p&&p&除了前面所述的两个基本要求外,读者可能还需要准备一些基础知识,当然等真正遇到再去查资料也完全没问题。其实准备工作主要分为数学基础、编程基础和函数库三个部分,我们给各位读者提供机器之心的资源文章合集,以便查阅相关问题。&/p&&p&在数学方面,代数相关的变量、系数、线性方程、对数和 Sigmoid 函数有助于读者了解模型最基本的表达,包括怎么定义的推断过程、如何构建的损失函数以及激活函数等。线性代数相关的矩阵和张量等知识有助于读者理解模型在计算过程中到底代表了什么意思,例如矩阵乘法这种仿射变换在神经网络中代表了神经元的线性组合或全连接。概率论与统计学也是有要求的,不过本课程仅仅需要能知道均值、方差等概念就行。对于微积分,我们只需要了解导数、偏导数和链式法则的基本概念就行,虽然最优化方法需要非常多的数学知识才能明确地推导出流行的优化器表达式,但在基础阶段只需要调用工具就行了。&/p&&p&在 Python 编程与常见第三方库等方面,该课程也只有非常少的要求,掌握基本的操作就行。例如 Python 的列表、字典和元组三大数据结构,还有循环和条件等基本表达式。而需要了解的第三方库也是科学计算方面代表,如 NumPy、Pandas 和 Matplotlib 等。以下是 2017 年机器之心发过的教程,它基本上可以为读者提供足够的学习资料。&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//mp.weixin.qq.com/s%3F__biz%3DMzA3MzI4MjgzMw%3D%3D%26mid%3D%26idx%3D2%26sn%3D753da163e9d4d35e838fcca%26chksm%3D871ac936b06d40f7ecabd2bea325c84%26scene%3D21%23wechat_redirect& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&灵魂追问 | 教程那么多,你……看完了吗?&/a&&/p&&p&&br&&/p&&p&&b&目录&/b&&/p&&p&&b&简介&/b&&/p&&ul&&li&前提条件和准备工作&/li&&/ul&&p&&b&机器学习概念&/b&&/p&&ul&&li&框架处理(15 分钟)机器学习中的监督学习&/li&&li&深入了解机器学习(20 分钟)什么是损失函数,权重和 bias 是什么&/li&&li&降低损失(60 分钟)两种梯度下降,及对学习率的实验&/li&&li&使用 TensorFlow 基本步骤(60 分钟)不能不懂的 TensorFlow&/li&&li&泛化(15 分钟)什么是过拟合,怎样评价一个模型的好坏,把数据集分成测试和训练两部分&/li&&li&训练及测试集(25 分钟)验证把数据集分成两部分的好处&/li&&li&验证(40 分钟)担心过拟合?在测试和训练集外多弄一个验证集&/li&&li&表示法(65 分钟)特征工程,75% 机器学习工程师的时间都在干的事&/li&&li&特征组合(70 分钟)明白什么是特征组合,怎么用 TensorFlow 实现&/li&&li&正则化:简单性(40 分钟)L2 正则化,学习复杂化和普遍化的取舍&/li&&li&逻辑回归(20 分钟)理解逻辑回归,探索损失函数和正则化&/li&&li&分类(90 分钟)评估一个逻辑回归模型的正确性和精度&/li&&li&正则化:稀松性(45 分钟)L2 的其他种类&/li&&li&介绍神经网络(40 分钟)隐藏层,激活函数&/li&&li&训练神经网络(40 分钟)反向传播&/li&&li&多种类神经网络(50 分钟)理解多类分类器问题,Softmax,在 TensorFlow 中实现 Softmax 结果。&/li&&li&嵌入(80 分钟)什么是嵌入,这是干什么的,怎样用好。&/li&&/ul&&p&&b&工程&/b&&/p&&ul&&li&生产 ML 系统(3 分钟)ML 生产中的宽度&/li&&li&静态 vs. 动态训练(7 分钟)静态和动态训练的优缺点&/li&&li&静态 vs. 动态推断(7 分钟)静态和动态推断的优缺点&/li&&li&数据依赖(14 分钟)理解 ML 中的数据依赖&/li&&/ul&&p&&b&生活中实际的 ML 例子&/b&&/p&&ul&&li&预测癌症(5 分钟)&/li&&li&18 世纪文献(5 分钟)&/li&&li&真实世界方针(2 分钟)&/li&&/ul&&p&&b&结论&/b&&/p&&ul&&li&下一步要学习的内容,推荐了 TensorFlow,Google 的课程深度学习,及 Kaggle 比赛等。&/li&&/ul&&p&&b&练习题&/b&&/p&&ul&&li&大部分练习题的数据是用的 California housing data set 。&/li&&li&测试分成三种,编程练习,检查你的理解和 Playground。&/li&&/ul&&p&&b&课程特点&/b&&br&&br&这一机器学习速成课程最大的特点是它有完整的中文资料、中文语音和字幕以及中文测试题,它为机器学习初学者提供了最实用的的资料。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-05c3d0bf2b231fb4d7c6392c3ceecb8c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&184& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-05c3d0bf2b231fb4d7c6392c3ceecb8c_r.jpg&&&/figure&&p&如下所示,该课程提供的课件非常适合于国内初学者:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-eaa5e4900ee5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&797& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-eaa5e4900ee5_r.jpg&&&/figure&&p&如下所示,该课程提供了很多中文练习,包括编程练习和文本理解的选择题,这非常有助于各位读者检验在视频和资料中学习到的知识。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-dbf476eaa83cac_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&945& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-dbf476eaa83cac_r.jpg&&&/figure&&p&如下展示了机器学习术语,这一部分分成全面的介绍了机器学习中的术语的含义,非常好懂。 &/p&&figure&&img src=&https://pic2.zhimg.com/v2-a04ea4e4feb4ea8d077c3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&780& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-a04ea4e4feb4ea8d077c3_r.jpg&&&/figure&&p&最后,该课程还提供了非常多的中文学习资料或技术博客,这些文本资料同样也是扩展读者知识并从原理上学习新技术的重要保证。 &/p&&figure&&img src=&https://pic3.zhimg.com/v2-fbb3cfa65b6d36b319e1e9a2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&814& data-rawheight=&505& class=&origin_image zh-lightbox-thumb& width=&814& data-original=&https://pic3.zhimg.com/v2-fbb3cfa65b6d36b319e1e9a2_r.jpg&&&/figure&&p&&br&&/p&&p&本文为机器之心整理,转载请联系获得授权。&/p&
随着机器学习越来越受到公众的关注,很多初学者希望能快速了解机器学习及前沿技术。而今天谷歌上线了基于 TensorFlow 的机器学习速成课程,它包含 40 多项练习、25 节课程以及 15 个小时的紧凑学习内容。谷歌官方描述为机器学习热爱者的自学指南,且课程资…
&figure&&img src=&https://pic3.zhimg.com/v2-cb65cc6dbe9c37b85d5a4df94c4d9246_b.jpg& data-rawwidth=&633& data-rawheight=&383& class=&origin_image zh-lightbox-thumb& width=&633& data-original=&https://pic3.zhimg.com/v2-cb65cc6dbe9c37b85d5a4df94c4d9246_r.jpg&&&/figure&&p&哈哈,相信大家不管是领取干货资料还是通过百度云发送文档给伙伴,都会碰到一下问题:&/p&&p&你打开的文件已失效;&/p&&p&啊哦,你来晚了,分享的文件已经被取消了,下次要早点哟;&/p&&p&你所打开的链接不存在。&/p&&p&或是你分享的内容可能涉及隐私、侵权&/p&&p&啊哦!链接错误没找到文件,请打开正确的分享链接!&/p&&figure&&img src=&https://pic3.zhimg.com/v2-e2f4b10b49769_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&306& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-e2f4b10b49769_r.jpg&&&/figure&&p&碰到这些问题,很多小伙伴直接的反应就是“算啦”但是今天碰到我,我从技术层面给你解决解决。&/p&&p&1、&b&修改网址&/b&&/p&&p&假设原网盘网址是&a href=&https://link.zhihu.com/?target=http%3A//pan.baidu.com/share/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&pan.baidu.com/share/&/span&&span class=&invisible&&&/span&&/a&&b&linkshareid=76297&&/b&uk=&/p&&p&只需将蓝色部分替换为&b&home?&/b&&/p&&p&即&a href=&https://link.zhihu.com/?target=https%3A//pan.baidu.com/share/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&pan.baidu.com/share/&/span&&span class=&invisible&&&/span&&/a&&b&home?&/b&uk=&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c84fd858c18aadae5f45d2f6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&612& data-rawheight=&434& class=&origin_image zh-lightbox-thumb& width=&612& data-original=&https://pic4.zhimg.com/v2-c84fd858c18aadae5f45d2f6_r.jpg&&&/figure&&p&还有就是这样的&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-bbcbfef0b0c43ea8a7d82e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&429& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-bbcbfef0b0c43ea8a7d82e_r.jpg&&&/figure&&p&这时候在分享者的主页里,我们有可能找到自己想要的文件资源。&/p&&p&如果到了这里还找不到,那么可能是分享者把文件删除了或者移入了我们看不到的隐藏空间,无法下载。&/p&&p&2、&b&胖次&/b&&/p&&p&胖次是“内裤”的意思,是日文パンツ的音译。胖次这个网站收录了大量的失效资源链接。而且其中还有一个最为关键功能:&b&一键解析失效网站,&/b&直接粘贴失效网址便可解析(如下图)&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-439edfce61bbf3f8720152_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&418& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic4.zhimg.com/v2-439edfce61bbf3f8720152_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&这两种方法对于失效网盘链接非常有效,尤其是我们经常需要去找寻一些工具的安装包使用。&/p&&p&&/p&
哈哈,相信大家不管是领取干货资料还是通过百度云发送文档给伙伴,都会碰到一下问题:你打开的文件已失效;啊哦,你来晚了,分享的文件已经被取消了,下次要早点哟;你所打开的链接不存在。或是你分享的内容可能涉及隐私、侵权啊哦!链接错误没找到文件,请…
&h2&&b&1. 总体来讲,找几本靠谱的书,由浅入深,边看边练。&/b&&/h2&&blockquote&我是从去年下半年开始学习Python / ML / CV,利用每天晚上22:00- 01:00的业余时间,每天进行,几乎很少间断。&/blockquote&&h2&&b&2. 以下是我自己训练Python的一些小经验。&/b&&/h2&&p&&b&2.1 基础入门&/b&&/p&&blockquote&当然是因工作需要而学,所以有倾向性,会以Data Analysis或者现在时髦的说法叫Data Science方向为主。&br&&br&01-《a byte of python 中文版》绝对入门级,扫盲,零基础的人都可以看。当时我大概花了三天撸完,照着敲了一遍代码。稍微有点感觉了。&br&&br&02- 看斯坦福的在线教程,入门级。&a href=&//link.zhihu.com/?target=http%3A//cs231n.github.io/python-numpy-tutorial/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Python Numpy Tutorial&/a&英文好的同学可以看看,这个教程我看的不多。主要是因为自己喜欢看纸质书。&br&&br&03-同时继续夯实python语言本身,建议看《Python Cookbook 中文版》,我也时不时的会看&/blockquote&&p&&b&2.2 以上基本概念弄熟练后。接下来看你要做什么了?选个方向。&/b&&/p&&ul&&li&1、&b&Web开发方向&/b&&/li&&/ul&&blockquote&那么建议看简单的框架flask,那么推荐《Flask Web开发:基于Python的Web应用开发实战》。(我只扫一眼目录,因主要方向不在此处)&/blockquote&&ul&&li&2、&b&数据分析方向&/b&&/li&&/ul&&blockquote&建议看《利用Python进行大数据分析》,非常棒!强烈建议看。主要讲Pandas库,讲数据分析。很多金融巨头,用Python进行数据分析。引用大神Kirat的话说,“&b&&i&它正在快速代替主流金融机构中使用的工具和语言,并成为事实上的标准&/i&&/b&”。我花了1个月左右时间,一个字一个字啃完。同时边敲代码。&/blockquote&&ul&&li&3、&b&科学计算方向&/b&&/li&&/ul&&blockquote&建议看《python_sci用python进行科学计算》。&/blockquote&&ul&&li&4、&b&AI的机器学习方向&/b&&/li&&/ul&&blockquote&建议看《Hands-on ML with Scikit-learn and TensorFlow》,还没有中文版,我在看。若有同学需要中文版,可以告知我,我视需求而定,是否将其翻译成中文版。&/blockquote&&ul&&li&5、&b&AI的计算机视觉方向&/b&&/li&&/ul&&blockquote&建议看《Python计算机视觉编程》,我还在看,虽然看得不多。&/blockquote&&ul&&li&6、&b&网络爬虫方向&/b&&/li&&/ul&&blockquote&这里不多作介绍。&/blockquote&&p&&b&2.3
夯实:若有同学对【数据分析方向】感兴趣&/b&&/p&&blockquote&这里强烈推荐Yupeng Jiang博士撰写的《三天搞定Python基本功》,只用三天时间可以了解Python数据分析的广度和所涉及的概念,是诚意之作,十分难得!因原文是用英文写成,给英国伦敦大学学院的本科生、研究生上课用的。我将其翻译成了中文,便于自己将来快速复习用。在征得jiang博士的同意后,分享给大家。链接:&/blockquote&&ul&&li&&a href=&//link.zhihu.com/?target=https%3A//github.com/MurphyWan/Python-first-Practice/blob/master/README.md& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《三天搞定Python基础概念之第一天》Day1&/a&&/li&&li&&a href=&//link.zhihu.com/?target=https%3A//github.com/MurphyWan/Python-first-Practice/blob/master/D2_of_3Day_DoneWithPython.md& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《三天搞定Python基础概念之第二天》Day2&/a&&/li&&li&&a href=&//link.zhihu.com/?target=https%3A//github.com/MurphyWan/Python-first-Practice/blob/master/D3_of_3Day_DoneWithPython.md& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《三天搞定Python基础概念之第三天》 Day3&/a&&/li&&/ul&&p&英文原版可见链接:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&三天搞定Python基本功&/a&&/p&&p&&b&2.4.
进阶:顺着【数据分析】这个方向,把金融类的数据分析搞透彻。&/b&&/p&&blockquote&在看完《利用Python进行数据分析》之后,强烈建议看《Python 金融大数据分析》一书。&/blockquote&&p&&br&&/p&&p&第一次在知乎上回复。说的不好,请见谅。&/p&&p&日晚&/p&
1. 总体来讲,找几本靠谱的书,由浅入深,边看边练。我是从去年下半年开始学习Python / ML / CV,利用每天晚上22:00- 01:00的业余时间,每天进行,几乎很少间断。2. 以下是我自己训练Python的一些小经验。2.1 基础入门当然是因工作需要而学,所以有倾向性,…
&figure&&img src=&https://pic2.zhimg.com/v2-c8f937aad8b49f35dfa41e0d_b.jpg& data-rawwidth=&714& data-rawheight=&246& class=&origin_image zh-lightbox-thumb& width=&714& data-original=&https://pic2.zhimg.com/v2-c8f937aad8b49f35dfa41e0d_r.jpg&&&/figure&&p&这是我在知乎的第一篇文章。前一段时间,做项目研究了一下卡尔曼滤波,并且在项目当中实现了一个物体跟踪的功能,所以,借着新鲜劲儿,本次专栏对卡尔曼滤波进行一次整理。&/p&&h2&卡尔曼滤波是什么&/h2&&p&卡尔曼滤波适用于估计一个动态系统的最优状态。即便是观测到的系统状态参数含有噪声,观测值不准确,卡尔曼滤波也能够完成对状态真实值的最优估计。网上大多数的教程讲到卡尔曼的数学公式推导,会让人很头疼,难以把握其中的主线和思想。所以我参考了国外一位学者的文章,讲述卡尔曼滤波的工作原理,然后编写了一个基于OpenCV的小程序给大家做一下说明。下面的这个视频请大家先直观地看看热闹吧~ &br&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.bzarg.com/p/improving-imu-attitude-estimates-with-velocity-data/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&角度跟踪视频&/a&&br&&/p&&h2&卡尔曼滤波能做什么&/h2&&p&假设我们手头有一辆DIY的移动小车。这辆车的外形是这样的: &br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-5bffc5fc94f025ed0c900b_b.jpg& data-rawwidth=&299& data-rawheight=&172& class=&content_image& width=&299&&&/figure&&br&&p&这辆车可以在荒野移动,为了便于对它进行控制,需要知道它的位置以及移动速度。所以,建立一个向量,用来存储小车的位置和速度 :&/p&&img src=&https://www.zhihu.com/equation?tex=%5Coverrightarrow%7Bx_k%7D%3D%28%5Coverrightarrow%7Bp%7D%2C%5Coverrightarrow%7Bv%7D%29& alt=&\overrightarrow{x_k}=(\overrightarrow{p},\overrightarrow{v})& eeimg=&1&&&br&&p&其实,一个系统的状态有很多,选择最关心的状态来建立这个状态向量是很重要的。例如,状态还有水库里面水位的高低、炼钢厂高炉内的温度、平板电脑上面指尖触碰屏幕的位置等等这些需要持续跟踪的物理量。好了,回归到正题,小车上面安装了GPS传感器,这个传感器的精度是10米。但是如果小车行驶的荒野上面有河流和悬崖的话,10米的范围就太大,很容易掉进去进而无法继续工作。所以,单纯靠GPS的定位是无法满足需求的。另外,如果有人说小车本身接收操控着发送的运动指令,根据车轮所转动过的圈数时能够知道它走了多远,但是方向未知,并且在路上小车打滑车轮空转的现象绝对是不可避免。所以,GPS以及车轮上面电机的码盘等传感器是间接地为我们提供了小车的信息,这些信息包含了很多的和不确定性。如果将所有这些信息综合起来,是否能够通过计算得到我们更想要的准确信息呢?答案是可以的!我们不希望小车在荒野当中这样:&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-90bcf3a4f8bf60fecd87_b.jpg& data-rawwidth=&312& data-rawheight=&268& class=&content_image& width=&312&&&/figure&&br&&h2&卡尔曼滤波的工作原理&/h2&&p&卡尔曼滤波的工作原理主要包括先验估计和后验估计。什么意思,请看下文:&/p&&p&&b&1.先验状态估计&/b&&/p&&p&为了简化我们的例子,假如小车在一条绝对笔直的线路上面行驶,其运动轨迹是确定的,不确定的是小车的速度大小和位置。于是,套路来了:&/p&&p&创建&b&状态变量:&img src=&https://www.zhihu.com/equation?tex=%5Coverrightarrow%7Bx%7D%3D%5Cbegin%7Bbmatrix%7Dp%5C%5Cv%5C%5C+%5Cend%7Bbmatrix%7D& alt=&\overrightarrow{x}=\begin{bmatrix}p\\v\\ \end{bmatrix}& eeimg=&1&&&/b&&/p&&p&更直观地,下图表示的是一个状态空间,横坐标是速度,纵坐标是位置,平面上面的任意一个点就唯一地描述出这个小车的运动状态。&/p&&p&&figure&&img src=&https://pic3.zhimg.com/v2-855696bacd18fd9f498422_b.jpg& data-rawwidth=&305& data-rawheight=&319& class=&content_image& width=&305&&&/figure&卡尔曼滤波器发生作用的前提是小车的速度和位置量在其定义域内具有正态的高斯分布规律。用数学语言来讲,就是每一个变量都是具有一个平均值&img src=&https://www.zhihu.com/equation?tex=%5Cmu& alt=&\mu& eeimg=&1&&(这个值在变量的概率密度函数分布图的最中心位置,代表该数值是最可能发生的)和&img src=&https://www.zhihu.com/equation?tex=%5Csigma%5E2& alt=&\sigma^2& eeimg=&1&&(这个数值代表方差,表示变量的不确定性程度)。那么,一谈到概率统计,我们马上可以想到:相互独立,或者互不相关。即已知其中一个变量的变换规律,我们无法推断出另外一个变量的变化规律。就像下图所示的这样(越亮的区域,表示发生的可能性越高):&/p&&figure&&img src=&https://pic4.zhimg.com/v2-03c15b52093f3cee06acc5e_b.jpg& data-rawwidth=&303& data-rawheight=&271& class=&content_image& width=&303&&&/figure&&br&&p&但是,相互独立的反面就是相关。下图所示的规律一看就明白,速度越大,位移也越大,这种情况下,两个变量相关(其实这种情况是很有可能发生的,因为速度越大的话,可能小车就远离我们,速度越小,表明靠近我们)。那么,通过&a href=&https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Covariance_matrix& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&协方差矩阵\Sigma &/a&就能够将几个变量的相关程度描述清楚。矩阵当中的某一个元素&img src=&https://www.zhihu.com/equation?tex=%5CSigma_%7Bij%7D& alt=&\Sigma_{ij}& eeimg=&1&& 表示的是状态向量的第&img src=&https://www.zhihu.com/equation?tex=i& alt=&i& eeimg=&1&&个元素和第&img src=&https://www.zhihu.com/equation?tex=j& alt=&j& eeimg=&1&&个元素之间的相关程度,&img src=&https://www.zhihu.com/equation?tex=%5CSigma_%7Bij%7D%3DCov%28x_i%2Cx_j%29%3DE%5B%28x_i-%5Cmu_i%29%28x_j-%5Cmu_j%29%5D& alt=&\Sigma_{ij}=Cov(x_i,x_j)=E[(x_i-\mu_i)(x_j-\mu_j)]& eeimg=&1&&。&/p&&p&&figure&&img src=&https://pic3.zhimg.com/v2-d30ff0ae414ca_b.jpg& data-rawwidth=&303& data-rawheight=&278& class=&content_image& width=&303&&&/figure&要注意的是协方差矩阵是一个对称阵。感兴趣的童鞋可以深入研究一下,协方差矩阵的特征值和特征向量所具有的几何意义:&strong&the directions in which the data varies the most.&/strong&啥意思,就是哪个方向变化快,特征向量指哪儿。 &br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-62f7c07aee40f788d9ae_b.jpg& data-rawwidth=&305& data-rawheight=&280& class=&content_image& width=&305&&&/figure&&br&&p&下面的两个链接供大家参考,有兴趣的要好好看看,知识点融会贯通了才觉得有意思!&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//www.quora.com/What-is-an-eigenvector-of-a-covariance-matrix& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&协方差的特征向量是什么&/a&&br&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.visiondummy.com/2014/04/geometric-interpretation-covariance-matrix/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&协方差的几何意义&/a&&br&&/p&&p&&strong&下面是重头戏:数学描述部分:&/strong&&br&&/p&&p&定义: &img src=&https://www.zhihu.com/equation?tex=%5Chat%7Bx%7D_k%3D%5Cbegin%7Bbmatrix%7Dposition%5C%5Cvelocity%5C%5C+%5Cend%7Bbmatrix%7D& alt=&\hat{x}_k=\begin{bmatrix}position\\velocity\\ \end{bmatrix}& eeimg=&1&&,&img src=&https://www.zhihu.com/equation?tex=P_k%3D%5Cbegin%7Bbmatrix%7D%5CSigma_%7Bpp%7D%26%26%5CSigma_%7Bpv%7D%5C%5C%5CSigma_%7Bvp%7D%26%26%5CSigma_%7Bvv%7D%5C%5C%5Cend%7Bbmatrix%7D& alt=&P_k=\begin{bmatrix}\Sigma_{pp}&&\Sigma_{pv}\\\Sigma_{vp}&&\Sigma_{vv}\\\end{bmatrix}& eeimg=&1&&,&img src=&https://www.zhihu.com/equation?tex=%5Coverrightarrow+x_k& alt=&\overrightarrow x_k& eeimg=&1&&是状态向量,&img src=&https://www.zhihu.com/equation?tex=P_k& alt=&P_k& eeimg=&1&&是协方差。&br&&/p&&p&下图描述了一个k-1时刻&img src=&https://www.zhihu.com/equation?tex=%5Coverrightarrow%7Bx%7D_%7Bk-1%7D& alt=&\overrightarrow{x}_{k-1}& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=%5Coverrightarrow%7Bx%7D_k& alt=&\overrightarrow{x}_k& eeimg=&1&&时刻的状态:我们其实是完全有理由根据前一时刻的状态来预测下一时刻的状态,这就是状态更新方程。&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-6f4c0d55c16a_b.jpg& data-rawwidth=&309& data-rawheight=&280& class=&content_image& width=&309&&&/figure&&br&&img src=&https://www.zhihu.com/equation?tex=p_k%3Dp_%7Bk-1%7D%2B%5Cdelta+tv_%7Bk-1%7D& alt=&p_k=p_{k-1}+\delta tv_{k-1}& eeimg=&1&&&br&&img src=&https://www.zhihu.com/equation?tex=v_k%3Dv_%7Bk-1%7D& alt=&v_k=v_{k-1}& eeimg=&1&&&br&&p&于是,习惯性地要写成矩阵的形式:&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Chat%7Bx%7D_k%3D%5Cbegin%7Bbmatrix%7D1%26%26%5Cdelta+t%5C%5C0%26%261+%5Cend%7Bbmatrix%7D%5Chat%7Bx%7D_%7Bk-1%7D%3DF_k%5Chat%7Bx%7D_%7Bk-1%7D%0A& alt=&\hat{x}_k=\begin{bmatrix}1&&\delta t\\0&&1 \end{bmatrix}\hat{x}_{k-1}=F_k\hat{x}_{k-1}
& eeimg=&1&&
(1)&/p&&p&状态向量的更新有了,但是还缺少状态向量之间相关性的更新,也就是协方差矩阵。 &br&&/p&&img src=&https://www.zhihu.com/equation?tex=Cov%28x%29%3D%5CSigma+%0A& alt=&Cov(x)=\Sigma
& eeimg=&1&&&img src=&https://www.zhihu.com/equation?tex=Cov%28Ax%29%3DA%5CSigma+A%5ET& alt=&Cov(Ax)=A\Sigma A^T& eeimg=&1&&&br&&p&结合(1)得到:&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Chat%7Bx%7D_k%3DF_k%5Chat%7Bx%7D_%7Bk-1%7D& alt=&\hat{x}_k=F_k\hat{x}_{k-1}& eeimg=&1&&(先验状态估计向量)&br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%7BP%7D_k%3DF_k+P_%7Bk-1%7DF_k%5ET& alt=&{P}_k=F_k P_{k-1}F_k^T& eeimg=&1&&(先验状态估计协方差矩阵)&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-ae2f57a9b464eaf136db4_b.jpg& data-rawwidth=&306& data-rawheight=&278& class=&content_image& width=&306&&&/figure&&br&&p&&strong&外部确定性影&/strong&响 &/p&&br&&p&到目前为止,我们只是关心系统内部状态的更新,但是如果在外部对系统产生了&strong&确定影响&/strong&,比如:小车的操控者发出一条刹车的指令,我们通过建模该指令,假如小车的加速度为&img src=&https://www.zhihu.com/equation?tex=a& alt=&a& eeimg=&1&&,根据运动学的公式,得到: &/p&&img src=&https://www.zhihu.com/equation?tex=%5Chat%7Bp%7D_k%3Dp_%7Bk-1%7D%2B%5Cdelta+tv_%7Bk-1%7D%2B%5Cfrac%7B1%7D%7B2%7Da%5Cdelta+t%5E2& alt=&\hat{p}_k=p_{k-1}+\delta tv_{k-1}+\frac{1}{2}a\delta t^2& eeimg=&1&&&br&&img src=&https://www.zhihu.com/equation?tex=v_k%3Dv_%7Bk-1%7D%2Ba%5Cdelta+t& alt=&v_k=v_{k-1}+a\delta t& eeimg=&1&&&br&&p& 写成矩阵的形式就是:&br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Chat%7Bx%7D_k%3DF_kx_%7Bk-1%7D%2B%5Cbegin%7Bbmatrix%7D%5Cfrac%7B%5Cdelta+t%5E2%7D%7B2%7D%5C%5C%5Cdelta+t+%5Cend%7Bbmatrix%7Da%3DF_kx_%7Bk-1%7D%2BB_k%5Coverrightarrow%7Bu%7D_k& alt=&\hat{x}_k=F_kx_{k-1}+\begin{bmatrix}\frac{\delta t^2}{2}\\\delta t \end{bmatrix}a=F_kx_{k-1}+B_k\overrightarrow{u}_k& eeimg=&1&&其中,&img src=&https://www.zhihu.com/equation?tex=B_k& alt=&B_k& eeimg=&1&&是控制矩阵,&img src=&https://www.zhihu.com/equation?tex=%5Coverrightarrow%7Bu_k%7D& alt=&\overrightarrow{u_k}& eeimg=&1&&是控制向量。由于本例子当中的控制实际上只包含了加速度,所以该向量包含元素的个数为1。 &br&&strong&外部不确定性影响&/strong&&br&&/p&&p&现实世界往往是不那么好描述清楚的,就是存在不确定的外部影响,会对系统产生不确定的干扰。我们是无法对这些干扰进行准确的跟踪和量化的。所以,除了外界的确定项,还需要考虑不确定干扰项&img src=&https://www.zhihu.com/equation?tex=w_k& alt=&w_k& eeimg=&1&&。&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-37a40cb2eb95d30defedb4_b.jpg& data-rawwidth=&303& data-rawheight=&278& class=&content_image& width=&303&&&/figure&&br&&p&从而,得到最终先验估计的更新方程: &br&&/p&&img src=&https://www.zhihu.com/equation?tex=%5Chat%7Bx%7D_k%3DF_kx_%7Bk-1%7D%2BB_k%5Coverrightarrow%7Bu%7D_k%2Bw_k& alt=&\hat{x}_k=F_kx_{k-1}+B_k\overrightarrow{u}_k+w_k& eeimg=&1&&&br&&p&每一次的状态更新,就是在原来的最优估计的基础上面,下一次的状态落在一个新的高斯分布区域,从坐标系上面看就像是一团云状的集合,最优的估计就在这个云团当中的某一处。所以,我们首先要弄清楚这个云团具有什么样的性质,也就是使用过程激励噪声协方差&img src=&https://www.zhihu.com/equation?tex=Q_k& alt=&Q_k& eeimg=&1&&来描述不确定干扰。注意,&img src=&https://www.zhihu.com/equation?tex=E%28w_k%29%3D0& alt=&E(w_k)=0& eeimg=&1&&。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-c209191ccc193c0716cec6f59da164c8_b.jpg& data-rawwidth=&306& data-rawheight=&283& class=&content_image& width=&306&&&/figure&&br&&figure&&img src=&https://pic1.zhimg.com/v2-64dbce85ebfcbf3cd42e39_b.jpg& data-rawwidth=&302& data-rawheight=&301& class=&content_image& width=&302&&&/figure&&br&&p&到此,先验估计的过程结束,总结一下,形成如下的公式: &br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Chat%7Bx%7D_k%3DF_k%5Chat%7Bx%7D_%7Bk-1%7D%2BB_k%5Coverrightarrow%7Bu%7D_k%2Bw_k& alt=&\hat{x}_k=F_k\hat{x}_{k-1}+B_k\overrightarrow{u}_k+w_k& eeimg=&1&&
(2)&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Chat%7BP%7D_k%3DF_k%5Chat%7BP%7D_%7Bk-1%7DF_k%5ET%2BQ_k& alt=&\hat{P}_k=F_k\hat{P}_{k-1}F_k^T+Q_k& eeimg=&1&&
(3)&br&&/p&&p&&strong&重点来了:&/strong&&br&&strong&先验估计&img src=&https://www.zhihu.com/equation?tex=%5Chat%7Bx%7D_k& alt=&\hat{x}_k& eeimg=&1&&取决于如下三部分:一部分是上一次的最优估计值(也就是上一轮卡尔曼滤波的结果),一部分是确定性的外界影响值,另一部分是环境当中不确定的干扰。先验估计协方差矩阵&img src=&https://www.zhihu.com/equation?tex=P_k%0A& alt=&P_k
& eeimg=&1&&,首先是依据第&img src=&https://www.zhihu.com/equation?tex=k-1%0A& alt=&k-1
& eeimg=&1&&次卡尔曼估计(后验估计)的协方差矩阵进行递推,再与外界在这次更新中可能对系统造成的不确定的影响求和得到。&/strong&&br&&/p&&p&&strong&2.后验估计(量测更新)&/strong&&/p&&p&到此,利用&img src=&https://www.zhihu.com/equation?tex=%5Chat%7Bx%7D_k& alt=&\hat{x}_k& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=P_k%0A& alt=&P_k
& eeimg=&1&&能够对系统进行粗略的跟踪,但是还不完善,因为人们总是不能够完全信任自身的经验,也需要另外的一条途径来纠正潜在发生的错误或者是误差。所以,我们很自然的想到在车身安装各类的传感器,比如速度传感器、位移传感器等等,以这些传感器的反馈作为纠正我们推断的依据。下面看看传感器的量测更新是怎么样对最终的估计产生影响的。下图说明的是状态空间向观测空间的映射。 &br&&strong&在这里需要说明一下,卡尔曼滤波器的观测系统的维数小于等于动态系统的维数,即观测量可以少于动态系统中状态向量所包含的元素个数。&/strong&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-85cc64c5df4dc88ae5cadd_b.jpg& data-rawwidth=&614& data-rawheight=&276& class=&origin_image zh-lightbox-thumb& width=&614& data-original=&https://pic2.zhimg.com/v2-85cc64c5df4dc88ae5cadd_r.jpg&&&/figure&&br&&p&注意,传感器的输出值不一定就是我们创建的状态向量当中的元素,有时候需要进行一下简单的换算。即使是,有可能单位也不对应,所以,需要一个转换。这个转换就是矩阵&img src=&https://www.zhihu.com/equation?tex=H_k& alt=&H_k& eeimg=&1&&,在一些文献当中也被称作状态空间到观测空间的映射矩阵。 &br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-046b89a397edfaf283cccd_b.jpg& data-rawwidth=&612& data-rawheight=&279& class=&origin_image zh-lightbox-thumb& width=&612& data-original=&https://pic3.zhimg.com/v2-046b89a397edfaf283cccd_r.jpg&&&/figure&通过空间映射矩阵,依据我们先验估计值,在量测空间当中,传感器的测量值理想情况下应该是这样的:&br&&img src=&https://www.zhihu.com/equation?tex=%5Coverrightarrow+%5Cmu_%7Bexpected%7D%3DH_k%5Chat+x_k%0A& alt=&\overrightarrow \mu_{expected}=H_k\hat x_k
& eeimg=&1&&&br&&img src=&https://www.zhihu.com/equation?tex=%5CSigma_%7Bexpected%7D%3DH_kP_kH_k%5ET& alt=&\Sigma_{expected}=H_kP_kH_k^T& eeimg=&1&&&br&&p&&b&但是&/b&,传感器对系统某些状态的测量真的准确吗?是不是也会有偏差呢?答案是肯定的。系统在某一个状态下,会推断出一组理想值,在另一个状态下,会有另外一组理想值,而对应时刻传感器的测量值一定是无法和理想值保持完全吻合的。由于测量噪声的存在,不同的系统状态下,测量具有一定误差,呈现高斯分布,但是这个高斯分布的最中心还是当前的测量值。所以,还需要一个观测噪声向量以及观测噪声协方差来衡量测量水平,我们将它们分别命名为&img src=&https://www.zhihu.com/equation?tex=v_k%0A& alt=&v_k
& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=R_k%0A& alt=&R_k
& eeimg=&1&&。下面的两张图说明这一点。 &br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-3166b7caac6dfab_b.jpg& data-rawwidth=&617& data-rawheight=&281& class=&origin_image zh-lightbox-thumb& width=&617& data-original=&https://pic4.zhimg.com/v2-3166b7caac6dfab_r.jpg&&&/figure&&br&&figure&&img src=&https://pic2.zhimg.com/v2-e3ef9edfd39_b.jpg& data-rawwidth=&304& data-rawheight=&280& class=&content_image& width=&304&&&/figure&&br&&img src=&https://www.zhihu.com/equation?tex=%5Coverrightarrow+z_t%3DH_k%5Chat+x_k%2B%5Coverrightarrow+v_k& alt=&\overrightarrow z_t=H_k\hat x_k+\overrightarrow v_k& eeimg=&1&&&br&&p&观测向量&img src=&https://www.zhihu.com/equation?tex=%5Coverrightarrow+%7Bz_k%7D& alt=&\overrightarrow {z_k}& eeimg=&1&&服从高斯分布,并且其平均值认为就是本次的量测值&img src=&https://www.zhihu.com/equation?tex=%28z_1%2Cz_2%29& alt=&(z_1,z_2)& eeimg=&1&&。 &br&下图看到的是两个云团,一个是状态预测值,另一个是观测值。&strong&那么到底哪一个具体的结果才是最好的呢?&/strong&现在需要做的是对这两个结果进行合理的取舍(本质就是加权滤波),通过一种方法完成最终的卡尔曼预测。即:从图中粉红色云团和绿色云团当中找到一个最合适的点。 &br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c0da32b1a270cc84eaa4_b.jpg& data-rawwidth=&308& data-rawheight=&277& class=&content_image& width=&308&&&/figure&&br&&p&问题来了,怎么找? &br&首先来直观理解一下:考察观测向量&img src=&https://www.zhihu.com/equation?tex=%5Coverrightarrow+%7Bz_k%7D& alt=&\overrightarrow {z_k}& eeimg=&1&&和先验估计&img src=&https://www.zhihu.com/equation?tex=%5Chat+x_k& alt=&\hat x_k& eeimg=&1&&:&strong&存在两个事件:事件1传感器的输出是对系统状态真实值的完美测量,丝毫不差;事件2先验状态估计的结果就是系统状态真实值的完美预测,也是丝毫不差。但是大家读到这里心里非常清楚的一点是:两个事件的发生都是概率性的,不能完全相信其中的任何一个!!!!!!!&/strong&&br&&strong&如果我们具有两个事件,如果都发生的话,从直觉或者是理性思维上讲,是不是认定两个事件发生就找到了那个最理想的估计值?好了,抽象一下,得到:两个事件同时发生的可能性越大,我们越相信它!要想考察它们同时发生的可能性,就是将两个事件单独发生的概率相乘。&/strong&&br&&/p&&p&&figure&&img src=&https://pic4.zhimg.com/v2-ed8cbbd988b411d4a70e17a_b.jpg& data-rawwidth=&309& data-rawheight=&280& class=&content_image& width=&309&&&/figure&那么,下一步就是对两个云团进行重叠,找到重叠最亮的点(实际上我们能够把云团看做一帧图像,这帧图像上面的每一个像素具有一个灰度值,灰度值大小代表的是该事件发生在这个点的概率密度),最亮的点,从直觉上面讲,就是以上两种预测准确的最大化可能性。也就是得到了最终的结果。非常神奇的事情是,对两个高斯分布进行乘法运算,得到新的概率分布规律仍然符合高斯分布,然后就取下图当中蓝色曲线峰值对应的横坐标不就是结果了嘛。证明如下: &br&我们考察单随机变量的高斯分布,期望为&img src=&https://www.zhihu.com/equation?tex=%5Cmu& alt=&\mu& eeimg=&1&&,方差为&img src=&https://www.zhihu.com/equation?tex=%5Csigma+%5E2& alt=&\sigma ^2& eeimg=&1&&,概率密度函数为: &br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Cmathcal%7BN%7D%28x%2C%5Cmu%2C%5Csigma%29+%3D%5Cfrac%7B1%7D%7B%5Csigma+%5Csqrt%7B2%5Cpi%7D%7De%5E%7B-%5Cfrac%7B%28x-%5Cmu%29%5E2%7D%7B2%5Csigma%5E2%7D%7D& alt=&\mathcal{N}(x,\mu,\sigma) =\frac{1}{\sigma \sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}& eeimg=&1&&
(4)&br&&/p&&p&如果存在两个这样的高斯分布,只不过期望和方差不同,当两个分布相乘,得到什么结果? &br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-ba2e5b2d615_b.jpg& data-rawwidth=&567& data-rawheight=&364& class=&origin_image zh-lightbox-thumb& width=&567& data-original=&https://pic1.zhimg.com/v2-ba2e5b2d615_r.jpg&&&/figure&&br&&p&是不是下式成立 &br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Cbegin%7Bequation%7D%0A++++%5Cmathcal%7BN%7D%28x%2C%5Cmu_0%2C%5Csigma_0%29%5Ccdot+%5Cmathcal%7BN%7D%28x%2C%5Cmu_1%2C%5Csigma_1%29%5Coverset%7B%3F%7D%7B%3D%7D%5Cmathcal%7BN%7D%28x%2C%5Cmu%5E%7B%27%7D%2C%5Csigma%5E%7B%27%7D%29+%5Cend%7Bequation%7D& alt=&\begin{equation}
\mathcal{N}(x,\mu_0,\sigma_0)\cdot \mathcal{N}(x,\mu_1,\sigma_1)\overset{?}{=}\mathcal{N}(x,\mu^{'},\sigma^{'}) \end{equation}& eeimg=&1&&
(5)&br&&/p&&p&将(4)代入(5),对照(4)的形式,求得:&/p&&img src=&https://www.zhihu.com/equation?tex=%5Cmu%5E%7B%27%7D+%3D%5Cmu_0%2Bk%28%5Cmu_1-+%5Cmu_0%29& alt=&\mu^{'} =\mu_0+k(\mu_1- \mu_0)& eeimg=&1&&&br&&img src=&https://www.zhihu.com/equation?tex=%7B%5Csigma%5E%7B%27%7D%7D%5E2%3Dk%7B%5Csigma_1%7D%5E2%3D%7B%5Csigma_0%7D%5E2%281-k%29& alt=&{\sigma^{'}}^2=k{\sigma_1}^2={\sigma_0}^2(1-k)& eeimg=&1&&&p&其中,&img src=&https://www.zhihu.com/equation?tex=k%3D%5Cfrac%7B%5Csigma_0%5E2%7D%7B%5Csigma_0%5E2%2B%5Csigma_1%5E2%7D& alt=&k=\frac{\sigma_0^2}{\sigma_0^2+\sigma_1^2}& eeimg=&1&&&br&&/p&&p&以上是单变量概率密度函数的计算结果,如果是多变量的,那么,就变成了协方差矩阵的形式: &br&&/p&&img src=&https://www.zhihu.com/equation?tex=K%3D%5CSigma_0%28%5CSigma_0%2B%5CSigma_1%29%5E%7B-1%7D& alt=&K=\Sigma_0(\Sigma_0+\Sigma_1)^{-1}& eeimg=&1&&(6)&br&&img src=&https://www.zhihu.com/equation?tex=%5Coverrightarrow%5Cmu%5E%7B%27%7D%3D%5Coverrightarrow%5Cmu_0%2BK%28%5Coverrightarrow%5Cmu_1-%5Coverrightarrow%5Cmu_0%29& alt=&\overrightarrow\mu^{'}=\overrightarrow\mu_0+K(\overrightarrow\mu_1-\overrightarrow\mu_0)& eeimg=&1&&(7)&br&&img src=&https://www.zhihu.com/equation?tex=%5CSigma%5E%7B%27%7D%3DK%5CSigma_1%3D%5CSigma_0%28I-K%29& alt=&\Sigma^{'}=K\Sigma_1=\Sigma_0(I-K)& eeimg=&1&&(8)&br&&p&K称为&b&卡尔曼增益,&/b&在下一步将会起到非常重要的作用。 好了,马上就要接近真相! &/p&&p&&strong&卡尔曼估计&/strong&&/p&&p&下面就是对传感器的量测结果和根据&img src=&https://www.zhihu.com/equation?tex=k-1& alt=&k-1& eeimg=&1&&时刻预测得到的结果进行融合。(由于刚才的推导是两个单变量,并且处在同一个空间内,下面的推导为了方便起见,我们将先验状态估计对应的结果映射到观测向量空间进行统一的运算) &br&第一个要解决的问题是:(7)和(8)两个式子中那个平均值和方差都对应多少?&br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%28%5Cmu_0%2C%5CSigma_0%29%3D%28H_k%5Chat+x_k%2CH_kP_kH_k%5ET%29& alt=&(\mu_0,\Sigma_0)=(H_k\hat x_k,H_kP_kH_k^T)& eeimg=&1&&(9)&br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%28%5Cmu_1%2C%5CSigma_1%29%3D%28z_k%2CR_k%29& alt=&(\mu_1,\Sigma_1)=(z_k,R_k)& eeimg=&1&&(10)&br&&/p&&p&将(9)和(10)代入(6)、(7)、(8)三个式子,整理得到: &br&&/p&&img src=&https://www.zhihu.com/equation?tex=H_k%5Chat+x_k%5E%7B%27%7D%3DH_k%5Chat+x_k%2BK%28%5Coverrightarrow%7Bz_k%7D-H_k%5Chat+x_k%29& alt=&H_k\hat x_k^{'}=H_k\hat x_k+K(\overrightarrow{z_k}-H_k\hat x_k)& eeimg=&1&&&br&&img src=&https://www.zhihu.com/equation?tex=H_kP_k%5E%7B%27%7DH_k%5ET%3DH_kP_kH_k%5ET-KH_kP_kH_k%5ET& alt=&H_kP_k^{'}H_k^T=H_kP_kH_k^T-KH_kP_kH_k^T& eeimg=&1&&&br&&p&其中卡尔曼增益为:&/p&&img src=&https://www.zhihu.com/equation?tex=K%3DH_kP_kH_k%5ET%28H_kP_kH_k%5ET%2BR_k%29%5E%7B-1%7D& alt=&K=H_kP_kH_k^T(H_kP_kH_k^T+R_k)^{-1}& eeimg=&1&&&br&&p&最后一步,更新结果:&/p&&img src=&https://www.zhihu.com/equation?tex=%5Chat+x_k%5E%7B%27%7D%3D%5Chat+x_k%2BK%5E%7B%27%7D%28%5Coverrightarrow%7Bz_k%7D-H_k%5Chat+x_k%29& alt=&\hat x_k^{'}=\hat x_k+K^{'}(\overrightarrow{z_k}-H_k\hat x_k)& eeimg=&1&&&br&&img src=&https://www.zhihu.com/equation?tex=P_k%5E%7B%27%7D%3DP_k-K%5E%7B%27%7DH_kP_k& alt=&P_k^{'}=P_k-K^{'}H_kP_k& eeimg=&1&&&br&&p&其中,&/p&&img src=&https://www.zhihu.com/equation?tex=K%5E%7B%27%7D%3DP_kH_k%5ET%28H_kP_kH_k%5ET%2BR_k%29%5E%7B-1%7D& alt=&K^{'}=P_kH_k^T(H_kP_kH_k^T+R_k)^{-1}& eeimg=&1&&&br&&p&&img src=&https://www.zhihu.com/equation?tex=%5Chat+x_k%5E%7B%27%7D& alt=&\hat x_k^{'}& eeimg=&1&&&strong&就是第k次卡尔曼预测结果。&img src=&https://www.zhihu.com/equation?tex=P_k%5E%7B%27%7D& alt=&P_k^{'}& eeimg=&1&&是该结果的协方差矩阵。&/strong&&strong&它们都作为下一次先验估计的初始值参与到新的预测当中。总体上来讲,卡尔曼滤波的步骤大致分为两步,第一步是时间更新,也叫作先验估计,第二步是量测更新,也叫作后验估计,而当前的卡尔曼滤波过程的后验估计结果不仅可以作为本次的最终结果,还能够作为下一次的先验估计的初始值。&/strong&下图是卡尔曼滤波的工作流程: &br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-e3d6aedb8a47f548ebaaa6_b.jpg& data-rawwidth=&544& data-rawheight=&660& class=&origin_image zh-lightbox-thumb& width=&544& data-original=&https://pic3.zhimg.com/v2-e3d6aedb8a47f548ebaaa6_r.jpg&&&/figure&&br&&p&对卡尔曼滤波原理的理解,我参考了&a href=&https://link.zhihu.com/?target=http%3A//www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/%23mjx-eqn-gaussequiv& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&这篇文章&/a&,图片取自该文章,该文的图片和公式颜色区分是一大亮点,在此表示对作者的感谢。&br&&/p&&h2&举个栗子&/h2&&p&这部分重点讲解一下利用OpenCV如何实现一个对三维空间内物体的二维平面跟踪。 &br&背景:跟踪一个移动速度大小和方向大致保持不变的物体,检测该物体的传感器是通过对物体拍摄连续帧图像,经过逐个像素的分析计算,得到x、y方向的速度,将两个速度构成一个二维的列向量作为观测向量。 &br&下面看一下OpenCV当中对卡尔曼滤波的支持和提供的接口说明。 &br&&a href=&https://link.zhihu.com/?target=http%3A//docs.opencv.org/2.4/modules/video/doc/motion_analysis_and_object_tracking.html%3Fhighlight%3Dkalman%23const%2520Mat%26%2520KalmanFilter%3A%3Apredict%2528const%2520Mat%26%2520control%2529& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&OpenCV2.4.13-KalmanFilter&/a&&br&下面是参与到卡尔曼滤波的一些数据结构,它们代表的意义在其后面用英文进行了描述。 &br&OpenCV将以下的成员封装在了KalmanFilter当中,我们使用时候,可以直接实例化一个对象,例如:&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&KalmanFilter m_KF;
&/code&&/pre&&/div&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&c1&&//CV_PROP_RW Mat stateP
//!& predicted state (x'(k)): x(k)=A*x(k-1)+B*u(k)&/span&
&span class=&c1&&//CV_PROP_RW Mat stateP
//!& corrected state (x(k)): x(k)=x'(k)+K(k)*(z(k)-H*x'(k))&/span&
&span class=&c1&&//CV_PROP_RW Mat transitionM
//!& state transition matrix (A)&/span&
&span class=&c1&&//CV_PROP_RW Mat controlM
//!& control matrix (B) (not used if there is no control)&/span&
&span class=&c1&&//CV_PROP_RW Mat measurementM
//!& measurement matrix (H)&/span&
&span class=&c1&&//CV_PROP_RW Mat processNoiseC
//!& process noise covariance matrix (Q)&/span&
&span class=&c1&&//CV_PROP_RW Mat measurementNoiseC//!& measurement noise covariance matrix (R)&/span&
&span class=&c1&&//CV_PROP_RW Mat errorCovP
//!& priori error estimate covariance matrix (P'(k)): P'(k)=A*P(k-1)*At + Q)*/&/span&
&span class=&c1&&//CV_PROP_RW M
//!& Kalman gain matrix (K(k)): K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R)&/span&
&span class=&c1&&//CV_PROP_RW Mat errorCovP
//!& posteriori error estimate covariance matrix (P(k)): P(k)=(I-K(k)*H)*P'(k)&/span&
&/code&&/pre&&/div&&p&KalmanFilter类的成员函数具有如下几个:&br&&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&n&&KalmanFilter&/span&
&span class=&n&&init&/span&
&span class=&n&&predict&/span&
&span class=&n&&correct&/span&
&/code&&/pre&&/div&&p&方法很简单,但是需要知道如何使用: &br&程序当中,我单独写了一个类,在我的计算线程(就是获取到量测结果的线程)当中对该类进行实例化并且调用其中的方法。量测结果存放在&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&m_dispacementVector[0] = m_xS
m_dispacementVector[1] = m_yS
&/code&&/pre&&/div&&p&当中。&br&&/p&&p&&strong&步骤一:&/strong&&br&&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&n&&CV_WRAP&/span& &span class=&nf&&KalmanFilter&/span&&span class=&p&&(&/span& &span class=&kt&&int&/span& &span class=&n&&dynamParams&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span& &span class=&n&&measureParams&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span& &span class=&n&&controlParams&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span& &span class=&n&&type&/span& &span class=&o&&=&/span& &span class=&n&&CV_32F&/span& &span class=&p&&);&/span&
&span class=&cm&&/** @brief Re-initializes Kalman filter. The previous content is destroyed.&/span&
&span class=&cm&&
@param dynamParams Dimensionality of the state.&/span&
&span class=&cm&&
@param measureParams Dimensionality of the measurement.&/span&
&span class=&cm&&
@param controlParams Dimensionality of the control vector.&/span&
&span class=&cm&&
@param type Type of the created matrices that should be CV_32F or CV_64F.&/span&
&span class=&cm&&
&/code&&/pre&&/div&&p&在卡尔曼滤波类的构造函数成员列表当中首先告知OpenCV过程状态向量的维度和观测向量的维度:&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&m_KF(4,2,0)
&/code&&/pre&&/div&&p&1状态向量初始化&img src=&https://www.zhihu.com/equation?tex=x_k& alt=&x_k& eeimg=&1&&&/p&&p&我想对物体的位置信息和速度信息进行跟踪,由于是二维的,所以位置信息x、y方向两个变量,&/p&&p&速度信息x、y方向两个变量,从而&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&n&&m_KF&/span&&span class=&p&&.&/span&&span class=&n&&statePre&/span&
&/code&&/pre&&/div&&p&和&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&n&&m_KF&/span&&span class=&p&&.&/span&&span class=&n&&statePost&/span&
&/code&&/pre&&/div&&p&是一个四维列向量。&img src=&https://www.zhihu.com/equation?tex=state%3D%5Cbegin%7Bbmatrix%7Dx%5C%5Cy%5C%5Cv_x%5C%5Cv_y%5Cend%7Bbmatrix%7D& alt=&state=\begin{bmatrix}x\\y\\v_x\\v_y\end{bmatrix}& eeimg=&1&&该向量在初始化时设置为零。&br&&/p&&p&2状态转移矩阵初始化&img src=&https://www.zhihu.com/equation?tex=F_k& alt=&F_k& eeimg=&1&&&br&&/p&&p&在计算机屏幕上面,我自定义了一个该物体的运动空间,具有横纵坐标,后面会看到这个空间。&/p&&p&由于相机的帧率是30fps,所以相邻帧时间间隔&img src=&https://www.zhihu.com/equation?tex=%5Cdelta+t%5Capprox30ms& alt=&\delta t\approx30ms& eeimg=&1&&,被测物体的实际速度大约为10mm/s,&/p&&p&所以在如此短的时间内,该物体能够认为是做匀速直线运动,故得到状态转移方程&br&&/p&&img src=&https://www.zhihu.com/equation?tex=F_k%3D%5Cbegin%7Bbmatrix%7D1%26%260%26%26%5Cdelta+t%26%260%5C%5C0%26%261%26%260%26%26%5Cdelta+t%5C%5C0%26%260%26%261%26%260%5C%5C0%26%260%26%260%26%261%5Cend%7Bbmatrix%7D& alt=&F_k=\begin{bmatrix}1&&0&&\delta t&&0\\0&&1&&0&&\delta t\\0&&0&&1&&0\\0&&0&&0&&1\end{bmatrix}& eeimg=&1&&&br&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&m_KF.transitionMatrix = (Mat_&float&(4, 4) && 1, 0, 0.03, 0,0,1,0,0.03,0,0,1,0,0,0,0,1);
&/code&&/pre&&/div&&p&3过程噪声激励协方差矩阵&img src=&https://www.zhihu.com/equation?tex=Q_k& alt=&Q_k& eeimg=&1&&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&setIdentity(m_KF.processNoiseCov, Scalar::all(1e-5));//Q
&/code&&/pre&&/div&&p&认为过程激励噪声比较弱,并且每个分量相互之间不存在相关系。&br&&/p&&p&4观测矩阵&img src=&https://www.zhihu.com/equation?tex=H_k& alt=&H_k& eeimg=&1&&&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&setIdentity(m_KF.measurementMatrix);
&/code&&/pre&&/div&&p&初始化得到:&/p&&img src=&https://www.zhihu.com/equation?tex=H_k%3D%5Cbegin%7Bbmatrix%7D0%26%260%26%261%26%260%5C%5C0%26%260%26%260%26%261%5Cend%7Bbmatrix%7D& alt=&H_k=\begin{bmatrix}0&&0&&1&&0\\0&&0&&0&&1\end{bmatrix}& eeimg=&1&&&br&&p&由于传感器只是检测到了两个方向的速度,对位移没有检测,所以要将矩阵前两列初始化为0。&br&&/p&&p&5预测估计协方差矩阵&img src=&https://www.zhihu.com/equation?tex=P_k& alt=&P_k& eeimg=&1&&&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&setIdentity(m_KF.errorCovPost, Scalar::all(1));
&/code&&/pre&&/div&&p&初始化为单位阵。&br&&/p&&p&6测量噪声协方差矩阵&img src=&https://www.zhihu.com/equation?tex=R_k& alt=&R_k& eeimg=&1&&&br&&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&n&&setIdentity&/span&&span class=&p&&(&/span&&span class=&n&&m_KF&/span&&span class=&p&&.&/span&&span class=&n&&measurementNoiseCov&/span&&span class=&p&&,&/span& &span class=&n&&Scalar&/span&&span class=&o&&::&/span&&span class=&n&&all&/span&&span class=&p&&(&/span&&span class=&mf&&1e-1&/span&&span class=&p&&));&/span&&span class=&c1&&//R&/span&
&/code&&/pre&&/div&&p&&b&步骤二:&/b&&/p&&p&先验估计&br&&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&n&&m_prediction&/span& &span class=&o&&=&/span& &span class=&n&&m_KF&/span&&span class=&p&&.&/span&&span class=&n&&predict&/span&&span class=&p&&();&/span&
&/code&&/pre&&/div&&p&&b&步骤三:&/b&&br&&/p&&p&后验估计:
首先需要告知卡尔曼滤波器最新的传感器数据:&br&&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&n&&m_dispacementVector&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&m_xSpeed&/span&&span class=&p&&;&/span&
&span class=&n&&m_dispacementVector&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&m_ySpeed&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&n&&m_pKalman&/span&&span class=&o&&-&&/span&&span class=&n&&updateMeasurements&/span&&span class=&p&&(&/span&&span class=&n&&m_dispacementVector&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&kt&&void&/span& &span class=&n&&kalmanFilter&/span&&span class=&o&&::&/span&&span class=&n&&updateMeasurements&/span&&span class=&p&&(&/span&&span class=&kt&&double&/span& &span class=&n&&p&/span&&span class=&p&&[])&/span&
&span class=&p&&{&/span&
&span class=&n&&m_measurement&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&n&&Mat_&/span&&span class=&o&&&&/span&&span class=&kt&&float&/span&&span class=&o&&&&/span&&span class=&p&&(&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&)&/span& &span class=&o&&&&&/span& &span class=&n&&p&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&],&/span& &span class=&n&&p&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&]);&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&接着完成后验估计:&br&&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&n&&m_KF&/span&&span class=&p&&.&/span&&span class=&n&&correct&/span&&span class=&p&&(&/span&&span class=&n&&m_measurement&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&KalmanFilter.h:&br&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#include &QObject&
#include &opencv2/video/tracking.hpp&
#include &opencv2/highgui/highgui.hpp&
class kalmanFilter:public QObject
kalmanFilter();
~kalmanFilter();
void initKalman();
void kalmanPredict();
void updateMeasurements(double p[]);
void kalmamCorrect();
double *returnResult();
void drawArrow(Point start, Point end, Scalar color, int alpha, int len);
KalmanFilter m_KF;
Mat m_postCorrectionS
Mat m_processN
Point2f m_PointC
&/code&&/pre&&/div&&p&KalmanFilter.cpp:&br&&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&cp&&#include&/span& &span class=&cpf&&&kalmanFilter.h&&/span&&span class=&cp&&&/span&
&span class=&cp&&#include&/span& &span class=&cpf&&&iostream&&/span&&span class=&cp&&&/span&
&span class=&cp&&#include&/span& &span class=&cpf&&&fstream&&/span&&span class=&cp&&&/span&
&span class=&c1&&//CV_PROP_RW Mat stateP
//!& predicted state (x'(k)): x(k)=A*x(k-1)+B*u(k)&/span&
&span class=&c1&&//CV_PROP_RW Mat stateP
//!& corrected state (x(k)): x(k)=x'(k)+K(k)*(z(k)-H*x'(k))&/span&
&span class=&c1&&//CV_PROP_RW Mat transitionM
//!& state transition matrix (A)&/span&
&span class=&c1&&//CV_PROP_RW Mat controlM
//!& control matrix (B) (not used if there is no control)&/span&
&span class=&c1&&//CV_PROP_RW Mat measurementM
//!& measurement matrix (H)&/span&
&span class=&c1&&//CV_PROP_RW Mat processNoiseC
//!& process noise covariance matrix (Q)&/span&
&span class=&c1&&//CV_PROP_RW Mat measurementNoiseC//!& measurement noise covariance matrix (R)&/span&
&span class=&c1&&//CV_PROP_RW Mat errorCovP
//!& priori error estimate covariance matrix (P'(k)): P'(k)=A*P(k-1)*At + Q)*/&/span&
&span class=&c1&&//CV_PROP_RW M
//!& Kalman gain matrix (K(k)): K(k)=P'(k)*Ht*inv(H*P'(k)*Ht+R)&/span&
&span class=&c1&&//CV_PROP_RW Mat errorCovP
//!& posteriori error estimate covariance matrix (P(k)): P(k)=(I-K(k)*H)*P'(k)&/span&
&span class=&k&&using&/span& &span class=&k&&namespace&/span& &span class=&n&&cv&/span&&span class=&p&&;&/span&
&span class=&k&&using&/span& &span class=&k&&namespace&/span& &span class=&n&&std&/span&&span class=&p&&;&/span&
&span class=&n&&kalmanFilter&/span&&span class=&o&&::&/span&&span class=&n&&kalmanFilter&/span&&span class=&p&&()&/span&
&span class=&o&&:&/span&&span class=&n&&m_KF&/span&&span class=&p&&(&/span&&span class=&mi&&4&/span&&span class=&p&&,&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&)&/span&
&span class=&p&&,&/span& &span class=&n&&m_state&/span&&span class=&p&&(&/span&&span class=&mi&&4&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&n&&CV_32F&/span&&span class=&p&&)&/span&
&span class=&p&&,&/span& &span class=&n&&m_processNoise&/span&&span class=&p&&(&/span&&span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&n&&CV_32F&/span&&span class=&p&&)&/span&
&span class=&p&&,&/span& &span class=&n&&m_measurement&/span&&span class=&p&&(&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&n&&CV_32F&/span&&span class=&p&&)&/span&
&span class=&p&&,&/span& &span class=&n&&m_img&/span&&span class=&p&&(&/span&&span class=&mi&&300&/span&&span class=&p&&,&/span& &span class=&mi&&300&/span&&span class=&p&&,&/span& &span class=&n&&CV_8UC3&/span&&span class=&p&&)&/span&
&span class=&p&&,&/span& &span class=&n&&m_PointCenter&/span&&span class=&p&&(&/span&&span class=&n&&m_img&/span&&span class=&p&&.&/span&&span class=&n&&cols&/span&&span class=&o&&*&/span&&span class=&mf&&0.5f&/span&&span class=&p&&,&/span& &span class=&n&&m_img&/span&&span class=&p&&.&/span&&span class=&n&&rows&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&m_KF&/span&&span class=&p&&.&/span&&span class=&n&&transitionMatrix&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&n&&Mat_&/span&&span class=&o&&&&/span&&span class=&kt&&float&/span&&span class=&o&&&&/span&&span class=&p&&(&/span&&span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&4&/span&&span class=&p&&)&/span& &span class=&o&&&&&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mf&&0.03&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mf&&0.03&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mi&&1&/span&&span class=&p&&);&/span&&span class=&c1&&//A&/span&
&span class=&n&&setIdentity&/span&&span class=&p&&(&/span&&span class=&n&&m_KF&/span&&span class=&p&&.&/span&&span class=&n&&measurementMatrix&/span&&span class=&p&&);&/span&
&span class=&n&&setIdentity&/span&&span class=&p&&(&/span&&span class=&n&&m_KF&/span&&span class=&p&&.&/span&&span class=&n&&processNoiseCov&/span&&span class=&p&&,&/span& &span class=&n&&Scalar&/span&&span class=&o&&::&/span&&span class=&n&&all&/span&&span class=&p&&(&/span&&span class=&mf&&1e-5&/span&&span class=&p&&));&/span&&span class=&c1&&//Q&/span&
&span class=&n&&setIdentity&/span&&span class=&p&&(&/span&&span class=&n&&m_KF&/span&&span class=&p&&.&/span&&span class=&n&&measurementNoiseCov&/span&&span class=&p&&,&/span& &span class=&n&&Scalar&/span&&span class=&o&&::&/span&&span class=&n&&all&/span&&span class=&p&&(&/span&&span class=&mf&&1e-1&/span&&span class=&p&&));&/span&&span class=&c1&&//R&/span&
&span class=&n&&setIdentity&/span&&span class=&p&&(&/span&&span class=&n&&m_KF&/span&&span class=&p&&.&/span&&span class=&n&&errorCovPost&/span&&span class=&p&&,&/span& &span class=&n&&Scalar&/span&&span class=&o&&::&/span&&span class=&n&&all&/span&&span class=&p&&(&/span&&span class=&mi&&1&/span&&span class=&p&&));&/span&
&span class=&p&&}&/span&
&span class=&n&&kalmanFilter&/span&&span class=&o&&::~&/span&&span class=&n&&kalmanFilter&/span&&span class=&p&&()&/span&
&span class=&p&&{&/span&
&span class=&p&&}&/span&
&span class=&kt&&void&/span& &span class=&n&&kalmanFilter&/span&&span class=&o&&::&/span&&span class=&n&&initKalman&/span&&span class=&p&&()&/span&
&span class=&p&&{&/span&
&span class=&n&&m_state&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&n&&Mat_&/span&&span class=&o&&&&/span&&span class=&kt&&float&/span&&span class=&o&&&&/span&&span class=&p&&(&/span&&span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&)&/span& &span class=&o&&&&&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span&&span class=&mi&&0&/span&&span class=&p&&);&/span&
&span class=&n&&m_KF&/span&&span class=&p&&.&/span&&span class=&n&&statePre&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&n&&Mat_&/span&&span class=&o&&&&/span&&span class=&kt&&float&/span&&span class=&o&&&&/span&&span class=&p&&(&/span&&span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&)&/span& &span class=&o&&&&&/span& &span class=&n&&m_PointCenter&/span&&span class=&p&&.&/span&&span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&n&&m_PointCenter&/span&&span class=&p&&.&/span&&span class=&n&&y&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&);&/span&
&span class=&n&&m_KF&/span&&span class=&p&&.&/span&&span class=&n&&statePost&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&n&&Mat_&/span&&span class=&o&&&&/span&&span class=&kt&&float&/span&&span class=&o&&&&/span&&span class=&p&&(&/span&&span class=&mi&&4&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&)&/span& &span class=&o&&&&&/span& &span class=&n&&m_PointCenter&/span&&span class=&p&&.&/span&&span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&n&&m_PointCenter&/span&&span class=&p&&.&/span&&span class=&n&&y&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&);&/span&
&span class=&n&&m_KF&/span&&span class=&p&&.&/span&&span class=&n&&measurementMatrix&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&n&&Mat_&/span&&span class=&o&&&&/span&&span class=&kt&&float&/span&&span class=&o&&&&}

我要回帖

更多关于 压电写真机调色参数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信