chore: initial commit — import worldmodel workspace (plans/, research/)

This commit is contained in:
gaojie
2026-05-20 21:43:57 +08:00
commit bec8a9a4a3
98 changed files with 44128 additions and 0 deletions
+977
View File
@@ -0,0 +1,977 @@
# 摄像头方案对应的GitHub开源项目
## 📋 研究概述
本文档整理了与各类摄像头方案对应的GitHub成熟开源项目,提供完整的软件工具链支持。
**研究范围**GitHub Stars > 500的活跃项目
**更新时间**2026-05-16
---
## 一、单目相机开源项目
### 1.1 COLMAP ⭐⭐⭐⭐⭐
**GitHub**: https://github.com/colmap/colmap
**Stars**: ~7,000
**语言**: C++
**许可证**: BSD-3-Clause
#### 项目简介
COLMAP是最成熟的单目SfMStructure-from-Motion)和MVSMulti-View Stereo)系统,被学术界和工业界广泛使用。
```yaml
核心功能:
- 特征提取与匹配
- 增量式SfM重建
- 稠密MVS重建
- 网格生成
支持相机:
- 所有单目相机
- 鱼眼镜头
- 全景相机
优势:
- 鲁棒性强
- 精度高
- 文档完善
- GUI + CLI
适用场景:
- 照片建模
- 文化遗产数字化
- 影视特效
```
#### 使用示例
```bash
# 完整重建流程
# 1. 特征提取
colmap feature_extractor \
--database_path database.db \
--image_path images/ \
--ImageReader.camera_model PINHOLE \
--ImageReader.single_camera 1
# 2. 特征匹配
colmap exhaustive_matcher \
--database_path database.db \
--SiftMatching.guided_matching 1
# 3. 稀疏重建
colmap mapper \
--database_path database.db \
--image_path images/ \
--output_path sparse/
# 4. 图像去畸变
colmap image_undistorter \
--image_path images/ \
--input_path sparse/0 \
--output_path dense/ \
--output_type COLMAP
# 5. 稠密重建
colmap patch_match_stereo \
--workspace_path dense/ \
--workspace_format COLMAP \
--PatchMatchStereo.geom_consistency true
# 6. 点云融合
colmap stereo_fusion \
--workspace_path dense/ \
--workspace_format COLMAP \
--input_type geometric \
--output_path dense/fused.ply
# 7. Mesh生成
colmap poisson_mesher \
--input_path dense/fused.ply \
--output_path dense/meshed.ply
```
#### Python接口
```python
# pycolmap - Python绑定
import pycolmap
# 运行SfM
reconstruction = pycolmap.incremental_mapping(
database_path="database.db",
image_path="images/",
output_path="sparse/"
)
# 访问重建结果
for image_id, image in reconstruction.images.items():
print(f"Image {image_id}: {image.name}")
print(f"Camera pose: {image.cam_from_world}")
```
---
### 1.2 OpenMVG ⭐⭐⭐⭐
**GitHub**: https://github.com/openMVG/openMVG
**Stars**: ~5,500
**语言**: C++
**许可证**: MPL-2.0
#### 项目简介
OpenMVGOpen Multiple View Geometry)是另一个强大的SfM库,强调模块化和可扩展性。
```yaml
核心功能:
- 多种SfM算法
- 增量式/全局式重建
- 相机标定
- 特征匹配
优势:
- 模块化设计
- 算法多样
- 易于扩展
- 教学友好
与COLMAP对比:
- 更模块化
- 算法选择多
- 速度稍慢
- 精度相当
```
#### 使用示例
```bash
# OpenMVG pipeline
# 1. 图像列表
openMVG_main_SfMInit_ImageListing \
-i images/ \
-o matches/ \
-d sensor_width_database.txt
# 2. 特征提取
openMVG_main_ComputeFeatures \
-i matches/sfm_data.json \
-o matches/ \
-m SIFT
# 3. 特征匹配
openMVG_main_ComputeMatches \
-i matches/sfm_data.json \
-o matches/
# 4. 增量式SfM
openMVG_main_IncrementalSfM \
-i matches/sfm_data.json \
-m matches/ \
-o reconstruction/
# 5. 导出为COLMAP格式
openMVG_main_openMVG2COLMAP \
-i reconstruction/sfm_data.bin \
-o colmap/
```
---
### 1.3 Meshroom ⭐⭐⭐⭐
**GitHub**: https://github.com/alicevision/Meshroom
**Stars**: ~11,000
**语言**: Python/C++
**许可证**: MPL-2.0
#### 项目简介
Meshroom是基于AliceVision的开源3D重建软件,提供完整的GUI界面,零代码操作。
```yaml
核心功能:
- 全自动3D重建
- 可视化节点编辑器
- 实时预览
- 纹理映射
优势:
- 完全免费
- GUI友好
- 质量高
- 社区活跃
适用场景:
- 非技术用户
- 快速原型
- 教学演示
- 艺术创作
```
#### 使用方法
```bash
# 1. 下载安装
# https://github.com/alicevision/Meshroom/releases
# 2. 启动GUI
./Meshroom
# 3. 拖拽图片到界面
# 4. 点击"Start"自动重建
# 5. 导出OBJ/FBX模型
# 命令行模式
meshroom_batch \
--input images/ \
--output output/ \
--save output/project.mg
```
---
## 二、双目相机开源项目
### 2.1 ORB-SLAM3 ⭐⭐⭐⭐⭐
**GitHub**: https://github.com/UZ-SLAMLab/ORB_SLAM3
**Stars**: ~6,000
**语言**: C++
**许可证**: GPLv3
#### 项目简介
ORB-SLAM3是最先进的视觉SLAM系统,支持单目、双目、RGB-D和IMU融合。
```yaml
核心功能:
- 实时SLAM
- 回环检测
- 重定位
- 地图保存/加载
- 多地图管理
支持传感器:
- 单目相机
- 双目相机
- RGB-D相机
- 单目+IMU
- 双目+IMU
优势:
- 精度最高
- 鲁棒性强
- 实时性好
- 学术标准
适用场景:
- 机器人导航
- AR/VR
- 自动驾驶
- 无人机
```
#### 使用示例
```bash
# 编译
cd ORB_SLAM3
chmod +x build.sh
./build.sh
# 双目相机运行
./Examples/Stereo/stereo_euroc \
Vocabulary/ORBvoc.txt \
Examples/Stereo/EuRoC.yaml \
dataset/MH01 \
Examples/Stereo/EuRoC_TimeStamps/MH01.txt \
dataset-MH01_stereo
# 双目+IMU运行
./Examples/Stereo-Inertial/stereo_inertial_euroc \
Vocabulary/ORBvoc.txt \
Examples/Stereo-Inertial/EuRoC.yaml \
dataset/MH01 \
Examples/Stereo-Inertial/EuRoC_TimeStamps/MH01.txt \
dataset-MH01_stereoi
```
#### Python绑定
```python
# 使用orbslam3_python
import orbslam3
# 初始化
slam = orbslam3.System(
vocab_file="Vocabulary/ORBvoc.txt",
settings_file="Examples/Stereo/EuRoC.yaml",
sensor_type=orbslam3.Sensor.STEREO
)
# 处理帧
for left_img, right_img, timestamp in stereo_stream:
pose = slam.process_image_stereo(
left_img, right_img, timestamp
)
if pose is not None:
print(f"Camera pose: {pose}")
# 保存地图
slam.save_map("map.bin")
```
---
### 2.2 OpenCV Stereo ⭐⭐⭐⭐⭐
**GitHub**: https://github.com/opencv/opencv
**Stars**: ~77,000
**语言**: C++/Python
**许可证**: Apache 2.0
#### 项目简介
OpenCV提供了完整的双目视觉工具链,从标定到深度计算。
```yaml
核心模块:
- calib3d: 相机标定
- stereo: 立体匹配
- 3d: 点云处理
算法支持:
- StereoBM: 块匹配
- StereoSGBM: 半全局匹配
- StereoBeliefPropagation: 置信传播
- StereoConstantSpaceBP: 恒定空间BP
优势:
- 文档完善
- 社区庞大
- 跨平台
- 性能优化
```
#### 完整示例
```python
import cv2
import numpy as np
class StereoVision:
"""双目视觉系统"""
def __init__(self, calib_file):
# 加载标定参数
calib = np.load(calib_file)
self.K_left = calib['K_left']
self.dist_left = calib['dist_left']
self.K_right = calib['K_right']
self.dist_right = calib['dist_right']
self.R = calib['R']
self.T = calib['T']
# 计算校正映射
self.R_left, self.R_right, self.P_left, self.P_right, self.Q, \
self.roi_left, self.roi_right = cv2.stereoRectify(
self.K_left, self.dist_left,
self.K_right, self.dist_right,
(1280, 720), self.R, self.T,
alpha=0
)
self.map_left_x, self.map_left_y = cv2.initUndistortRectifyMap(
self.K_left, self.dist_left, self.R_left,
self.P_left, (1280, 720), cv2.CV_32FC1
)
self.map_right_x, self.map_right_y = cv2.initUndistortRectifyMap(
self.K_right, self.dist_right, self.R_right,
self.P_right, (1280, 720), cv2.CV_32FC1
)
# 创建立体匹配器
self.stereo = cv2.StereoSGBM_create(
minDisparity=0,
numDisparities=128,
blockSize=5,
P1=8 * 3 * 5**2,
P2=32 * 3 * 5**2,
disp12MaxDiff=1,
uniquenessRatio=10,
speckleWindowSize=100,
speckleRange=32,
mode=cv2.STEREO_SGBM_MODE_SGBM_3WAY
)
def compute_depth(self, left_img, right_img):
"""计算深度图"""
# 校正
left_rect = cv2.remap(
left_img, self.map_left_x, self.map_left_y,
cv2.INTER_LINEAR
)
right_rect = cv2.remap(
right_img, self.map_right_x, self.map_right_y,
cv2.INTER_LINEAR
)
# 立体匹配
disparity = self.stereo.compute(
left_rect, right_rect
).astype(np.float32) / 16.0
# 视差转深度
depth = cv2.reprojectImageTo3D(disparity, self.Q)
return depth, disparity
def get_pointcloud(self, left_img, right_img):
"""生成点云"""
depth, disparity = self.compute_depth(left_img, right_img)
# 过滤无效点
mask = (disparity > 0) & (disparity < 128)
points = depth[mask]
colors = left_img[mask] / 255.0
return points, colors
# 使用
stereo = StereoVision('stereo_calib.npz')
depth, disparity = stereo.compute_depth(left_img, right_img)
points, colors = stereo.get_pointcloud(left_img, right_img)
```
---
### 2.3 libelas ⭐⭐⭐
**GitHub**: https://github.com/jlowenz/libelas
**Stars**: ~300
**语言**: C++
**许可证**: GPLv3
#### 项目简介
ELASEfficient Large-Scale Stereo)是一个高效的双目立体匹配库。
```yaml
核心特点:
- 速度快
- 精度高
- 内存效率高
- 适合大图像
优势:
- 实时性能
- 边缘保持
- 鲁棒性好
适用场景:
- 自动驾驶
- 机器人
- 实时应用
```
---
## 三、深度相机(RGB-D)开源项目
### 3.1 Azure Kinect SDK ⭐⭐⭐⭐⭐
**GitHub**: https://github.com/microsoft/Azure-Kinect-Sensor-SDK
**Stars**: ~1,500
**语言**: C/C++
**许可证**: MIT
#### 项目简介
Microsoft官方的Azure Kinect开发套件,提供完整的硬件访问接口。
```yaml
核心功能:
- RGB相机访问
- 深度相机访问
- IMU数据读取
- 多机同步
- 骨骼追踪
支持平台:
- Windows
- Linux
- ROS
优势:
- 官方支持
- 文档完善
- 性能优化
- 示例丰富
```
#### 使用示例
```c
// C API
#include <k4a/k4a.h>
int main()
{
// 打开设备
k4a_device_t device = NULL;
k4a_device_open(0, &device);
// 配置
k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
config.color_format = K4A_IMAGE_FORMAT_COLOR_BGRA32;
config.color_resolution = K4A_COLOR_RESOLUTION_1080P;
config.depth_mode = K4A_DEPTH_MODE_NFOV_UNBINNED;
config.camera_fps = K4A_FRAMES_PER_SECOND_30;
// 启动相机
k4a_device_start_cameras(device, &config);
// 采集帧
k4a_capture_t capture = NULL;
k4a_device_get_capture(device, &capture, K4A_WAIT_INFINITE);
// 获取图像
k4a_image_t color_image = k4a_capture_get_color_image(capture);
k4a_image_t depth_image = k4a_capture_get_depth_image(capture);
// 处理...
// 释放
k4a_image_release(color_image);
k4a_image_release(depth_image);
k4a_capture_release(capture);
k4a_device_stop_cameras(device);
k4a_device_close(device);
return 0;
}
```
#### Python绑定
```python
# pyk4a - Python包装
from pyk4a import PyK4A, Config
# 配置
config = Config(
color_resolution=PyK4A.ColorResolution.RES_1080P,
depth_mode=PyK4A.DepthMode.NFOV_UNBINNED,
camera_fps=PyK4A.FPS.FPS_30,
synchronized_images_only=True
)
# 启动
k4a = PyK4A(config=config)
k4a.start()
# 采集
while True:
capture = k4a.get_capture()
if capture.color is not None and capture.depth is not None:
rgb = capture.color
depth = capture.depth
# 处理RGB和深度
process_frame(rgb, depth)
k4a.stop()
```
---
### 3.2 librealsense ⭐⭐⭐⭐⭐
**GitHub**: https://github.com/IntelRealSense/librealsense
**Stars**: ~7,500
**语言**: C++/Python
**许可证**: Apache 2.0
#### 项目简介
Intel RealSense官方SDK,支持全系列RealSense相机。
```yaml
支持设备:
- D400系列(结构光)
- D500系列(结构光)
- L500系列(LiDAR
- T200系列(追踪)
核心功能:
- 深度流
- RGB流
- IMU数据
- 点云生成
- 后处理滤波
优势:
- 跨平台
- Python/C++/C#
- ROS集成
- 实时性能
```
#### Python示例
```python
import pyrealsense2 as rs
import numpy as np
class RealSenseCamera:
"""RealSense相机封装"""
def __init__(self):
# 创建pipeline
self.pipeline = rs.pipeline()
self.config = rs.config()
# 配置流
self.config.enable_stream(
rs.stream.depth, 640, 480, rs.format.z16, 30
)
self.config.enable_stream(
rs.stream.color, 1920, 1080, rs.format.bgr8, 30
)
# 启动
self.profile = self.pipeline.start(self.config)
# 获取内参
depth_stream = self.profile.get_stream(rs.stream.depth)
self.intrinsics = depth_stream.as_video_stream_profile().get_intrinsics()
# 创建对齐对象
self.align = rs.align(rs.stream.color)
# 后处理滤波器
self.decimation = rs.decimation_filter()
self.spatial = rs.spatial_filter()
self.temporal = rs.temporal_filter()
self.hole_filling = rs.hole_filling_filter()
def get_frames(self):
"""获取对齐的RGB-D帧"""
# 等待帧
frames = self.pipeline.wait_for_frames()
# 对齐到RGB
aligned_frames = self.align.process(frames)
# 获取帧
depth_frame = aligned_frames.get_depth_frame()
color_frame = aligned_frames.get_color_frame()
if not depth_frame or not color_frame:
return None, None
# 深度后处理
depth_frame = self.decimation.process(depth_frame)
depth_frame = self.spatial.process(depth_frame)
depth_frame = self.temporal.process(depth_frame)
depth_frame = self.hole_filling.process(depth_frame)
# 转换为numpy
depth_image = np.asanyarray(depth_frame.get_data())
color_image = np.asanyarray(color_frame.get_data())
return color_image, depth_image
def get_pointcloud(self):
"""生成点云"""
frames = self.pipeline.wait_for_frames()
aligned_frames = self.align.process(frames)
depth_frame = aligned_frames.get_depth_frame()
color_frame = aligned_frames.get_color_frame()
# 创建点云
pc = rs.pointcloud()
pc.map_to(color_frame)
points = pc.calculate(depth_frame)
# 导出
vertices = np.asanyarray(points.get_vertices())
texcoords = np.asanyarray(points.get_texture_coordinates())
return vertices, texcoords
def stop(self):
self.pipeline.stop()
# 使用
camera = RealSenseCamera()
while True:
rgb, depth = camera.get_frames()
if rgb is not None:
# 处理
pass
camera.stop()
```
---
### 3.3 Open3D ⭐⭐⭐⭐⭐
**GitHub**: https://github.com/isl-org/Open3D
**Stars**: ~11,000
**语言**: C++/Python
**许可证**: MIT
#### 项目简介
Open3D是一个现代化的3D数据处理库,完美支持RGB-D数据。
```yaml
核心功能:
- 点云处理
- 网格处理
- RGB-D集成
- SLAM
- 可视化
支持设备:
- Azure Kinect
- RealSense
- 通用RGB-D
优势:
- API简洁
- 性能优秀
- 文档完善
- 可视化强大
```
#### RGB-D SLAM示例
```python
import open3d as o3d
import numpy as np
class RGBD_SLAM:
"""基于Open3D的RGB-D SLAM"""
def __init__(self, intrinsics):
self.intrinsics = o3d.camera.PinholeCameraIntrinsic(
width=intrinsics['width'],
height=intrinsics['height'],
fx=intrinsics['fx'],
fy=intrinsics['fy'],
cx=intrinsics['cx'],
cy=intrinsics['cy']
)
self.volume = o3d.pipelines.integration.ScalableTSDFVolume(
voxel_length=0.01,
sdf_trunc=0.04,
color_type=o3d.pipelines.integration.TSDFVolumeColorType.RGB8
)
self.poses = []
self.current_pose = np.eye(4)
def process_frame(self, rgb, depth):
"""处理RGB-D帧"""
# 创建RGB-D图像
rgbd = o3d.geometry.RGBDImage.create_from_color_and_depth(
o3d.geometry.Image(rgb),
o3d.geometry.Image(depth),
depth_scale=1000.0,
depth_trunc=3.0,
convert_rgb_to_intensity=False
)
# 如果是第一帧
if len(self.poses) == 0:
self.poses.append(self.current_pose)
self.volume.integrate(
rgbd, self.intrinsics, np.linalg.inv(self.current_pose)
)
return self.current_pose
# 里程计估计
option = o3d.pipelines.odometry.OdometryOption()
odo_init = np.eye(4)
[success, trans, info] = o3d.pipelines.odometry.compute_rgbd_odometry(
rgbd, self.prev_rgbd,
self.intrinsics, odo_init,
o3d.pipelines.odometry.RGBDOdometryJacobianFromHybridTerm(),
option
)
if success:
# 更新位姿
self.current_pose = self.current_pose @ trans
self.poses.append(self.current_pose.copy())
# 集成到TSDF
self.volume.integrate(
rgbd, self.intrinsics, np.linalg.inv(self.current_pose)
)
self.prev_rgbd = rgbd
return self.current_pose
def extract_mesh(self):
"""提取网格"""
mesh = self.volume.extract_triangle_mesh()
mesh.compute_vertex_normals()
return mesh
def get_pointcloud(self):
"""提取点云"""
pcd = self.volume.extract_point_cloud()
return pcd
# 使用
slam = RGBD_SLAM({
'width': 1920,
'height': 1080,
'fx': 1066.778,
'fy': 1067.487,
'cx': 960.0,
'cy': 540.0
})
for rgb, depth in rgbd_stream:
pose = slam.process_frame(rgb, depth)
print(f"Current pose: {pose}")
# 提取最终模型
mesh = slam.extract_mesh()
o3d.io.write_triangle_mesh("output.ply", mesh)
```
---
## 四、LiDAR开源项目
### 4.1 FAST-LIO2 ⭐⭐⭐⭐⭐
**GitHub**: https://github.com/hku-mars/FAST_LIO
**Stars**: ~2,500
**语言**: C++
**许可证**: GPLv2
#### 项目简介
FAST-LIO2是最先进的LiDAR-惯性里程计,支持固态和机械式LiDAR。
```yaml
核心特点:
- 实时性能
- 高精度
- 鲁棒性强
- 支持多种LiDAR
支持设备:
- Livox系列
- Velodyne
- Ouster
- Hesai
优势:
- 速度快
- 精度高
- 抗退化
- 开源免费
```
#### 使用示例
```bash
# 编译
cd FAST_LIO
mkdir build && cd build
cmake ..
make
# 运行(Livox Mid-360
roslaunch fast_lio mapping_mid360.launch
# 保存地图
rosservice call /map_save "resolution: 0.01
destination: '/home/user/map.pcd'"
```
#### 配置文件
```yaml
# config/mid360.yaml
common:
lid_topic: "/livox/lidar"
imu_topic: "/livox/imu"
time_sync_en: false
preprocess:
lidar_type: 1 # 1: Livox
scan_line: 6
blind: 0.5
mapping:
acc_cov: 0.1
gyr_cov: 0.1
b_acc_cov: 0.0001
b_gyr_cov: 0.0001
det_range: 100.0
publish:
path_en: true
scan_publish_en: true
dense_publish_en: true
scan_bodyframe_pub_en: true
```
---
### 4.2 LIO-SAM ⭐⭐⭐⭐
**GitHub**: https://github.com/TixiaoShan/LIO-SAM
**Stars**: ~3,000
**语言**: C++
**许可证**: BSD-3-Clause
#### 项目简介
LIO-SAM是一个紧耦合的LiDAR-惯性-视觉SLAM框架。
```yaml
核心特点:
- 因子图优化
- 回环检测
- 全局一致性
- 多传感器融合
支持传感器:
- LiDAR
- IMU
- GPS(可选)
- 相机(可选)
优势:
- 精度高
- 全局优化
- 长时稳定
```
---
### 4.3 Livox SDK ⭐⭐⭐⭐
**GitHub**: https://github.com/Livox-SDK/Livox-