PASS · Panoramic Annular Semantic Segmentation

看到的是环,
看到的不是世界。

—— 我们用一张 2048×692 的矩形全景图,把井筒/钻孔相机"周身 360°"的世界搬进训练域。

① 现在采集到的是这样的画面

井筒/钻孔全向相机拍下来的原图是环形的:360° 方位角信息被压在环的周向角度里,纵向高度信息压在环的半径里。它不是矩形训练域,不能直接喂给 Cityscapes 风格的网络。

raw 1027
A · 1027
林荫道 / 公园入口
问题:环形,无法直接训练
raw 1210
A · 1210
街道 / 交叉路口
问题:丢失空间结构
raw 7100
A · 7100
同一场景连拍
问题:边缘畸变明显
② 我们让它变成了训练域

经过伪标定展开,每一帧 raw 环形图都被映射成 2048×692 的矩形全景:横轴 = 0°~360° 方位角,纵轴 = 高度方向。可以直接喂给 Cityscapes 风格的网络。

unfolded 1027
B · 1027U/0NCC 0.8815
矩形、360°、可对接训练
unfolded 1210
B · 1210U/1NCC 0.8814
高度方向可见
unfolded 7100
B · 7100U/1NCC 0.9485
同一场景多帧对齐
③ 多样性 · 6 张样本(3 序列 × 2 张)

3 个采集序列:1027(334 张,公园/林荫道)、1210(700 张,街道)、7100(16 张,同场景连拍)。每序列抽 2 张以保证覆盖:首张 + 中段。

unfolded 1027/0
1027U/0首张,公园主路
unfolded 1027/5
1027U/5中段,转角处
unfolded 1210/1
1210U/1首张,街道起点
unfolded 1210/8
1210U/8中段,路口
unfolded 7100/1
7100U/1首张,固定机位
unfolded 7100/6
7100U/6中段,时序对比
④ 原理 · 一句话 + 一张图

中心 + 内径 + 外径 + 角度,四个量就够把一个环摊成一张矩形。

raw with rings ρ (radius) θ (angle)
环:θ 沿周向,ρ 沿径向

· θ 方向展开到 0°~360° → 矩形全景的横轴

· ρ 方向展开到 inner→outer → 矩形全景的纵轴(高度)。

· 横纵翻转各 ±1,吸收不同相机/不同采集方向的镜像差异。

· 用 raw/published 配对反求 8 个参数,不需要真实相机标定

⑤ 路线图 · 从 POC 到 AI 应用
A
现在
POC · 单帧 + Python
8 参数伪标定 + Powell 优化,NCC 0.8804 / 0.9038。30 张 demo 产物已落地。
短期
多帧 + C++
scripts/pass_pseudo_calibration_lib.py::remap_from_parameters 翻译成 C++ cv::remapcpp-omni_cam-master/src/ocam.cpp 已就位。
中期
实时 + 真实标定
IV2019_1384x3432.mp4(74.6 MB)做实时帧源;用 chessboard 真实标定替换伪标定。
B
未来
实时 AI 分割
串接 trained_models/erfpspnet.pth 的 ONNX/C++ 推理,输出实时彩色分割。
A
A · 采集
B
B · 展开
C · AI 应用
see what AI sees
⑥ 当前能做到 / 还做不到
✓ 当前能做到
  • · raw 6000×4000 → 展开 2048×692
  • · 3 序列全流程复现
  • · NCC 0.8804 / 0.9038 的可量化结果
  • · 一次性 wrapper 一键跑通
⚠ 还做不到
  • · 真实物理标定(缺棋盘格标定图)
  • · 视频流实时展开(仍是单帧 + Python)
  • · GT 标签投影(最近邻未实现)
  • · 6→28 类 label 语义对齐

想要这版 demo?

所有脚本、JSON、交接文档都已在仓库内开放。

去 HANDOVER 拿脚本 →
PASS · 进展展示 · 方案 2/3(产品故事型)· 数据截至 2026-06-03