双目立体匹配三维重建点云系统:基于VS2015与OpenCV的立体匹配算法实现及点云保存显示

双目立体匹配三维重建点云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); %

YID:51100679698651348

双目立体匹配


双目立体匹配与三维重建:从开源代码到C++实践

在数字世界的探索中,我们时常需要利用计算机视觉技术来理解、解析乃至重塑三维世界。今天,我们将要探索一个基于双目立体匹配的三维重建项目,利用C++和OpenCV库进行开发。这个项目以开源代码为基础,进行了一些关键修改,使其能够在Windows环境下使用VS2015 Debug win32版本进行编译和运行。

一、准备阶段

  1. 环境准备:首先,我们需要安装Visual Studio 2015,并确保我们拥有支持Debug的win32环境。此版本专门针对我们的目标平台进行了优化,以确保最大的兼容性。

  2. 解压与部署:解压下载的工程包,并将Reconstuction3d\bin目录下的所有dll文件复制到C:\windows\sysWOW64C:\windows\System32。这个步骤是为了确保我们的程序能够找到所有必要的运行时库。

二、程序详解

工程的主体部分位于Reconstuction3d.cpp文件中,这是一个多功能的程序主函数,主要流程包括特征点检测、双目立体匹配和三维重建。以下是这个程序的几个关键点:

  1. 特征点检测:OpenCV库中的特征点检测算法用于捕捉图像中的关键点。这些点将用于后续的匹配过程。在双目立体匹配中,我们需要找到左右两个视角下相同的特征点对,为三维重建提供基础。

  2. 双目立体匹配:一旦我们有了特征点对,就可以使用OpenCV的立体匹配算法来计算视差图。视差图包含了每个点在左右图像中的位置差异信息,是进行三维重建的关键。

  3. 三维重建:有了视差图和两个相机的内外参数(这里我们已经将这些信息提前获得或预计算好),就可以根据三维重建算法计算每个点的空间坐标,形成点云模型。

  4. 点云保存与显示:工程中还增加了点云保存的功能,可以将重建的点云数据保存为特定格式(如PLY或PCD),方便后续使用MATLAB等进行可视化显示。

三、运行与测试

在完成了上述准备后,我们可以开始运行程序了。双击Reconstuction3d.sln打开工程,并开始调试运行。如果一切顺利,我们将在屏幕上看到三维重建的结果,并且可以保存点云数据以供后续分析。

四、代码示例(以C++和OpenCV为例)

// 假设我们有一个已经初始化的OpenCV对象和一个待处理的两幅图像 
// 这只是一个示例的函数原型
std::vector<cv::DMatch> findMatches(const cv::Mat& imageLeft, const cv::Mat& imageRight) {
    // 使用OpenCV中的特征检测器如SIFT、SURF等寻找两幅图像的特征点并计算描述子
    // ... (此处省略特征检测与描述子计算的代码)
    // 使用OpenCV的匹配器对描述子进行匹配并返回匹配结果
    return matchers.match(descriptorsLeft, descriptorsRight);
}

// 实际的三维重建过程会涉及到更复杂的算法和步骤,需要详细的相机参数和点云处理逻辑等...

在这个示例中,我们只展示了特征点匹配的基本步骤,而实际的三维重建过程会涉及到更多的算法和步骤,包括相机参数的获取、视差图的计算、点云的生成和优化等。这些都需要我们在Reconstuction3d.cpp中进行详细编写和实现。

总之,通过这个基于开源代码的项目改造和实践,我们可以在C++和OpenCV的帮助下完成双目立体匹配和三维重建的任务。这不仅仅是一个技术实践的过程,也是一个不断学习和探索的过程。希望这篇文章能给你带来一些启发和帮助!
深度解读看: http://lanzous.cn/679698651348.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值