双目立体匹配三维重建点云C++ 本工程基于网上开源代码进行修改,内容如下: 1.修改为 VS2...
本工程名为,是一个基于 OpenCV 2.4.8 实现的双目视觉三维重建系统。基于特征点稀疏重建与基于视差图的稠密重建,适用于不同精度需求与应用场景。工程已适配 Visual Studio 2015(Debug Win32),并内嵌所需 OpenCV 依赖库,具备良好的可移植性与开箱即用特性。系统输出为三维点云数据(),可直接导入 MATLAB 进行可视化,支持点云散点图、曲面重建、等高线等多种显
双目立体匹配三维重建点云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); %
1. 概述
本工程名为 Reconstuction3d,是一个基于 OpenCV 2.4.8 实现的双目视觉三维重建系统。该系统支持两种主流重建模式:基于特征点稀疏重建 与 基于视差图的稠密重建,适用于不同精度需求与应用场景。工程已适配 Visual Studio 2015(Debug Win32),并内嵌所需 OpenCV 依赖库,具备良好的可移植性与开箱即用特性。

系统输出为三维点云数据(pointcloud.txt),可直接导入 MATLAB 进行可视化,支持点云散点图、曲面重建、等高线等多种显示方式。
2. 系统架构与核心模块
整个系统由三个核心模块组成:
- 主控模块(main.cpp):负责程序初始化、参数配置、模式选择与结果调度。
- 特征点重建模块(cvFuncs.cpp):实现基于关键点检测、描述、匹配及三角测量的稀疏三维重建。
- 视差图重建模块(cvFuncs2.cpp):基于 OpenCV 立体匹配算法(如 BM、SGBM)生成稠密视差图,并转换为三维点云。
用户可通过修改全局枚举变量 galgo 在 FEATUREPT(特征点)与 DENSE(稠密视差)之间切换重建策略。
3. 重建流程详解
3.1 特征点三维重建流程(推荐)
该模式适用于对计算效率要求较高、或纹理丰富但无需完整表面重建的场景。

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

流程如下:
- 图像预处理
读取左右相机图像,可选择是否使用经标定校正后的图像(影响重建精度)。
- 特征提取与描述
支持多种经典特征算子(如 SIFT、SURF、FAST 等),通过宏定义DETECTORTYPE、DESCRIPTORTYPE灵活切换。每幅图像生成一组关键点及其描述子。
- 特征匹配与筛选
- 初步匹配采用描述子距离阈值进行粗筛;
- 进一步通过 RANSAC 算法估计单应性矩阵(Homography),剔除误匹配点对;
- 保留高置信度的匹配点用于后续三角测量。
- 三角测距与点云生成
利用相机内参(焦距focalLenInPixel)与外参(基线长度baselineInMM),结合匹配点坐标,通过三角测量原理计算三维空间坐标。
- 点云输出
将重建的三维点坐标写入pointcloud.txt,格式为(x, y, z),每行一个点。
3.2 视差图三维重建流程
该模式适用于需要完整表面信息、对细节还原要求较高的场景,但计算开销较大。

流程如下:
- 立体匹配
使用 OpenCV 提供的块匹配(BM)或半全局匹配(SGBM)算法,生成左右图像间的稠密视差图。
- 深度计算
基于视差值、相机焦距与基线长度,利用公式:
$$
Z = \frac{f \cdot B}{d}
$$
其中 $f$ 为焦距(像素),$B$ 为基线(毫米),$d$ 为视差(像素),计算每个像素的深度。
- 三维坐标反投影
结合图像坐标 $(u, v)$ 与深度 $Z$,通过相机成像模型反投影至世界坐标系,生成稠密点云。
- 点云输出
同样保存为pointcloud.txt,支持后续可视化。
4. 标定与参数配置
4.1 相机标定建议
- 高精度场景(<1cm):
强烈建议使用 MATLAB 双目标定工具箱进行手动标定,获取精确的内参($fx, fy, cx, cy$)、畸变系数及外参(旋转 $R$、平移 $T$)。随后使用标定结果对原始图像进行立体校正(Rectification),确保极线对齐,此时左右相机焦距一致,基线方向与图像横轴平行。
- 低精度场景(>2cm):
可直接使用未校正图像,仅需在代码中配置近似焦距与基线长度。基线长度通常取标定所得平移向量 $T$ 的第一个分量绝对值。
⚠️ 注意:若使用校正图像,则 `focalLenInPixel` 应取校正后有效焦距;若使用原始图像,则需谨慎评估畸变影响。
4.2 关键参数位置
工程中标注了多个“需要调整参数的位置”,主要包括:
- 位置 0:选择重建算法(
FEATURE_PT/DENSE); - 位置 1:指定输入图像路径(是否校正);
- 位置 2:设置
focalLenInPixel与baselineInMM; - 位置 3~5:调整特征匹配阈值、RANSAC 参数、立体匹配窗口大小等。
5. 点云可视化(MATLAB)
程序运行后自动生成 pointcloud.txt。用户可使用以下 MATLAB 脚本进行可视化:
方式一:散点图(适用于稀疏点云)
A = importdata('pointcloud.txt');
x = A(:,1); y = A(:,2); z = A(:,3);
plot3(x, y, z, '.'); grid on; axis equal;
方式二:曲面重建(适用于稠密点云)
A = load('pointcloud.txt');
x = A(:,1); y = A(:,2); z = A(:,3);
scatter3(x, y, z, '.'); hold on;
[X, Y] = meshgrid(linspace(min(x), max(x)), linspace(min(y), max(y)));
Z = griddata(x, y, z, X, Y, 'v4');
surf(X, Y, Z); shading interp;
6. 工程部署说明
- 依赖库:工程已内嵌 OpenCV 2.4.8 的 Debug 版本
.lib与.dll文件。 - 运行环境:需将
Reconstuction3d/bin/下所有.dll文件复制至系统目录:
- 64 位系统 →C:\Windows\SysWOW64
- 32 位系统 →C:\Windows\System32 - 编译运行:直接双击
.sln文件,使用 VS2015 打开并运行即可。
7. 总结
本工程提供了一套完整、可配置、易部署的双目三维重建解决方案,兼顾灵活性与实用性。通过模块化设计,用户可根据实际需求选择重建策略,并通过标定优化提升精度。输出标准化的点云格式,便于后续处理与分析,适用于教学演示、机器人导航、工业检测等多种应用场景。
项目基于开源代码二次开发,保留了良好的扩展性,未来可集成深度学习匹配、多视角融合、实时重建等高级功能。

更多推荐
所有评论(0)