(成型1)定位 colmap mast3r 2d-3d pnp BA版本
首先colmap gps 建图

导出

定位测试指令
指令1 单张手动测试

PYTHONDONTWRITEBYTECODE=1 conda run -n py311_AnylocMast3r \ python test_colmap_mast3r_query_ba.py \ --dataset "/media/dongdong/新加卷/0ubuntu20/1slam/数据/2RTK/hf1_youtian/map_0303_yin" \ --query /media/dongdong/新加卷/0ubuntu20/1slam/数据/2RTK/hf1_youtian/location11_0224_night/pic_0224_night_yintian_2131pm_125/images/DJI_00152.jpg \ --keyframe /media/dongdong/新加卷/0ubuntu20/1slam/数据/2RTK/hf1_youtian/map_0303_yin/images/DJI_0559.jpg \ --output-dir /media/dongdong/新加卷/0ubuntu20/1slam/数据/2RTK/hf1_youtian/map_0303_yin/colmap_mast3r_query_test \ --match-mode mutual \ --pnp-reproj-threshold 2.0 \ --ba-prune-threshold 1.5 \ --query-preprocess auto
黑夜自动增强灰度化
ba 重投影预支更小


读取colmap数据 创建共视关系,如果有直接读取。

时间
instantiating : AsymmetricMASt3R(enc_depth=24, dec_depth=12, enc_embed_dim=1024, dec_embed_dim=768, enc_num_heads=16, dec_num_heads=12, pos_embed='RoPE100',img_size=(512, 512), head_type='catmlp+dpt', output_mode='pts3d+desc24', depth_mode=('exp', -inf, inf), conf_mode=('exp', 1, inf), patch_embed_cls='PatchEmbedDust3R', two_confs=True, desc_conf_mode=('exp', 0, inf), landscape_only=False)
<All keys matched successfully>
[6/10] MASt3R model loaded on cuda; query frame ready (3.793s)
[7/10] Match query against 6 reference keyframes
- DJI_0559.jpg: backend=mutual 2d3d=0 mutual=0 (0.169s)
- DJI_0558.jpg: backend=mutual 2d3d=255 mutual=255 (0.835s)
- DJI_0560.jpg: backend=mutual 2d3d=0 mutual=0 (0.066s)
- DJI_0557.jpg: backend=mutual 2d3d=0 mutual=0 (0.066s)
- DJI_0561.jpg: backend=mutual 2d3d=0 mutual=0 (0.066s)
- DJI_0556.jpg: backend=mutual 2d3d=0 mutual=0 (0.065s)
[6/10] Estimate PnP pose from 255 2D-3D correspondences
[6/10] PnP done: inliers=12 (0.052s)
[7/10] Run pose-only BA on 12 selected observations
[7/10] BA done: kept=12 success=True (0.001s)
[8/10] Render preprocessing comparison and match/inlier visualizations
- match visualizations: 3.073s
指令2 文件夹查询帧,自动anyloc查找关键帧,mast3r 匹配计算



1 速度优化
2 对错查询
3 保存试图问题
4 gps参考点保存 colmap srt 关系保存
31共视觉视觉关键帧选取
现在逻辑是:
1. 对指定 keyframe,取它看到的所有 COLMAP POINT3D_ID
2. 遍历地图中其它图像
3. 计算 shared_points = 两帧共同看到的 POINT3D_ID 数量
4. shared_points >= --covisible-min-shared-points 才建共视边
5. 按 shared_points 从大到小排序
6. 用最强的前 --covisible-radius-seed-count 张共视帧计算空间半径
7. 只保留相机中心距离在这个半径内的候选
8. 最终取前 --max-covisible 张,加上原始 keyframe 一起参与定位
不再使用相邻 image_id 半径。旧参数 --covisible-radius 保留为兼容项,但已经不参与筛选。
新增/调整参数:
--max-covisible 5
额外取 5 张,共 6 张参考帧。
--covisible-min-shared-points 15
两帧至少共享 15 个地图点才认为有共视边。
--covisible-radius-seed-count 6
用最强 6 条共视边估计自动空间半径。
--covisible-spatial-radius-m -1
负数表示自动半径;也可以手动指定,比如 --covisible-spatial-radius-m 60。
--covisible-radius-margin-m 1.0
现在默认策略是:
不做距离判断
只按共享 COLMAP POINT3D_ID 数量排序
取前 6 个共视关键帧
加上你指定的 keyframe
总共最多 6 张参考帧
默认参数现在是:
--max-covisible 5
--covisible-spatial-radius-m -1
其中:
- --max-covisible 5:额外取共享地图点最多的前 5+1 张
- --covisible-spatial-radius-m -1:关闭距离过滤
- 如果以后想手动限制空间距离,可以设正数,比如:
--covisible-spatial-radius-m 60
32 重投影参数
浙公网安备 33010602011771号