• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅

(成型1)定位 colmap mast3r 2d-3d pnp BA版本

 

 

首先colmap gps 建图

image

 

导出

image

 

 

定位测试指令

指令1 单张手动测试

image

 

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 重投影预支更小

--covisible-spatial-radius-m 47 \
--max-covisible 5
 共计6张

image

 

 

--covisible-spatial-radius-m 47 \
--max-covisible 4
共计5张

image

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

image

 

时间

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 匹配计算

=========================文件夹3 config 模式==================

image

 

python /home/dongdong/2project/1salm/py311_AnylocMast3r/colmap_anyloc_mast3r_query/query_anyloc_mast3r_folder.py \
--config config.yaml

topk_matches

 

DJI_00025__DJI_0024_ba_observations

 

 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 重投影参数

--max-map-pixel-dist 2
--match-max-points 1024
--pnp-reproj-threshold 3
--ba-prune-threshold 3
--ba-loss-scale 2
 
- --max-map-pixel-dist
MASt3R 匹配到关键帧像素后,去 COLMAP 观测点里找最近点的最大距离。最关键。这个数据建议 2 左右,太大容易
把错误 3D 点关联进来。
- --match-max-points
每个关键帧最多保留多少个 MASt3R/地图候选匹配。建议 1024,比 512 更稳。
- --pnp-reproj-threshold
PnP RANSAC 的重投影内点阈值,单位像素。建议 3,太大会收进错误匹配。
- --ba-prune-threshold
BA 每轮后剔除重投影误差超过该值的观测。建议 3。
- --ba-loss-scale
BA 鲁棒核尺度,越小越抑制外点。当前建议 2。
- --match-mode
auto/mutual/descriptor。现在建议默认 auto 或 mutual。descriptor 会给更多点,但错误也可能更多。
- 3D 误差 0.33m

也就是已经到米级以内。
posted on 2026-05-01 00:49  MKT-porter  阅读(20)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3