赞
踩
双目立体匹配三维重建点云C++
本工程基于网上开源代码进行修改,内容如下:
1.修改为 VS2015 Debug win32 版本,支持利用特征点和 OpenCV 立体匹配算法进行进行三维重建及显示,相关代码需要自行修改,代码中添加了修改注释。
2.工程依赖库为 OpenCV2.4.8,内部已完成 OpenCV 相关配置。
无论电脑中是否配置Opencv
都可以运行。
并且增加了点云保存,可以用MATLAB 显示点云。
一、操作步骤
1.解压后将 Reconstuction3d bin 中的所有 dll 拷贝到C: windows sysWOW64 或者system32
根据电脑版本决定,64 位为 sysWOW64。
2.双击 Reconstuction3d.sln 打开工程,运行后出现结果。
二、程序详解
Reconstuction3d.cpp 为程序主函数
cvFuncs.cpp 为特征点三维重建。
包含SIFT、SURF、FAST 等算法。
cvFuncs2.cpp 为视差图三维重建.包含 BM、SGBM 等算法可以选择两者中的一个进行重建,推荐特征点。
特征点三维重建流程:
特征提取->特征描述->特征匹配->三角测距计算点云->原图像三角剖分->点云贴图显示视差图三维重建流程:
获取稠密视差图->三角测距计算点云->原图像三角剖分->点云贴图显示
关于标定
双目标定推荐MATLAB 手动标定工具箱(MATALB 自动标定精度低)
关于精度
如果要求精度不高(2cm 以上)且相机畸变不大,可以直接在【需要调整参数的位置 1】
输入未校正的图像。
在【需要调整参数的位置 2】修改 focalLenInPixel 为 MATLAB 标定后的 fx, 此时左右相机 fx 及 fy 应该相差不大。
baselineInMM 为基线长度,一般为MTALAB 标定后
的平移向量 T 的第一个参数的绝对值。
如果精度要求较高(1cm 以下)需要输入校正过的图像。
此时较为复杂,首先需要MATLAB 获取双目的标定结果,利用附带的标定校正程序进行图像校正,获取平行校正后的有效焦距 fx,此时左右相机的 fx 相等,为理想的平行式立体视觉。
关于特征点
修改cvFuncs.cpp 开头的 DETECTOR_TYPE、DESCRIPTOR_TYPE、MATCHER_TYPE ,即可调整本程序的特征提取、特征描述、特征匹配算法。
本程序设定描述子匹配的阈值来进行粗筛选, 利用RANSAC 算法获取单应性矩阵后反投影,进行精确筛选。
关于 MATLAB 点云
程序运行之后,会在 Reconstuction3d 目录生成 pointcloud.txt 文件,利用 MATLAB 进行显示, 新建脚本输入以下代码运行即可。
第一种:点显示
clear A=importdata(‘pointcloud.txt’); [IX,IY]=size(A);
x=A(:,1);
y=A(:,1);
y=A(:,2);
z=A(:,3);
plot3(x,y,z,’.’); grid on
第二种:面显示
A = load(‘pointcloud.txt’); %读入数据
%x,y,z 轴坐标
x=A(:,1);
y=A(:,2);
z=A(:,3);
scatter3(x,y,z); %散点图[X,Y,Z]=griddata(x,y,z,linspace(min(x),max(x))’,linspace(min(y),max(y)),‘v4’); %构造坐标点pcolor(X,Y,Z);
shading interp; %伪彩色图contourf(X,Y,Z); %等高线图figure,surf(X,Y,Z); %
相关代码,程序地址:http://lanzouw.top/679698651348.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。