在上一步骤——双目校正的基础上可以很方便的获取视差图。视差即空间中同一点在左右目图像上的水平位置差。

自己凭感觉(不知道对错的)总结了一下,主要分为两大类:基于兴趣点的,不基于兴趣点的。

基于兴趣点的:需要先找到一幅图像中的特征点(也可以是两幅图像中的特征点,基于SIFT特征的匹配即是这种情况,不过对于特征并不唯一的特征点提取方法还是只找一幅图像中的特征点为好),再在另一幅图像中的同一及线上的一定范围内搜索,搜索相似的方法有很多,如:相关度,SAD,SSD等等。

不基于兴趣点的:假定一幅图像中的每一像素点都是兴趣点,再在另一幅图片中找对应像素点。

我的实验

前期:利用H.P Moravec的论文《Robot Spatial Perception by Stereoscopic Vision and 3D Evidence Grids》中的方法。一看就懂的,其中的Moravec兴趣算子是相当相当的古老了,只要把它稍改改就是harris算子。其实Moravec给出的代码中的Moravec算子实现很像Harris。以下是根据自己感觉上的理解编写的Moravec算子MATLAB代码。

function [out top]=HIns(img,rows,cols)%[rows cols]=size(img);
Vp=zeros(rows,cols);
thosd1=100;
thosd2=800;  %高通滤波门限,可调
sqsize=7;
%%%%%%%%%%%%%%%%%%% Moravec算子框移动过程
for i=fix(sqsize/2)+1:sqsize:rows-fix(sqsize/2)for j=fix(sqsize/2)+1:sqsize:cols-fix(sqsize/2)Vlu=0;Vl=0;Vld=0;Vu=0;Vd=0;Vru=0;Vr=0;Vrd=0;for x=-fix(sqsize/2):fix(sqsize/2)-1for y=-fix(sqsize/2):fix(sqsize/2)-1%Vlu=Vlu+(img(i+x,j+y)-img(i+x+1,j+y+1))^2;Vl=Vl+(img(i+x,j+y+1)-img(i+x,j+y))^2;%Vld=Vld+(img(i+x,j+y)-img(i+x+1,j+y-1))^2;% Vu=Vu+(img(i+x,j+y)-img(i+x-1,j+y))^2;% Vd=Vd+(img(i+x,j+y)-img(i+x+1,j+y))^2;% Vru=Vru+(img(i+x,j+y)-img(i+x-1,j+y+1))^2;Vr=Vr+(img(i+x,j+y+1)-img(i+x,j+y))^2;% Vrd=Vrd+(img(i+x,j+y)-img(i+x-1,j+y-1))^2;endend%Vp(i,j)=min([Vl,Vr]);%[Vlu,Vl,Vld,Vu,Vd,Vru,Vr,Vrd]);Vp(i,j)=Vl+Vr;end
endout=zeros(rows,cols);
%%%%%%%%%%%%%%%%%%%%%%%高通滤波过程
top=0; %the max quantity for interest operator
for m=fix(sqsize/2)+sqsize+1:sqsize:rows-(fix(sqsize/2)+sqsize)-1for n=fix(sqsize/2)+sqsize+1:sqsize:cols-(fix(sqsize/2)+sqsize)-1ring=Vp(m+sqsize,n)+Vp(m+sqsize,n+sqsize)+Vp(m+sqsize,n-sqsize)+Vp(m-sqsize,n)+Vp(m-sqsize,n+sqsize)+Vp(m-sqsize,n-sqsize)+Vp(m,n+sqsize)+Vp(m,n-sqsize);out(m,n)=Vp(m,n)*8-ring;if out(m,n)>toptop=out(m,n);endend
end

提取特征点后在另一幅图片中寻找对应的像素点。Moravec用的方法与SSD基本上相似。只是他在应用时利用小窗口内的像素和值作了预处理。并且应用相关公式计算匹配概率。这个不多说了,他的论文一看就懂(大师写的都通俗易懂)。下面是实验结果,上面图像时左图像,其上的黄点是Moravec垂直特征提取的结果;下面的是右图像,蓝色框是根据左图像中的特征点找到的对应匹配点(有很多误匹配,如果不嫌麻烦可以利用ransac进一步去除误匹配)。

根据匹配结果,随便给一组摄像头参数,产生点云图如下:

后期:后期实验时更换了实验方法,主要原因是用以上方法产生的点云图太稀疏,没有足够的说服力,而若沿用以上方法一直做下去产生稠密的点云信息需要扩散,而扩散过程是很慢的,我无法忍受。

首先尝试的是“http://www.shawnlankton.com/2007/12/3d-vision-with-stereo-disparity/”中的方法,这是一种全局的匹配方法。作者将论文《Segment-Based Stereo Matching Using Belief Propogation and a Self-Adapting Dissimilarity Measure》中的方法反过来用了下,效果相当的好,相当有说服力。但要求视差必须足够小,且用一般摄像头拍出来的照片(可能是因为不清晰吧)处理效果相当不给力,放弃了。其生成的视差图如下:

后来发现还是OpenCV的函数cvFindStereoCorrespondenceBM()比较给力啊。使用该函数需要注意设置好窗口大小,我的参数设置如下:

BMState->preFilterSize=43;

BMState->preFilterCap=43;

BMState->SADWindowSize=25;

BMState->minDisparity=0;

BMState->numberOfDisparities=32;

BMState->textureThreshold=10;

BMState->uniquenessRatio=20;

源图片对如下:

根据不同SAD窗口生成视差图如下:

选择(e)的设置,根据标定得到的摄像头参数,根据Q矩阵生成三维点云图。到三维坐标的转换过程实质如下公式,生成的点云图如下图:

