2016.2.27 Px4 flow分析

Px4 flow分析

代码地址https://github.com/PX4/Flow

主要来分析最后一个函数compute flow

原版代码的光流算法主要是使用hist直方图算法,这段代码主要可以分成两部分来看,第一部分是生成直方图,第二部分是根据直方图来进行位移向量的计算。由于是光流,那么就是飞机底部的摄像头随时间移动的一个趋势,那么一定是需要至少两幅图的数据,分别为frame1和frame2 。

第一步的j、i的for循环是采样点的循环,之中的jj、ii的循环是对于一个小邻域的采样。采样点是从frame1找的,之后根据采样点的坐标在frame2的-winmin到winmin的一个小矩形种找一个最相似的点,简单来说,就是找到采样点在两幅图的对应位置。

PARAM_BOTTOM_FLOW_FEATURE_THRESHOLD变量来判断对于特征点采样的质量要求,越大越严苛。表示是否当前这个点可以作为计算光流的点。原函数计算了梯度等。

之后找第二张图中一个最相似的点,计算sad(sum
of absolute difference)也就是对于两张图的差异的绝对值的和进行计算,然后作为相似度的衡量,越小越相似。PARAM_BOTTOM_FLOW_VALUE_THRESHOLD则是对于相似度的一个阈值判断,越小越相似,越大越严苛,如果不满足这个条件,说明两张图片几乎找不到对应点,那么就没戏了,接着看下一个采样点吧。

如果很幸运,frame1中找到了可以计算的采样点,而且在frame2中也找到了对应的点,那么可以计算x和y方向的差值,或者说是一个移动向量,分别计算x和y两个方向的移动,这样就能够获得移动的向量,其中两个方向x和y移动的多少则记录在一个直方图的数组中。

所以最终x和y的直方图数组中记录的是所有挑战过两关的英雄点,记录移动的大小和方向。

以上是对于hist的产生,除了hist之外还有个东西,是对应点的移动的数据,也就是所有采样点的移动的方向和大小,dirs和subdirs,dirs记录的是像素级别的移动,subdirs记录的是亚像素级,也就是半个像素点的移动。

有了hist和dirs,那么用hist和dirs的数据代表原来的数据,就不用frame1和frame2了,可以光荣退役了,因为有了更能表示的一种方式——直方图和方向向量。

第一步是一个小参数的判断,是否filter,这个感觉影响不大,效果都差不多,不知道其他人是不是这样。

如果是PARAM_BOTTOM_FLOW_HIST_FILTER,那么就是对于hist的处理,如果不是,那么就是对于dirs和subdirs的计算,比较简单,简简单单的求和然后处以有效的采样点个数就可以了。

最后融合gyro的信息进行调整。

G106group
BUAASCSE

flow.c源代码:

https://github.com/PX4/Flow/blob/master/src/modules/flow/flow.c

时间: 2024-11-14 11:55:50

2016.2.27 Px4 flow分析的相关文章

全国Ⅲ卷理科数学2016-2018年高考分析及2019年高考预测

全国Ⅲ卷理科数学2016-2018年高考分析及2019年高考预测 原文地址:https://www.cnblogs.com/wanghai0666/p/9192661.html

OVS VxLAN Flow 分析 - 每天5分钟玩转 OpenStack(149)

OVS 的数据流向都是由 Flow 规则控制的,今天我们就来分析 VxLAN 的 Flow 规则. 提个醒:这可能是本教程最烧脑的一节,let's rock it ! 下面分析控制节点上的 flow rule,计算节点类似. br-int 的 flow rule br-int 的 rule 看上去虽然多,其实逻辑很简单,br-int 被当作一个二层交换机,其重要的 rule 是下面这条: cookie=0xaaa0e760a7848ec3, duration=52798.625s, table=

2016/1/27 1, File 创建 删除 改名 换路径 2,输出流 不覆盖 换行输入 3,输入流

