工具
Open3d¶
-
o3d.io.read_point_cloud(filename, format='auto', ...)
读取点云文件pcd = o3d.io.read_point_cloud("a.txt", format="xyz")
pcd = o3d.io.read_point_cloud("a.ply")
-
o3d.visualization.draw_geometries(geometry_list, window_name='Open3D', width=1920, height=1080, left=50, top=50)
可视化点云o3d.visualization.draw_geometries([pcd])
Colmap¶
自动重建¶
colmap automatic_reconstructor `
--database_path $PROJECT_PATH/database.db `
--image_path $PROJECT_PATH/images
特征提取¶
colmap feature_extractor `
--database_path $PROJECT_PATH/database.db `
--image_path $PROJECT_PATH/images
--image_list_path /path/to/image-list.txt
给新增的图像提取特征,其中image-list.txt
存放新增的图像的路径,格式为每行一个,且必须为相对于images
的相对路径--ImageReader.camera_model arg (=SIMPLE_RADIAL)
指定相机模型SIMPLE_PINHOLE
: f, cx, cyPINHOLE
: fx, fy, cx, cySIMPLE_RADIAL
: f, cx, cy, kRADIAL
: f, cx, cy, k1, k2
特征匹配¶
colmap exhaustive_matcher `
--database_path $PROJECT_PATH/database.db
针对少量图像进行穷举匹配,可以获得最好效果。此外,还有以下匹配方式:
vocab_tree_matcher
针对大量图像,通过 vocabulary tree 快速检索视觉上最相近的图像进行匹配sequential_matcher
针对顺序采集的视频图像,匹配视频流中的相邻帧,帧之间的前后关系由图像文件名给定,与数据集中的存储顺序无关。同时,这种匹配方式能够基于 vocabulary tree 进行回环检测spatial_matcher
通过图像采集时的 GPS 信息匹配空间位置上相近的图像。transitive_matcher
基于传递规则使用已有的特征匹配关系确定更完全的匹配图,即 A 与 B 匹配,B 与 C 匹配,那将直接匹配 A 和 Cmatcher_importer
通过 text 文件指定图像的匹配关系,如果是导入的特征可以进一步指定两张图像之间特征的匹配关系
稀疏重建¶
若是正常稀疏重建,则直接使用如下命令:
colmap mapper `
--database_path $PROJECT_PATH/database.db `
--image_path $PROJECT_PATH/images `
--output_path $PROJECT_PATH/sparse
若是加入新的图像,则要添加参数 --input_path
。这会改变原有 3D 点的位置。
colmap mapper `
--database_path $PROJECT_PATH/database.db `
--image_path $PROJECT_PATH/images `
--input_path /path/to/existing-model `
--output_path /path/to/model-with-new-images
若要从已知相机内外参重建,可以转而使用 point_triangulator
colmap point_triangulator `
--database_path $PROJECT_PATH/database.db `
--image_path $PROJECT_PATH/images `
--input_path path/to/manually/created/sparse/model `
--output_path path/to/triangulated/sparse/model
稠密重建¶
# 重新校准图片
mkdir $PROJECT_PATH/dense
colmap image_undistorter `
--image_path $PROJECT_PATH/images `
--input_path $PROJECT_PATH/sparse/0 `
--output_path $PROJECT_PATH/dense `
--output_type COLMAP `
--max_image_size 2000
# Stero 算法 (PatchMatch)
colmap patch_match_stereo `
--workspace_path $PROJECT_PATH/dense `
--workspace_format COLMAP `
--PatchMatchStereo.geom_consistency true
# Stereo Fusion 算法
colmap stereo_fusion `
--workspace_path $PROJECT_PATH/dense `
--workspace_format COLMAP `
--input_type geometric `
--output_path $PROJECT_PATH/dense/fused.ply
# 泊松重建
colmap poisson_mesher `
--input_path $PROJECT_PATH/dense/fused.ply `
--output_path $PROJECT_PATH/dense/meshed-poisson.ply
# 德劳内重建
colmap delaunay_mesher `
--input_path $PROJECT_PATH/dense `
--output_path $PROJECT_PATH/dense/meshed-delaunay.ply
转换格式¶
colmap model_converter `
--input_path $PROJECT_PATH/sparse `
--output_path $PROJECT_PATH/sparse `
--output_type TXT
视觉定位¶
在稀疏重建之后,可以对新添加的图像进行定位
colmap feature_extractor `
--database_path $PROJECT_PATH/database.db `
--image_path $PROJECT_PATH/images `
--image_list_path /path/to/image-list.txt
colmap vocab_tree_matcher `
--database_path $PROJECT_PATH/database.db `
--VocabTreeMatching.vocab_tree_path /path/to/vocab-tree.bin `
--VocabTreeMatching.match_list_path /path/to/image-list.txt
colmap image_registrator `
--database_path $PROJECT_PATH/database.db `
--input_path $PROJECT_PATH/sparse `
--output_path $PROJECT_PATH/model-with-new-images
colmap bundle_adjuster `
--input_path $PROJECT_PATH/model-with-new-images
--output_path $PROJECT_PATH/model-with-new-images
image-list.txt
存放新增图像的路径,每行一个,路径只能为相对于images
的路径vocab-tree.bin
为训练好的数据集,可从官网下载vocab_tree_matcher
可以用exhaustive_matcher
替换image_registrator
向已存在的 3D 模型添加新图像,但新图像不会用于新增 3D 点bundle_adjuster
是可选的
若想要产生更多的 3D 点,获得更准确的定位,可以使用 mapper
来代替 image_registrator
,然后用 model_aligner
来使坐标系回归初始模型。
colmap mapper `
--database_path $PROJECT_PATH/database.db `
--image_path $PROJECT_PATH/images `
--input_path $PROJECT_PATH/sparse `
--output_path $PROJECT_PATH/model-with-new-images
colmap model_aligner `
--input_path $PROJECT_PATH/model-with-new-images `
--output_path $PROJECT_PATH/model-with-new-images `
--ref_images_path /path/to/text-file `
--ref_is_gps 1 `
--alignment_type ecef `
--robust_alignment 1 `
--robust_alignment_max_error 3.0
text-file
存放已知的相机坐标,形式为每行一个image_name.jpg X Y Z
,可以仅有已注册图像的一部分