z=b*f/d;x=z*xr/f;y=z*yr/f。

附上C与matlab下的常用匹配代码(基于区域的,来自G.D.Hager的讲义)

设置不同的SAD窗口得到的视差图如下:
设置不同的SAD窗口得到的视差图如下:

三维栅格地图构建之二:视差图及点云图相关推荐

  1. 立体栅格地图_三维栅格地图构建之二:视差图及点云图 | 学步园

    在上一步骤--双目校正的基础上可以很方便的获取视差图.视差即空间中同一点在左右目图像上的水平位置差. 自己凭感觉(不知道对错的)总结了一下,主要分为两大类:基于兴趣点的,不基于兴趣点的. 基于兴趣点的 ...

  2. 立体栅格地图_三维栅格地图构建之一:双目系统 | 学步园

    前言:对一般物体(刚体.文物.建筑物)的三维重建通过一个摄像机或几个摄像机(不需要平行)可完成.但在机器人技术中,一般都应用双目平行视觉或三目视觉,目前三目系统应用的比较多.三目即在双目基础上在上方再 ...

  3. 基于栅格地图的路径规划(一)基于Matlab二维、三维栅格地图的构建

    基于栅格地图的路径规划(一)基于Matlab二维.三维栅格地图的构建 前言 1.二维栅格地图的创建 1.1.二维栅格地图构建原理 1.2.二维栅格地图构建例程 2.三维栅格地图的创建 2.1.三维栅格 ...

  4. matlab读取八叉树,基于八叉树表示的三维栅格地图路径规划系统及方法技术方案...

    [技术实现步骤摘要] 基于八叉树表示的三维栅格地图路径规划系统及方法 本专利技术涉及地图路径规划技术,具体涉及基于八叉树表示的三维栅格地图路径规划系统及方法. 技术介绍 随着各项性能的提高,服务机器人 ...

  5. 采用Cartographer、LIO-SAM构建三维点云地图,采用Octomap构建八叉树地图(三维栅格地图)

    采用Cartographer.LIO-SAM构建三维点云地图,采用Octomap构建八叉树地图(三维栅格地图) 采用Cartographer构建三维点云地图 采用的数据集是安装Cartographer ...

  6. 立体栅格地图_双目立体视觉栅格地图构建方法

    双目立体视觉栅格地图构建方法 王轩 ; 叶平 ; 贾庆轩 [期刊名称] <软件> [年 ( 卷 ), 期] 2012(033)011 [摘要] 本文基于立体视觉定位技术 , 提出了基于双目 ...

  7. ORB-SLAM2栅格地图构建

    ORB-SLAM2栅格地图构建 过程 栅格地图的构建是基于稠密点云地图的构建和保存实现的,需要了解可以看我们前面的博客 基于ORB-SLAM2实时构建稠密点云 在点云地图的基础上构建包含占据信息的八叉 ...

  8. 占据栅格地图构建(Occupancy Grid Map)

    移动机器人地图构建问题,主要以gmapping为例,讲解了地图构建的整个流程.看过前面文章的小伙伴肯定都知道,gmapping算法把SLAM问题分解成两个部分,定位问题和地图构建问题.而gmappin ...

  9. 立体栅格地图_更新丨智图栅格数据—彩色版地图,智臻智美,带来更好的业务体验...

    -www.geoq.cn- 智图栅格数据 彩色版地图 更新 -2019Q3- √ 数据内容持续丰富 √ 行政区划保持最新 √ 显示效果体验更佳 壹 数据丰富程度 兴趣点数量由3100万增加至3300万 ...

最新文章

  1. VS2013上利用InstallShield2013LimitedEdition/C#生成安装包
  2. 【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )
  3. 架构整洁之道, 看这一篇就够了!
  4. JS引用类型 -- Array类型
  5. UNIX(多线程):24---哪些STL容器是线程安全的
  6. HDOJ1102 Constructing Roads【最小生成树】-----武科大ACM暑期集训队选拔赛1题
  7. webshell使用方法-防止DDOS脚本-暴力破解-自动劫持root密码并转发密码到邮箱
  8. Unity3D之UGUI基础7:Scrollbar卷动条
  9. 下载安装VS Code以及简单的配置使用
  10. 【Materials Studio学习七】构建石墨烯
  11. Electron学习笔记(一) 配置, 创建, 设置, 监听
  12. 中语言超酷特性 之 --- 泛指(包含证明“白马非马”)
  13. 鸡啄米:C++编程入门系列之三(VS2010的使用介绍)
  14. OpenCV切割图片
  15. 一个简单到令人发指的 ADRCI 工具操作方法
  16. 迅捷画图中套用流程图模板编辑方法介绍
  17. IG-REPORT企业智能报表 测试记录
  18. 黄万里诗九首[引用]
  19. 用matlab画旋转抛物面_基于MATLAB的旋转抛物面天线的几种特性的仿真
  20. 调试JavaScript/VB Script脚本程序(Wscript篇)

热门文章

  1. Boost 第十二章 并发编程
  2. 神木林服务器未能,梦幻西游:175华山剑会神木林,美中不足装备还差一点没凑齐!...
  3. Google ARCore发布
  4. 详解numpy中argsort函数
  5. 【南航操作系统实践】job9
  6. 方舟服务器虚拟内存,方舟如何设置虚拟内存 | 手游网游页游攻略大全
  7. linux脚本怎么定义变量,Linux定义变量脚本分享
  8. 2012虚拟机配置服务器配置,Windows Server 2012 R2 NAP服务器安装与配置03之 NPS服务器DHCP访问控制配置...
  9. android智能手机排行,智能手机性价比排行2015前十名-2015全球安卓智能手机性能排名...
  10. SWUSTOJ #1178 密码翻译