1, File  创建  删除  改名  换路径 1 package Stream; 2 3 import java.io.File; 4 5 import java.io.IOException; 6 7 public class OutIn { 8 9 /** 10 * 输入输出 11 */ 12 public static void main(String[] args) { 13 File f1 = new File("d:/book.txt"); // 第一种 实例化文件名称

2016.9.27小程序---数据库练习1

1 -- createbbc, 1, 50 2 DROP TABLE bbc; 3 4 5 CREATE INDEX bbc_region ON bbc(region); 6 7 GO 8 -- tabbbc, 1, 50 9 INSERT INTO bbc VALUES ('Afghanistan','South Asia',652225,26000000,NULL); 10 INSERT INTO bbc VALUES ('Albania','Europe',28728,3200000,66

2016.2.27日(开学)学习总结

复习时间:2016.2.26 复习地点:南书院 复习内容:PHP Web程序设计与Ajax技术 知识点: 1)c/s结构与b/s结构的比较 c/s不易于部署,升级困难,同时对客户端的操作系统也有要求: b/s结构响应速度明显不如c/s结构,每次访问(前进或者后退)都会导致页面的刷新. 2)web应用程序与网站 网站侧重于将数据的展示形式,而web应用程序的真正核心功能是对数据库进行处理(例如b/s的管理信息系统) 3)HTTP通信协议是浏览器与web服务器之间通信的语言  浏览器只能解析HTML

angular2 组件之间通讯-使用服务通讯模式 2016.10.27 基于正式版ng2

工作中用到ng2的组件通讯 奈何官方文档言简意赅 没说明白 自己搞明白后 整理后分享下 rxjs 不懂的看这篇文章 讲很详细 http://www.open-open.com/lib/view/open1462525661610.html 以下是服务代码 1 import { Injectable } from '@angular/core'; 2 import {Subject}from"rxjs/Subject"; 3 @Injectable() 4 export class CS

2016.8.27一套简单的题解题报告

一套不错的题,需要相关资料的联系我咯 考试分析: 1.  由于题目的名字加上第一道题没读完时我以为是我最不擅长的treeDP(其实不得不说,树和图上的题我真的是不想写,一般都写不对,上课太不认真,这个弱点要加强训练),我直接跳到了最后一道题,明知考3h还用了30min去分析,不过还是感谢,这30min救了我两道题出来: 这套题的确还是比较简单,后两道题只要认真分析数据都不会有问题,也许是因为暑假切了贪心和递推,我对分析数据比较在行,第三题切完之后还有2h,不过没写高精的我有点慌,打算最后留一点时

【2016.5.27】再见,软件工程,你好,软件工程。

今天是5月27号,软件工程课已经结了一个星期了,后天就是软件工程期末考试的日子了,想着这一个学期的走来,从新奇,到抵触,到接受,到理解,其中的酸甜苦辣,只有自己知道. 今天距离考研还有210天,说实话,如果没有考研,大创,还有一些乱七八糟的比赛的话,我会更加投入到软件工程的学习中来,很可惜,也很无奈.就像水奔流到海不回头一样,我们也没有后悔药可以吃,既然选择,就必须承担起他引发的一切后果. 我的兴趣在于嵌入式,作为一个讲究设计,思考的方向,当时我感觉,软件工程的理论实用性不是那么的强,但是现在,

串_1 2016.4.27

一.串及串匹配 如何在字符串数据中,监测和提取以字符串形式给出的某一局部特性 这类操作都属于串模式匹配(string pattern matching)范畴,简称串匹配 一般地,即: 对基于同一字符表的任何文本串T(|T| = n)和模式串P(|P| = m): 判定T中是否存在某一子串与P相同 若存在(匹配),则报告该子串在T中的起始位置 串的长度n和m本身通常都很大,但相对而言n更大,即满足2 << m << n 比如,若: T = "Now is the time