双目三维重建工程 Reconstuction3d

本工程基于网上开源代码进行修改,内容如下:
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); %三维曲面

运行结果示例如下:双目三维重建工程 Reconstuction3d_第1张图片
双目三维重建工程 Reconstuction3d_第2张图片
双目三维重建工程 Reconstuction3d_第3张图片
代码附在我的资源里,可以运行。后面再更新了。

你可能感兴趣的:(算法,python,opencv,java,matlab)