博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
半稠密直接法求解相机位姿思路
阅读量:4624 次
发布时间:2019-06-09

本文共 947 字,大约阅读时间需要 3 分钟。

半稠密直接法和稀疏直接法求解过程基本上是一样的,只是稀疏直接法提取的是fast关键点,一般是几千个,而半稠密直接法提取的是梯度明显的像素,一般是几万个,这里是提取了一万多个。

所谓的梯度明显的像素,就是像素的灰度值同它周围的像素有明显的区别,这里是拿(v)[u+1]和(v)[u-1],还有(v+1)[u]和(v-1)[u]处的像素的灰度值进行比较的,之前造的边的图像关于像素坐标的导数也是这么求的。
比如设这两个比较值为a,b,如果a*a+b*b>=50,说明u,v处的像素梯度是明显的。
具体程序中
1.主要是在对第一张图片的处理上,for(index==0)
造两个循环,x和y,筛选了一些像素坐标,阈值是10.
定义delta值为灰度的两个比较值的组合
for(int x=10;x<gray.cols-10;x++)
for(int y=10;y<gray.rows-10;y++)
{
Eigen::Vector2d delta(
gray.ptr<uchar>(y)[x+1]-gray.ptr<uchar>(y)[x-1],
gray.ptr<uchar>(y+1)[x]-gray.ptr<uchar>(y-1)[x]
);
如果delta.norm()小于50,就跳出这个循环,这个x,y值就不要了。如果大于等于50,继续循环
再读取x,y对应的深度值,如果深度值为0,这个x,y也不要了。如果不为0,继续。
ushort d=depth.ptr<ushort>(y)[x];
if(d==0)
continue;
这时候满足条件的像素坐标x,y就筛选出来了。求出这些像素坐标的空间点坐标和灰度值,组成测量结构待用。
Eigen::Vector3d p3d=project2Dto3D(x,y,d,fx,fy,cx,cy,depth_scale);
float grayscale=float(gray.ptr<uchar>(y)[x]);
measurements.push_back(Measurement(p3d,grayscale));
用g2o求解的相机位姿。

 

转载于:https://www.cnblogs.com/talugirl/p/7388577.html

你可能感兴趣的文章
219. Insert Node in Sorted Linked List【Naive】
查看>>
CentOS下安装mysql及配置使用
查看>>
Sublime Text3配置Vue 语法
查看>>
验证控件:RegularExpressionValidator
查看>>
hdu1166 线段树单点修改与区间查询
查看>>
asp.net -mvc框架复习(7)-基于MVC搭建用户登录项目框架
查看>>
CSS background-clip 属性
查看>>
python中函数作用域
查看>>
C#版清晰易懂TCP通信原理解析(附demo)
查看>>
系统自带的粒子系统
查看>>
Laravel 框架的主要版本
查看>>
pandas学习笔记 - 常见的数据处理方式
查看>>
云监控中的告警
查看>>
大题的简单解答
查看>>
CSS3复选框动画
查看>>
Base64.java 工具类
查看>>
ExtJS遮罩层Ext.loadMask
查看>>
ArcPy开发教程2-管理地图文档1
查看>>
过滤器的使用
查看>>
软件测试
查看>>