3 序列 × 6 张样本 · 8 参数 slider · 拖动看展开怎么变
左 = raw 环形(A) · 右 = 展开矩形(B) · 拖动中间竖线
(HTML 自包含约束下无法真调用 cv2,下面用预生成的 6 档参数快照做"准实时"切换)
base · NCC:0.9038(base)→ ~0.65(极端档)
3 序列 × 2 张:1027/0 + 1027/5 · 1210/1 + 1210/8 · 7100/1 + 7100/6
# 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)
scripts/pass_pseudo_calibration_lib.py:remap_from_parameters;拟合用 scipy.optimize.minimize(method="Powell");目标函数是灰度归一化互相关(NCC)。
Groundtruth/label.txt 是 6 类,预训练模型是 28 类。dataset/gtFine/pass/ 不存在。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 推理)