视觉SLAM实践入门——(18)视觉里程计之单层光流法

本文详细介绍了单层光流法的实现过程,包括寻找GFTT角点,使用8x8窗口进行迭代优化,计算误差、雅可比矩阵、H和b,并求解增量方程。代码中针对opencv的光流法进行了平滑处理和局部深度处理。注意到源码中存在一些错误,如名称未声明和缺少引用作用域。此外,还提到了并行计算可能导致的随机错误。文章提供了代码示例和解决编译问题的方法。

单层(稀疏)光流法的过程

1、寻找GFTT角点

2、对于每个角点、每次迭代,使用8x8窗口计算:

    (1)求误差

    (2)求雅可比(源码中多处添加负号,不直观,下面附的代码已经修改为书上公式的直观表达)

    (3)求H、b

    (4)求解增量方程,更新优化变量,重复循环

其中,源码中并没有直接使用某点的像素深度,而是使用2x2窗口进行局部平滑处理后的像素深度。对于opencv的光流法,好像是先对图像进行全局平滑处理,再取像素深度

另外,源码的单层光流法并没有假定8x8窗口的像素都具有相同运动,对于下一节的多层光流法却是假定了相同运动

 

注意事项

 编译本节代码需要使用 opencv4,安装和使用的注意事项参考 https://blog.youkuaiyun.com/floatinglong/article/details/117173740

 

对于下面这种找不到 CV_GRAY2BGR 的错误,原因在于新版的 opencv 修改了它的名字

error: ‘COLOR_GRAY2BGR’ was not declared in this scope

将代码中的 CV_GRAY2BGR 改为 COLOR_GRAY2BGR 即可

 

对于找不到 COLOR_GRAY2BGR 的错误,原因可能在于没有引用作用域,在代码头部添加

using namespace cv;

 

直接运行代码可能会出现错误,提示没有安装 libgtk2.0-dev and pkg-config,使用apt安装,重新对opencv进行配置编译安装即可(删除CMakeCache.txt,重新编译不会花太长时间,因为只是更改某些配置项,不需要全部重新编译)

sudo apt install libgtk2.0-dev pkg-config

 

 

#include <iostream>
#include <string>
using namespace std;

//#include <list>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
using n
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值