亲手展开一张图

3 序列 × 6 张样本 · 8 参数 slider · 拖动看展开怎么变

A · 原始 调参 B · 展开 C · 未来
① 主舞台 · 拖动滑块看 A↔B 切换
unfolded panorama
raw annular

左 = raw 环形(A) · 右 = 展开矩形(B) · 拖动中间竖线

② 8 参数 slider · 改动 → 实时切换预生成快照

(HTML 自包含约束下无法真调用 cv2,下面用预生成的 6 档参数快照做"准实时"切换)

0
0
base
当前生效:base · NCC:0.9038(base)→ ~0.65(极端档)
③ 多样性 · 6 张样本

3 序列 × 2 张:1027/0 + 1027/5 · 1210/1 + 1210/8 · 7100/1 + 7100/6

1027/0 1027/5 1210/1 1210/8 7100/1 7100/6
④ 原理 · 8 参数伪标定(点击展开)
# scripts/pass_pseudo_calibration_lib.py :: remap_from_parameters
def remap_from_parameters(image, center_x, center_y,
                          inner_radius, outer_radius,
                          radial_gamma, angle_offset_rad,
                          flip_x, flip_y, output_size):
    W, H = output_size
    x = np.linspace(0, 1, W)
    y = np.linspace(0, 1, H)

    angle_sign = -1.0 if flip_x else 1.0
    theta = angle_offset_rad + angle_sign * x * 2·π

    radial_t = y if flip_y else 1 - y
    radial_t = radial_t ** radial_gamma
    rho = inner_radius + (outer_radius - inner_radius) * radial_t

    θ_g, ρ_g = np.meshgrid(theta, rho)
    map_x = (center_x + ρ_g·cos(θ_g)).astype(np.float32)
    map_y = (center_y + ρ_g·sin(θ_g)).astype(np.float32)
    return cv2.remap(image, map_x, map_y, cv2.INTER_LINEAR)
关键事实:8 参数在 scripts/pass_pseudo_calibration_lib.py:remap_from_parameters;拟合用 scipy.optimize.minimize(method="Powell");目标函数是灰度归一化互相关(NCC)。
⑤ 当前局限(点击展开)
  1. 非物理标定:图像配对反求,不能代表真实镜头畸变。
  2. 拟合样本小:6 对(每序列 2 对),运行时/鲁棒性折中。
  3. 只处理 RGB:未做 GT 投影(标签必须用最近邻)。
  4. 单帧 + Python:未做视频流;仍是 Python 实现。
  5. label 语义不匹配:Groundtruth/label.txt 是 6 类,预训练模型是 28 类。
  6. GT 数据未挂上:dataset/gtFine/pass/ 不存在。
当前样本 / 当前参数
keyseq1027_idx0
presetbase
NCC0.9038 (eval)
size2048 × 692
modelpass_annular_pseudo_v1
未来目标 · 图 C
if this were C++ & real-time...
3 张图快速轮播假扮 30fps
桥接点已就位:
  • unfolders-OCamCalib/cpp-omni_cam-master/src/ocam.cpp(6,631 B)
  • PASS-Datasets/IV2019_1384x3432.mp4(74.6 MB 实时帧源)
  • trained_models/erfpspnet.pth(ONNX 推理)
HANDOVER 入口
→ /PASS/HANDOVER.md
PASS · 进展展示 · 方案 3/3(交互探索型)· 数据截至 2026-06-03