本文最后更新于:2026年8月12日 下午

搭一组四相机阵列、做完内外参标定后,重投影 RMS 落在约 0.12px。本文记录从标定到回答"这套系统到底有多准、又被什么限制"的完整判断:用 Fisher 信息给出精度的理论下界,实测它,再逐步找出真正的瓶颈——不是模型拟合得不够好,而是检测噪声本身。一个贯穿全文的结论:系统已经贴着自己的检测噪声地板,五个看上去能提精度的杠杆,逐一试过,增益全为零

1. 这套系统在做什么

先用一句话把场景立起来:四台相机固定在一个刚性支架上,同步拍照,目标是把任意一个出现在它们共同视野里的物体,测出它在三维空间里的位置——准到毫米。

四台相机两两分辨率不同:cam1/2 是 4MP(2560×1440)、cam3/4 是 2MP(1080P)。标定用的是一块棋盘(11×8 内角点、方格 25mm,共 88 个角点),四台相机对着它在各种姿态下同步拍一组标定图。把 cam1 定为世界坐标系原点,其余三台相对它的位置(基线)分别是约 1207mm / 802mm / 529mm——cam1–cam2 拉得最开,是后续深度精度的主力。

要让这套阵列能测三维,得先标定两样东西:

  • 内参(每台相机各自):焦距 $f_x,f_y$、主点 $c_x,c_y$、镜头畸变系数。它描述"这台相机怎么看世界"——把一个 3D 点映射成它画面上的哪个像素。
  • 外参(相机之间):cam2/3/4 相对 cam1 的刚性位姿(旋转 + 平移),也就是整个阵列的几何骨架——基线长度直接决定能测多准的深度。

标定完,报告里最显眼的数字叫重投影 RMS:把每张标定图的棋盘姿态投影回每台相机的画面,算出来的角点位置和实际检测到的角点之间的平均像素误差。这套系统标出来是 0.12px 左右——对一组多相机阵列来说相当漂亮。

但 RMS 低,不等于"测得准"。 RMS 只回答了"模型能不能拟合这些标定点",不回答真正关心的问题:换一组没见过的姿态,把一个点三角化出来,三维测量能准到多少毫米? 一个低 RMS 的标定完全可以配一个糟糕的测量——比如外参把基线估错了尺度,标定点上 RMS 照样低,但任何绝对深度都会系统性偏。

要严肃回答"到底多准",需要两件东西:

  • 一个理论下界——给定噪声水平,最优估计器能好到什么程度;
  • 一个实测——拿着独立测试集去量,再和下界比。

下界由 Fisher 信息(Fisher Information)Cramér–Rao 不等式给出。本文就是绕着这两个东西转的。

数据:data_0807(四机同步:cam1/2 原生 4MP 2560×1440、cam3/4 1080P;cali 222 位姿、sigama 5组×100、test 5 距离)。板:chessboard 11×8 内部角点,方格 25.0mm。标定世界系:cam1 为原点(深度=Z);精度评估另用 rig 系(原点=4机质心,轴=PCA 水平/竖直/深度法向,距离=板心到 rig 平面垂直距离)。

2. 理论基础:测量模型、Fisher 信息与 Cramér–Rao 下界

2.1 目标

量化四目相机系统在相机数(2/3/4 目)×基线×距离下的 深度 z横向 xy 测量精度,并与 Fisher 信息理论下界(CRLB)对比,回答「加相机/长基线是否真提精度、离理论极限多远、瓶颈在哪里」。

2.2 测量模型与观测噪声

每个标定/测试角点是一次像素观测 z_i ∈ ℝ²。针孔+畸变测量模型 g($\theta$) 把 3D 板点映射到像素:

板点 X_w —(板位姿 R_b,t_b)→ 世界 —(相机外参 R,t)→ 相机系 X_c → 归一化 X_c/X_{c,z} → 径向+切向畸变 → 内参 K → 像素 (u,v)

观测受检测噪声污染:z_i ~ N(g($\theta$), $\Sigma$),$\Sigma$ = $\sigma_a$²·I(各向同性,逐坐标方差 $\sigma_a$²)。其中 $\sigma_{\text{det}}$ = √($\sigma_u$²+$\sigma_v$²) 是 2D 检测噪声地板(实测),$\sigma_a$ = $\sigma_{\text{det}}$/√2 为单坐标标准差(使 $\sigma_u$²+$\sigma_v$² = $\sigma_{\text{det}}$² 成立)。

参数约定:内参 $\theta$=[fx,fy,cx,cy,k1,k2,p1,p2,k3](9 参 Brown5);cam1/2 升 rational 则 +[k4,k5,k6](12 参)。每张标定图另有外参 (r_i,t_i)(6 参/图)。

2.3 Fisher 信息与 Cramér–Rao 下界

对高斯观测 z ~ N(g($\theta$), $\Sigma$),Fisher 信息矩阵为 I($\theta$) = $J{\mathsf{T}}\Sigma{-1}J$,其中 J = $\partial g/\partial\theta$ 是测量模型对参数的雅可比。Cramér–Rao 不等式给出任何无偏估计器的方差下界:$\operatorname{Cov}(\hat{\theta})$ $\succeq I(\theta)^{-1}$,即 $\mathrm{CRLB}=\sqrt{\operatorname{diag}(I^{-1})}$。

本管线 J数值中心差分求:逐列扰动该参数 $\theta$ ± h·e_k,投影全部角点取差 J[:,k] = (g($\theta$+h·e_k) − g($\theta$−h·e_k))/(2h)——避免手写畸变解析导数的易错性,且天然兼容 5 参/8 参 rational 两种模型(只需切换 $\theta$ 的列数,雅可比代码不变)。

边缘化干扰参数(Schur 补):参数常分待估 β 与干扰 γ(如每图外参),$\theta$=(β,γ)。把信息矩阵分块 $I=\begin{bmatrix}A&B\B^{\mathsf{T}}&C\end{bmatrix}$(A=ββ 块、B=βγ 块、C=γγ 块),则只关心 β 时的边际信息 $I_\beta=A-BC{-1}B{\mathsf{T}}$(等价于把 γ 积分掉的边缘后验),$\mathrm{CRLB}\beta=\sqrt{\operatorname{diag}(I\beta^{-1})}$。本管线三种 Fisher 都靠这一步消去外参/板位姿/内参等干扰量。

fisher_pipeline

Fisher 信息计算管线:观测 → 测量模型 g($\theta$) → 数值雅可比 J → 信息矩阵 I=$J{\mathsf{T}}\Sigma{-1}J$ → Schur 边缘化干扰量 → CRLB;底部分支为本管线的三种 Fisher 计算(内参/外参/三角化),共享 I=$J{\mathsf{T}}\Sigma{-1}J$ 这一核心,差别仅在待估/干扰/边缘化的对象。

2.4 本管线的三种 Fisher 计算

全管线有 3 个独立的 Fisher 计算,参数、干扰量、边缘化对象各不同,但共享 I=$J{\mathsf{T}}\Sigma{-1}J$ 这一核心,差别仅在「把什么当待估、把什么当干扰、消掉什么」:

内参 Fisher 外参 Fisher 三角化 Fisher
待估 β $\theta$=fx,fy,cx,cy,k… rig 外参(3×6=18) 3D 点 X(3)
干扰 γ 每图外参 (r_i,t_i) 板位姿(6/快照)+内参 无(几何+噪声给定)
观测 标定角点像素 标定角点像素 测试角点像素
雅可比 J ∂投影/∂($\theta$,外参) ∂重投影/∂(rig,板,内参) ∂投影/∂X(2×3/机)
信息矩阵 $J{\mathsf{T}}\Sigma{-1}J$ $J{\mathsf{T}}\Sigma{-1}J$(已白化) $\sum_c J_c{\mathsf{T}}\Sigma_c{-1}J_c$
边缘化 Schur 消每图外参 Schur 消板位姿+内参 不需
CRLB 含义 单次标定内参精度下界 rig 相对位姿(基线)精度下界 单点三角化精度下界

求解步骤统一为:(i) 确定待估 β 与干扰 γ;(ii) 对 β∪γ 全列做数值雅可比 J;(iii) I=$J{\mathsf{T}}\Sigma{-1}J$;(iv) 若有 γ 则 Schur 补取 $I_\beta$;(v) $\mathrm{CRLB}\beta=\sqrt{\operatorname{diag}(I\beta^{-1})}$。

2.5 检测噪声地板与「噪声受限 vs 模型受限」判据

$\sigma_{\text{det}}$= 静态连拍角点检测的亚像素可重复性,是纯检测地板(不含模型误差)。两个比值判据贯穿全报告:

  • 重投影 RMS / $\sigma_{\text{det}}$:标定残差 vs 噪声地板。≈1 ⇒ 噪声受限(模型已足够);≫1 ⇒ 模型受限(畸变拟合不足,残差被模型误差主导)。
  • k 折经验散布 / Fisher CRLB(均用 $\sigma_{\text{det}}$):经验不确定度 vs 理论下界。→1 ⇒ 噪声受限;≫1 ⇒ 模型/数据受限。

本数据 $\sigma_{\text{det}}$≈0.023px、重投影 RMS≈0.12px(≈5.3×)、内参 fx kfold/CRLB($\sigma_{\text{det}}$)≈24–81×。但「模型/噪声受限」的判据须区分两个 $\sigma$(见 §2.6):诊断分母用真实工作点噪声 $\sigma_{\text{real}}$≈RMS,而非静态地板 $\sigma_{\text{det}}$。在 $\sigma_{\text{real}}$ 口径下深度实测/CRLB≈0.9×(贴极限)、内参 fx k/CRLB($\sigma_{\text{real}}$)=4.7–15.6× ⇒ 主结论=检测噪声 $\sigma_{\text{real}}$ 受限,改进空间在检测侧。

2.6 理论下界 vs 真实误差:方差分解与有效噪声

Fisher CRLB 只计入「定位噪声经多目几何放大」这一项,且把标定出的内外相当真值;真实测量误差还可能含模型偏差标定散布。三者独立故方差可加:

$\sigma_{\text{meas}}$² = $\sigma_{\text{CRLB}}$² + $\sigma_{\text{model}}$², $\sigma_{\text{model}}$ = √($\sigma_{\text{meas}}$² − $\sigma_{\text{CRLB}}$²)。

关键在于 $\sigma_{\text{CRLB}}$ 用哪个 $\sigma$,而 CRLB 线性于其噪声分母(I∝1/$\sigma$²):

  • $\sigma_{\text{det}}$(静态爆发地板 ≈0.023px)= 板居中、正对、光照好时的传感器+亚像素噪声,理想采集条件下的渐近下界。
  • $\sigma_{\text{real}}$(逐图去心残差 RMS ≈ 标定重投影 RMS,差~10⁻⁶,≈0.12px)= 真实工作点的定位噪声。它比 $\sigma_{\text{det}}$ 大 ~5×:标定采集的板姿态分布远比静态爆发恶劣(边缘畸变大/分辨率下降、倾斜透视缩短→角点变钝、远距板小→每角点像素少、光照不均对比度低),这些条件下的定位噪声都高于理想居中正对态,$\sigma_{\text{real}}$ 是对这套真实姿态分布的平均(实测逐图 $\sigma_{\text{real}}$ 跨度 0.07–0.19px,最差 10% 帧是最好 10% 的 2.7×)。$\sigma_{\text{det}}$ 是理想地板,$\sigma_{\text{real}}$ 才是工作点噪声。

判「模型受限与否」,分母用 $\sigma_{\text{real}}$。方差分解($\sigma_{\text{real}}$ 口径):

  • 深度实测 / CRLB($\sigma_{\text{real}}$) ≈ 0.6–1.0 ⇒ $\sigma_{\text{model}}$ ≈ 0 ⇒ 系统贴检测噪声地板,无模型误差项
  • 与之自洽:残差校正场、鱼眼、部分重叠外参、板非平面、联合 BA 五个杠杆全部零增益 ⇒ 模型方差为 0。
  • 有效噪声 $\sigma_{\text{eff}}$=ratio·$\sigma_{\text{det}}$ 恰 = $\sigma_{\text{real}}$,故 $\sigma_{\text{eff}}$ 曲线贴合实测——「Fisher 曲线贴合实测」即源于分母取了 $\sigma_{\text{real}}$。

triangulation_geom

左:三角化误差椭圆——深度 z 是多目几何的固有弱轴(椭圆纵向拉长),横向 x 视差大故精度好。
右:解析双目 $\sigma_z$ = z²·$\sigma_{\text{det}}$/(f·B)(视差 d=fB/z,dz/dd = −z²/(fB)):深度误差 ∝ 距离²、反比于(基线×焦距)。但本 rig 会聚角有限,远场 z² 近似不成立,实测/理论同为 $\sigma$ ∝ $z^{\sim1.5}$(两曲线平行,只差常数倍 ratio;)。

2.7 约定:rig 系、角点序消歧、单位

  • rig 系:原点=4 机光学中心质心;三轴由相机布局 PCA 给出(PC1=水平长基线、PC2=竖直、PC3=深度=相机平面法向)。距离=板心到 rig 平面垂直距离(组内均值),比 cam1 世界 Z 更贴近「物体到 rig 的真实距离」。
  • 棋盘 180° 对称:角点反序对内参无害(吸收进该图外参),但对多目相对位姿有害 ⇒ stage5 先做跨相机角点序消歧。
  • 异构相机(cam1/2 原生 4MP、cam3/4 1080P):Fisher 框架天然兼容(每机各自 $\sigma_{\text{det}}$ 与 K)。
  • 单位:全部长度 mm。board.yaml square_size=25mm(待实物复测);若与实物不符,所有 mm 值等比缩放,px 级结论不变。

2.8 多目三角化与融合算法

本 rig 把 C 个相机的观测融合成一个 3D 点估计。核心:不是「两两三角化再合并」,而是把全部相机的线性方程一次性堆叠求最小二乘解——这正是多目相对双目的本质区别,也对应 Fisher 信息 $I_X=\sum_c J_c{\mathsf{T}}\Sigma_c{-1}J_c$ 的「各机独立观测 ⇒ 精度相加」(实现:lib/geometry.py::triangulate_dlt)。

① 双目三角化(2 目)—— DLT 线性交会。对每机,去畸变后像点 (u,v) 与投影矩阵 P=K[R|t] 给出一条空间射线,写成两条关于齐次坐标 $X=(X,Y,Z,1)^{\mathsf{T}}$ 的线性方程:

P[2]·X · u − P[0]·X = 0,P[2]·X · v − P[1]·X = 0(每机 2 行)。

2 目堆叠得 4 行 A·X = 0(A 为 4×4),SVD 取最小奇异向量 Vt[-1],齐次除 Xh[3](保号)得 3D 点——4 行恰好定解(噪声下唯一)。深度由视差决定:视差 d=fB/z ⇒ $\sigma_z$ = |dz/dd|·$\sigma$ = z²·$\sigma$/(f·B)——深度是弱轴(误差 ∝ 距离²、反比基线×焦距)。

② 多目融合(>2 目)—— 堆叠 SVD 全局最小二乘。把全部 C 机的 DLT 行堆叠:每机 2 行 ⇒ A2C×4,SVD 最小奇异向量 = 全局最小二乘解。在「各机观测独立高斯」假设下,这等价于最大似然估计(所有视角同时最优,信息一次性用尽;而非先两两交会再加权平均——后者会丢信息)。其精度正是三角化 Fisher:$I_X=\sum_c J_c{\mathsf{T}}\Sigma_c{-1}J_c$,C 个相机各自贡献信息、矩阵相加 ⇒ 精度相加(协方差减小);双目是 C=2 的特例。

为何加相机收益递减(实测边际仅 ~1–2%/目):深度轴主要由视差/基线约束,本 rig 最长基线 cam1–cam2(1207mm)已把深度卡到地板;新增的 cam3/cam4 基线更短、且多在前向(与已有相机视角相关性强),边际相机主要补充横向信息与冗余,而非深度。故 4 目深度 ≈ 2 目深度(实测),加相机的价值在视场/冗余/横向,而非深度精度本身。

fusion
左:双目 DLT——每机 2 行射线方程(共 4 行),视差 d=fB/z 决定深度(弱轴),$\sigma_z=z^2\sigma/(fB)$。右:>2 目融合——堆叠全部 C 机 DLT 行(2C×4)→ SVD 最小奇异向量 = 全局最小二乘(高斯下 ML);Fisher 不确定椭球随相机数增加而缩小($I_X=\sum_c J_c{\mathsf{T}}\Sigma_c{-1}J_c$,精度相加),4 目椭球 < 2 目椭球。实现见 lib/geometry.py::triangulate_dlt

3. 设备、数据采集与筛选

3.1 设备

相机:4 台硬件同步相机,异构(2 高分辨 + 2 标准):

相机 分辨率 fx(px) 用途
cam1 2560×1440(4MP) 2036 世界原点 + 主参考
cam2 2560×1440(4MP) 2041 长基线对
cam3 1920×1080(1080P) 1346 短基线冗余
cam4 1920×1080(1080P) 1347 短基线冗余

标定板:平面棋盘,12×9 方格 ⇒ 11×8 内部角点(= 88 个,findChessboard 检测目标),方格边长 25mm(board.yaml,TODO 实物复测 —— 仅等比缩放 mm 绝对值,px/比值结论不变)。

装置(rig):4 机刚性安装在同一框架上,硬件同步触发(每姿态 4 机同时各采 1 帧)。以 cam1 光心为世界原点,其余 3 机位置(标定所得):

cam2 cam3 cam4
中心(mm, cam1系) (−1155, 64, 345) (−700, 389, 37) (−366, 379, −49)
基线 |t| (mm) 1207 802 529

⇒ rig 占据约 1.15m(水平)× 0.4m(竖直)× 0.4m(深度) 的三维体积(非共面),cam1–cam2 为最长基线(水平+前探),4 机汇聚观测前方 ~1–3m 的共享测量区。

rig_photo
四目 rig 实拍:4 台相机刚性安装在同一框架上,硬件同步触发。

rig3d
四目 rig 结构 3D 示意:4 相机(色块)刚性安装,光轴(箭头)汇聚观测前方测量区;蓝面 = 标定板(12×9 方格,300×225mm)在 ~1m 处示意位置;灰线 = 基线。cam1 = 世界原点。

3.2 数据采集

数据集 data_0807,分 3 组(均 4 机同步):

数据集 内容 数量 喂给
cali 标定姿态:手持板在共享区内变换角度/位置/距离(~1–3m,覆盖全视场与倾角),4 机同步各 1 帧 ~217 张/机(其中四机全检出 88 角点的同步快照 96) 内参/ 外参标定
sigama 静态连拍:板保持静止,每机连拍 5 组 × 100 帧/机 检测噪声地板 $\sigma_{\text{det}}$
test 独立测试:板置于 5 个距离(标称 1/1.5/2/2.5/3m;实测距离由三角化定),4 机同步 5 距离 × ~8 组 多目精度泛化

同步:每姿态 4 机硬件触发同时采集;sigama 是单机静态连拍(测本机噪声)。calitest 的"组"= 一次同步采集(4 机各 1 帧)。

标定板采集覆盖(cali good pool,每机 ~146–158 张):

coverage
上排:图像平面角点密度 —— 88 角点 × ~150 图 = ~13000 点散布全视场(红 + = 主点);覆盖到边缘(畸变最大处)是内参标定质量的保障。
下排:板心空间分布(深度 Z × 横向 X)—— 标定姿态覆盖 ~500–3000mm 深度、±横向偏移,姿态多样性充足。

逐机像面覆盖热力图(cali 全姿态 ~217 张/机,2×2 = cam1–4;色标蓝→红 = 角点检测频次低→高):

coverage heatmap
每机把全部标定姿态的检出角点投回各自像面统计密度。4 机均覆盖到视场四角与边缘(畸变最大、标定最关键的区域),中央与主点附近(日常成像区)采样最密(红)。边缘也有低-中密度覆盖(青/黄)⇒ 内参畸变项在全视场都有约束,无大片盲区 —— 这是内参标定可信(而非仅中心区域准)的几何前提。

3.3 数据筛选

目标:把每台相机 cali 的 ~217 张,按"角点检测能否成功 + 重投影误差大小"分成三类,只保留干净的好图进入标定池。目的是剔除会污染标定的图:出画/遮挡的(检测失败)、以及模型在该位姿拟合不足的高误差图(畸变吃不掉的极端斜姿/微抖)。

方法(三步):

  1. 角点检测:每图 findChessboardCorners + 亚像素 cornerSubPix(窗口自适应)提取 88 个角点。检测失败或不足 88 点 ⇒ 1_出画(板不在画面内/严重遮挡;实测 ~27–32%,降采样验证 97% 仍检不出 ⇒ 真出画,非算法失败)。
  2. 重投影 RMS:对检出 88 角点的图,用干净内参 solvePnP 反解板位姿,再把 88 板点重投影回图像,逐图算 RMS = √($\Sigma$‖检测−投影‖²/N)。RMS≈$\sigma_{\text{det}}$ ⇒ 该图检测噪声主导(好图);RMS≫$\sigma_{\text{det}}$ ⇒ 模型在该位姿拟合不足。
  3. 阈值分类:RMS > 1px2_误差超限(扔);RMS ≤ 1px ⇒ 3_good(留 = 标定池)。

三类长什么样(cam1 示例,已带角点/重投影箭头/RMS 标注):

cats
左:出画(检测失败,板部分出画/遮挡,戳记原因);中:误差超限(RMS>1px,红箭头大 = 极端斜姿/微抖致模型拟合不足,扔);右:正常 good(RMS≤1px,绿角点+小红箭头,留作标定池)。

数据(分类计数 + 每类 RMS):

cam 总数 1_出画 2_误差超限(>1px) 3_good(≤1px,标定) median RMS(px) RMS>1px
cam1 217 64 4 149 0.203 4
cam2 217 58 1 158 0.196 1
cam3 217 69 2 146 0.116 2
cam4 217 70 0 147 0.115 0

stage1

为什么阈值定 1px(不用旧 8px、不做 10% trim):data_0807 极干净——per-image RMS median≈0.2px、p95≈0.5–1.9px,cam1/2 原生 4MP + 对焦改善后 5 参 Brown 几乎无高 RMS 位姿。旧 8px 阈值在此太松(超限≈0,放任坏图);10% trim 又会误剔一堆 RMS 0.3–0.7px 的好图。1px 恰切掉真高 RMS 尾(各 0–4 张,RMS 1–5.5px,多为极端斜姿/微抖),保留 ~146–158 张/机干净池。

4. 检测噪声地板 $\sigma_{\text{det}}$ 与真实噪声 $\sigma_{\text{real}}$

本节先测理想条件下的检测噪声地板 $\sigma_{\text{det}}$,再辨析真实工作点噪声 $\sigma_{\text{real}}$:为何 $\sigma_{\text{det}}$ 会低估真实噪声约 5×、$\sigma_{\text{real}}$ 如何定义(≈ 标定 RMS,到 10⁻⁶)、其中可建模的系统偏差 var(b) 仅 1.5–3.3% 且减之无效。

4.1 $\sigma_{\text{det}}$:静态爆发地板(理想条件)

目标:测每台相机的角点定位噪声地板 $\sigma_{\text{det}}$ —— 即"信号完全不变时,角点检测能重复到多准"。它是后续所有 Fisher 精度下界的噪声分母($\sigma_a$=$\sigma_{\text{det}}$/√2),精度下界整体线性于它。

方法:静态连拍(板不动,5 组×100 帧,每组距离不同:~1/1.5/2/2.3/2.8m)下,各帧角点检测的差异 = 纯亚像素检测噪声(信号恒定)。对每组扣组内均值(消去静态板信号),残差像素位移 Δu,Δv 的方差即检测噪声;按 2D 模型 $\sigma_{\text{det}}$=√(VarΔu+VarΔv)。每组的板距由 100 帧角点中位 + 标定内参 solvePnP 求得。

逐组数据(5 组 × 4 机,各自 PnP 测距):

cam1 距/$\sigma$ cam2 距/$\sigma$ cam3 距/$\sigma$ cam4 距/$\sigma$
0 1190 / 0.0231 1048 / 0.0249 949 / 0.0281 1018 / 0.0253
1 1632 / 0.0226 1564 / 0.0262 1470 / 0.0239 1507 / 0.0241
2 2018 / 0.0212 1957 / 0.0268 1876 / 0.0243 1907 / 0.0216
3 2384 / 0.0228 2330 / 0.0246 2256 / 0.0194 2282 / 0.0212
4 2837 / 0.0164 2784 / 0.0196 2722 / 0.0188 2745 / 0.0218

sdet_dist
$\sigma_{\text{det}}$ vs 板距:$\sigma_{\text{det}}$ 随距离略降(0.028→0.018),远距板小但检测更稳(板更正面、光照更匀)。各机趋势一致、绝对值接近(0.018–0.028px),差异主要来自传感器/对焦。

跨组池化(后续 Fisher 用此 $\sigma_{\text{det}}$):

cam $\sigma_{\text{det}}$(px) $\sigma_u$ $\sigma_v$ 组/帧
cam1 0.0213 0.013 0.017 5/500
cam2 0.0244 0.018 0.017 5/500
cam3 0.0231 0.013 0.019 5/500
cam4 0.0228 0.013 0.019 5/499

上表是 $\sigma_{\text{det}}$(静态爆发地板,理想条件),不是 $\sigma_{\text{real}}$(真实工作点噪声);$\sigma_{\text{real}}$≈RMS≈0.10–0.14px,是 $\sigma_{\text{det}}$ 的 ~5×。下文辨析这 5× 差距的来源($\sigma_{\text{det}}$ 在理想条件下被低估、真实标定姿态分布更恶劣,而非模型偏差),并给出 $\sigma_{\text{real}}$ 的逐图定义与其系统偏差 var(b) 仅 1.5–3.3% 的实证。

4.2 $\sigma_{\text{det}}$ 偏低的来源:理想地板 vs 工作点噪声

$\sigma_{\text{det}}$ 的测法决定了它是一个理想条件下的下界:静态爆发时板静止、正对、居中、光照好 ⇒ 角点最锐、对比度最高 ⇒ cornerSubPix 定位最准。0.023px 是「信号恒定 + 条件最优」时的传感器+亚像素地板。

但标定/测试实际用的图,板在全视场变换,远不如此理想:

恶化因素 出现场景 对定位噪声的影响
边缘 板移到视场边角 畸变梯度大、像素分辨率下降 → 角点定位散
倾斜 板非正对(俯仰/偏航) 透视缩短 → 角点不对称、变钝 → 亚像素拟合差
远距 板在 2–3m 板成像小 → 每角点像素少 → 离散化噪声大
光照不均 部分姿态背光/阴影 对比度低 → 梯度弱 → cornerSubPix

这些条件下的逐图定位噪声都高于理想居中正对态。$\sigma_{\text{real}}$ 是对这套真实姿态分布的平均(且 RMS 是二次平均,被差帧抬高)⇒ $\sigma_{\text{real}}$ ≫ $\sigma_{\text{det}}$ 是必然。

证据(最终模型下逐图 $\sigma_{\text{real}}$ 分布) —— 对 good pool 每张图用最终内参 solvePnP + 投影,算该图去心残差 RMS(=该图的 $\sigma_{\text{real}}$):

p10 中位 p90 最差 10% 均值 最好 10% 均值
逐图 $\sigma_{\text{real}}$(px) 0.077 0.103 0.143 0.193 0.070

⇒ 逐图定位噪声跨度很大:最差 10% 帧的噪声是最好 10% 的 2.7×,还有拖到 0.4–0.7px 的长尾(极端倾斜/边缘帧)。即便是最好的标定帧(0.070px)仍是 $\sigma_{\text{det}}$(0.023px)的 3× —— 因为标定帧本就涉及位姿求解、且姿态不如静态爆发理想。$\sigma_{\text{real}}$≈0.11px 正是这套分布的均值,而 $\sigma_{\text{det}}$ 只采到了分布最优端的条件。结论:$\sigma_{\text{det}}$ 是理想地板,$\sigma_{\text{real}}$ 才是真实工作点噪声;5× 差距来自条件差异,不来自模型偏差(证明)。

由此,$\sigma_{\text{det}}$ 当 CRLB 分母时,所有「实测/CRLB」比值先天虚高 ~5×,不可据之判模型受限。

4.3 $\sigma_{\text{real}}$ 的定义:逐图去心残差 RMS ≈ 标定 RMS(到 10⁻⁶)

  • 残差 = 角点检测坐标 − 模型投影坐标(投影用该图 solvePnP 位姿 + 相机内参)。
  • 逐图去心:每张图所有角点残差先减该图均值再求 RMS —— 扣掉 solvePnP 在 6 自由度位姿上已吸收的刚体平移(DC),剩下才是「模型+内参解释不了、且与位姿无关」的纯定位噪声。
  • 数值事实😒\sigma_{\text{real}}$(逐图去心 RMS)与标定 RMS(intrinsics.json,OpenCV 未去心的总重投影 RMS)两者算法不同,却近似相等到 ~10⁻⁶:
相机 $\sigma_{\text{real}}$(去心 RMS) 标定 RMS(未去心) 相对差
cam1 0.12012 0.12012 2×10⁻⁷ 2×10⁻⁶
cam2 0.12454 0.12454 3×10⁻⁷ 2×10⁻⁶
cam3 0.12194 0.12194 2×10⁻⁷ 2×10⁻⁶
cam4 0.11791 0.11791 3×10⁻⁸ 3×10⁻⁷

差值的物理来源 = 逐图均值残差(DC):去心扣掉的正是每图残差均值,其幅值 |b|≈0.0001px,|b|²≈10⁻⁸–10⁻⁷ 与上表差值同量级。即「标定 RMS² ≈ $\sigma_{\text{real}}$² + 逐图DC²」,而逐图 DC 被 solvePnP 的 6 自由度位姿几乎吃光 ⇒ DC 可忽略。

⇒ 全报告「RMS/$\sigma_{\text{real}}$ ≈ 1.00000x、系统贴真实检测噪声地板」成立到 6 位有效数字。这不是严格的数学恒等(两者算法不同:一个去心、一个不去心),而是「逐图 DC 残差已被证明可忽略」的经验近等式——区别重要:它说明位姿拟合确实把 DC 吸收干净,$\sigma_{\text{real}}$ 是干净的工作点噪声,而非混入未建模 DC 的脏量。

4.4 噪声层级:$\sigma_{\text{det}}$ ≪ $\sigma_{\text{real}}$(5.3×)

相机 $\sigma_{\text{det}}$(静态爆发) $\sigma_{\text{real}}$(逐图去心=RMS) $\sigma_{\text{real}}$ / $\sigma_{\text{det}}$
cam1(rational) 0.0213 0.1201 5.65×
cam2(rational) 0.0244 0.1245 5.10×
cam3(brown5) 0.0231 0.1219 5.29×
cam4(brown5) 0.0228 0.1179 5.18×

$igma_{ext{real}}$ 噪声层级

4.5 var(b) 拆解 —— 系统偏差 b vs 随机噪声(逐格算法 + 可视化)

$\sigma_{\text{real}}$ 里有多少是系统偏差 b(可建模、可消除),多少是随机(不可消除)?关键:残差是 2D 矢量,只有把像面分格、看同一格跨多张图的统计,才能区分「跨图一致的固定偏置 b」与「跨图抖动的随机散布」——单张图无法区分二者(模型偏差与噪声叠在一起)。

逐机算法(与 lib/experiments.py::_cell_diagnostic 一致;网格版见 lib/exp_sigma_real.py::_cell_grids / _fig_resid_grid):

  1. 取残差:good pool 全部标定图(~150 张),每张 solvePnP 解位姿 → 逐角点残差 (du,dv) = 检测 − 投影(投影用该图位姿 + 该机内参)。
  2. 归一化像面坐标:每角点 cv2.undistortPoints 去畸变 → (x_n,y_n)(归一化视场坐标)。归一化是为抹掉畸变梯度、让格在像面均匀,否则边缘格会被畸变拉伸得很碎。
  3. 24×24 分格:把 (x_n,y_n) 的实测范围等分 24×24 = 576 格。
  4. 逐格统计(仅当该格样本 ≥8 才纳入,保中位稳定):对落入该格的全部残差点(跨所有图)
  • 固定 b 分量:b_u = |median(du)|b_v = |median(dv)| —— 该格跨 ~150 图一致的偏置(若模型在某像面位置系统性地偏一个方向,中位非零)。
  • 随机分量:r_u = std(du)r_v = std(dv) —— 该格跨图的抖动
  1. 2D 合幅值:逐格 b_mag = hypot(b_u,b_v)r_mag = hypot(r_u,r_v)(u/v 两分量勾股合成)。
  2. 跨格聚合(鲁棒估计,与 $\sigma_{\text{real}}$ 对齐):对全部有效格的分量中位再合成 ——
    b = hypot(median_cells(b_u), median_cells(b_v) )random = hypot(median_cells(r_u), median_cells(r_v) )。用中位而非均值:少量极端格(边缘/数据稀疏格)不污染整体估计。
  3. var(b) 占比 = b² / $\sigma_{\text{real}}$²
相机 b(px) 随机(px) var(b) 占比 b/$\sigma_{\text{real}}$ 振幅 随机/b
cam1(rational) 0.0149 0.0936 1.5% 12.4% 6.3×
cam2(rational) 0.0161 0.0997 1.7% 12.9% 6.2×
cam3(brown5) 0.0212 0.1093 3.0% 17.4% 5.2×
cam4(brown5) 0.0213 0.1089 3.3% 18.1% 5.1×

怎么读:b 是典型格(跨格取中位)的系统偏置;var(b)=1.5–3.3% ⇒ 即便按振幅 b/$\sigma_{\text{real}}$ 也只 12–18%,系统偏差是 $\sigma_{\text{real}}$ 的次要项;随机/b ≈ 5–6× ⇒ 残差能量里随机主导约一个量级。(注:b 与「随机」是典型格的中位估计,而 $\sigma_{\text{real}}$ 是全点均值 RMS、被高方差的边缘格抬高,故 var(b)+var(随机)≈62–88% 而 ≠100%——这不影响「系统偏差占比」结论,因分子分母同源比较。)

24×24 残差格可视化(上排=固定 b,下排=随机;每格即算法第 4–5 步的 b_mag/r_mag):

归一化像面残差格
上排(固定 b,magma):全视场中位 ≈0.015–0.021px、与 $\sigma_{\text{det}}$ 同量级、无中心大块亮斑——若有 ⇒ 存在未被模型吃掉的空间结构畸变。下排(随机,viridis):≈0.09–0.11px、比 b 大 ~6×、相当均匀 ⇒ 残差是逐图随机噪声。这与残差校正场因果干预的 0% 增益互为印证:减掉任何低阶空间场 test RMS 纹丝不动 ⇒ 残差里确无可建模的大块结构。

var(b) 是方差占比:残差是 2D 矢量,方差才是 RMS² 的线性贡献者,故判据用 var(b) 而非振幅。两台 rational(1.5–1.7%)显著低于两台 brown5(3.0–3.3%),与「rational 多 3 个径向项吃掉更多系统偏差」一致。

残差方差拆解

4.6 b 可忽略的两条独立证据

(证据① 网格中位直测):上表 b≈0.015–0.021px,与 $\sigma_{\text{det}}$≈0.023px 同量级。若 b 是大块未建模畸变,它应 ≫ $\sigma_{\text{det}}$;实测仅与传感器噪声相当 ⇒ 没有未被模型吃掉的大块系统偏差。

(证据② 残差校正因果干预,决定性):把测出的 b 场当固定偏移从独立测试集投影里减掉,看 test RMS 降不降。b 若真是系统偏差,减掉它必线性降 test RMS;若纹丝不动,则 b 是标定集过拟合产物、无泛化意义。

相机 test RMS 校正前 P 法(多项式)后 G 法(网格-RBF)后 P 增益 G 增益
cam1 0.10654 0.10653 0.10730 +0.005% −0.71%(反升)
cam2 0.10288 0.10289 0.10365 −0.015% −0.75%
cam3 0.13714 0.13714 0.13849 +0.001% −0.99%
cam4 0.13259 0.13259 0.13436 −0.0002% −1.34%

P 法 4 机全部 ≈0.0%、G 法反升 −0.7~−1.3%(过拟合)。减掉 b 场 test RMS 纹丝不动 ⇒ b 不可建模利用,可忽略。与残差校正场实验互为印证。

残差校正因果干预

4.7 模型选型自洽:cam3/4 用 brown5 的 var(b) 同样受控

四机内参按相机选畸变模型(选型细节见 §5.3):cam1/2(4MP)用 rational(12 参),cam3/4(2MP)用 brown5(9 参),判据是独立测试 RMS 而非训练 RMS。cam3/4 用更简单的 brown5,var(b) 却同样小,因为选阶机制本身就是对系统偏差的内置惩罚

相机(分辨率) brown5 test RMS rational test RMS brown5 vs rational
cam1(4MP) 0.1602 0.1090 +47.0%(拟合严重不足 ⇒ 必须上 rational)
cam2(4MP) 0.1516 0.1025 +47.9%(同上)
cam3(2MP) 0.1382 0.1369 +1.0%(rational 仅优 1% ⇒ brown5 够用)
cam4(2MP) 0.1347 0.1328 +1.5%(同上)

cam1/2 是 4MP、边缘畸变大,brown5 拟合不足(test +47%);选 rational 吃掉这部分 ⇒ var(b) 降到 1.5–1.7%。cam3/4 是 2MP、视场小、畸变温和,rational 的 k4–k6 在 test 上几乎无增益(1–1.5%,低于标定噪声);留 brown5 反而省 3 个不可辨识自由度(条件数更低更稳),var(b)=3.0–3.3% 仍与 $\sigma_{\text{det}}$ 同量级。选阶判据(test RMS)本身就是「系统偏差有多大」的度量——凡被选中的模型,都是该机系统偏差已被压到最小的那个,故「逐机 var(b) 都小」是选型机制的必然,非巧合。cam3/4 不上 rational 的原因也在此:其 +1% 增益低于标定噪声,多出的 k4–k6 不可辨识(条件数≈10⁸),只会让 Fisher 协方差病态。

模型选型自洽

4.8 边界与结论

  • 边界:b 只测了空间固定的系统偏差;逐图变化的偏差(每图位姿/对焦/光照微变引起的)被统计进「随机」分量,故 var(b)=1.5–3.3% 是系统偏差下界。残差校正因果干预(§4.6)的零增益兜底:即便把逐图变化的偏差也算上,test RMS 也降不动。§4.9© 给出能直接分离「姿态依赖模型偏差」与纯噪声的决定性实验。
  • 结论:$\sigma_{\text{real}}$≈0.12px 是真实工作点定位噪声地板($\sigma_{\text{det}}$≈0.023px 是理想条件地板,低估 ~5×);其中系统偏差 var(b) 仅 1.5–3.3% 且减之无效 ⇒ 残差 ≥97% 是逐图随机噪声。 系统是模型受限(五杠杆 + 联合 BA 零增益、本节残差校正零增益三重佐证),而是检测噪声受限;降 $\sigma_{\text{real}}$ 只能靠检测侧亚像素窗口(已收回 ~7%)或硬件。

4.9 $\sigma_{\text{det}}$ 的测法辨析:位置不变性实证 + 决定性未来实验

(A) 连拍的真正价值 = 剥离模型偏差

同一位置连拍 N 张,位姿固定 ⇒ 模型投影/畸变误差跨帧不变,在「跨帧 std」里相互抵消,剩下的只是纯传感器 + 亚像素定位噪声;单张图里噪声与模型偏差叠在一起,分不开。故 $\sigma_{\text{det}}$ 的用途 = 「模型若完美时的传感器渐近下界」,是 Fisher CRLB 的理想噪声分母——单理想位置连拍测它是下界设计,不是缺陷;工作点噪声须用 $\sigma_{\text{real}}$。

(B) 位置不变性实证

sigama/ 的 5 组连拍位置不同(板心从画面一侧扫到另一侧),但全部落在中央、光照好的带。逐组算 $\sigma_{\text{det}}$(每组 100 帧):

相机 5 位置 $\sigma_{\text{det}}$(px) 跨位置 spread 池化(=) 5 位置板心范围(归一化像框)
cam1 0.0231 / 0.0226 / 0.0212 / 0.0228 / 0.0164 0.0067 0.0213 x 0.53–0.78, y 0.53–0.67
cam2 0.0249 / 0.0262 / 0.0268 / 0.0246 / 0.0196 0.0072 0.0244 x 0.29–0.56, y 0.55–0.67
cam3 0.0281 / 0.0239 / 0.0243 / 0.0194 / 0.0188 0.0093 0.0231 x 0.49–0.54, y 0.52–0.72
cam4 0.0253 / 0.0241 / 0.0216 / 0.0212 / 0.0218 0.0041 0.0228 x 0.50–0.62, y 0.56–0.75

跨位置 spread ≤ 0.01px(四机最大 0.0093)—— $\sigma_{\text{det}}$ 是个低方差、在中央带几乎不变的稳定估计;5 个位置全在中央带(归一化 x 多在 0.3–0.8、y 0.5–0.75,无极端边角),板都正对、光照好。

⇒ $\sigma_{\text{det}}$ 到 $\sigma_{\text{real}}$ 的 5× 差距(~0.1px)是位置 spread(~0.01px)的 10–20×,不可能由「测的位置略偏」或「$\sigma_{\text{det}}$ 估计本身有噪声」解释,唯一来源是采样区制不同:连拍只采到中央/正对/光照好的理想区制(那里纯噪声 ~0.02px),而标定/测试跨边缘/倾斜/远距/暗光(那里纯噪声更高)。故 $\sigma_{\text{det}}$ 是理想区制的下界,其低估是区制覆盖问题而非估计问题;连拍只要还停在中央带,「多位置加权平均」也关不掉这个 gap(位置不变性已证),要关掉它就得在边缘/倾斜/远距姿态上连拍——那等于重测 $\sigma_{\text{real}}$。这正是 CRLB 分母用 $\sigma_{\text{real}}$ 而非「更准的 $\sigma_{\text{det}}$」的原因。

© 决定性未来实验:标定姿态上的逐位置连拍

边界:var(b) 只测了空间固定的系统偏差,逐图(姿态)变化的模型偏差会躲进「随机」桶,故「非模型受限」依赖「$\sigma_{\text{real}}$ ≈ 纯噪声」的假设。下列实验能直接证实它(现有数据做不到):在(部分)标定姿态上各连拍 ≥10 张而非单帧;分离原理——同位姿跨帧 std = $\sigma_{\text{pure}}$(pos)(模型偏差跨帧抵消),同位姿单帧 RMS = √($\sigma_{\text{pure}}$² + $\sigma_{\text{model}}$²),差即该位姿模型偏差。若 $\sigma_{\text{pure}}$ ≈ 0.12px ⇒ $\sigma_{\text{model}}$≈0、「非模型受限」得到印证;若 $\sigma_{\text{pure}}$ ≈ 0.05px、余 ~0.1px 为模型偏差 ⇒ 存在隐藏模型杠杆。仅需重新采集、不改算法。现有证据(残差校正场 0% 增益 + 深度实测/CRLB($\sigma_{\text{real}}$)≈0.6–1.0)已强烈支持前者。

5. 内参标定

目标:从干净标定池标定每台相机的内参 $\theta$(fx,fy,cx,cy + 畸变),并给出两个评估:训练 RMS(拟合好坏)与独立测试集泛化 RMS(真泛化能力,防过拟合)。同时用 10 折交叉估计参数不确定度(供对比 Fisher CRLB)。

承接上游😦§4):噪声地板 $\sigma_{\text{det}}$≈0.023px(逐机 0.021–0.024)、真实工作点噪声 $\sigma_{\text{real}}$≈RMS≈0.12px($\sigma_{\text{real}}$/$\sigma_{\text{det}}$≈5.3×)。本节标定用 $\sigma_{\text{real}}$ 为判据**(测试泛化 RMS 应贴 $\sigma_{\text{real}}$ 地板、而非 $\sigma_{\text{det}}$),§5.6 的 Fisher CRLB 用 $\sigma_{\text{det}}$ 建分母再按 §10 重标 $\sigma_{\text{real}}$。

方法:

  1. 标定=解超定方程 $\min_\theta \sum \lVert\text{检测}-\text{投影}\rVert^2$(OpenCV calibrateCamera,LM 最小化重投影残差)。先用 5 参 Brown 稳健标定得初值,再按相机选畸变模型重标(模型阶用测试泛化 RMS 选,非训练 RMS —— 后者随参数增多单调降=过拟合):cam1/2(4MP)用 rational(k4-6)(测试 RMS 比 brown5 低 ~32%、且 brown5 训练 RMS 翻倍=拟合不足,见下文「畸变模型对比」);cam3/4(2MP)Brown 已贴 CRLB、加 rational 几乎无增益,保留 5 参 Brown 省自由度。
  2. 10 折交叉:随机分 10 份、留一折标定,跨折 $\theta$ 的 std(ddof=1) = 经验不确定度(真数据 Monte Carlo,供比 Fisher CRLB)。
  3. 测试泛化:固定 $\theta$,对独立测试集(5 距离)每图 solvePnP → 重投影 RMS。

5.1 标定数据与训练/测试 RMS

数据(auto 亚像素窗口已部署,;测试距离列为真实三角化深度 cam1-Z 中位 1.18/1.51/2.03/2.40/2.83m,对应标称 1/1.5/2/2.5/3m):

cam 模型 fx rms(训练) 测试1.18m 测试1.51m 测试2.03m 测试2.40m 测试2.83m
cam1 rational 2035.9 0.120 0.093 0.085 0.108 0.124 0.136
cam2 rational 2040.9 0.125 0.092 0.105 0.111 0.099 0.106
cam3 brown5 1345.8 0.122 0.134 0.134 0.136 0.142 0.146
cam4 brown5 1346.8 0.118 0.139 0.137 0.122 0.125 0.150

stage3
左:fx;中:训练 RMS;右:测试泛化 RMS by 距离。测试 RMS = 真实逐图定位噪声 $\sigma_{\text{real}}$,auto 后 0.10–0.14px。

5.2 最终内参与测试泛化

最终内参 $\theta$ ± 10 折不确定度(交付值;auto 亚像素窗口已部署,值 ± kfold $\sigma$):

参数 cam1 (rational) cam2 (rational) cam3 (brown5) cam4 (brown5)
fx 2035.9 ± 0.33 2040.9 ± 0.24 1345.8 ± 0.25 1346.8 ± 0.56
fy 2025.6 ± 0.34 2029.9 ± 0.24 1346.3 ± 0.22 1347.9 ± 0.64
cx 1264.4 ± 0.13 1268.0 ± 0.10 966.4 ± 0.26 936.9 ± 0.75
cy 767.1 ± 0.16 733.4 ± 0.25 520.1 ± 0.33 550.7 ± 0.43
k1 4.63 ± 0.58 3.22 ± 0.26 −0.398 ± 0.001 −0.393 ± 0.002
k2 3.36 ± 1.41 −0.54 ± 0.54 0.207 ± 0.002 0.194 ± 0.004
p1 1e-4 ± 0 1e-4 ± 0 −0 ± 0 −1e-4 ± 0
p2 −1e-4 ± 0 1e-4 ± 0 1e-4 ± 0 −3e-4 ± 1e-4
k3 0.30 ± 0.22 −0.32 ± 0.08 −0.062 ± 0.001 −0.053 ± 0.003
k4 5.41 ± 0.58 4.01 ± 0.26
k5 6.06 ± 1.85 1.06 ± 0.73
k6 1.44 ± 0.88 −1.03 ± 0.32

读法:fx/fy/cx/cy 精度 < 1px(主参稳定);畸变项 cam1/2(rational)kfold $\sigma$ 大(k1-k6 间高度相关,近退化,① cond≈10⁸),但不影响成像精度(证非可降 RMS);cam3/4(brown5)畸变项 $\sigma$ 极小(参数稳定)。p1/p2(切向)≈0(镜头无显著切向畸变)。rational 的薄棱镜 s/倾斜 τ 未开 flag 时恒 0,实为 8 参 rational,无过拟合。

测试泛化 RMS(test pooled,5 距离均值):cam1 0.109 / cam2 0.102 / cam3 0.138 / cam4 0.135 px —— 四机均 ≤ 训练 RMS(0.118–0.125),无过拟合。完整 $\theta$(含恒零的薄棱镜 s / 倾斜 τ)见 outputs/intrinsics.json

5.3 畸变模型选型:cam1/2 用 rational 的依据

这一节回答:cam1/2(4MP)为什么不用更简单的 5 参 Brown,而要多上 3 个径向系数(k4-6)?做法 = 固定其余一切,唯一变量是畸变模型:同一份 good pool、同一 5 参 Brown 初值、同一独立测试集,分别用 brown5($\theta$ 长 9)与 rational($\theta$ 长 12)标定,比训练 RMS、分距离测试 RMS、kfold $\sigma$。结论只有一个 —— brown5 是"拟合不足",不是"防过拟合"

cam 模型 fx 训练 RMS 测试1.18m 测试1.51m 测试2.03m 测试2.40m 测试2.83m 测试均值
cam1 rational(8参) 2035.9 0.120 0.093 0.085 0.108 0.124 0.136 0.109
cam1 brown5(5参) 2041.0 0.260 0.181 0.184 0.150 0.147 0.140 0.160
cam2 rational(8参) 2040.9 0.125 0.092 0.105 0.111 0.099 0.106 0.102
cam2 brown5(5参) 2030.1 0.249 0.215 0.181 0.123 0.122 0.118 0.152

model_compare
cam1/cam2 分距离测试 RMS:brown5 在全部 5 个距离都高于 rational(均值 +47%)。

model_compare_theta
(a) 训练 vs 测试 RMS:brown5 训练 RMS 也高一倍(0.26 vs 0.12)—— 模型本身拟合不了,不是过拟合;(b) 径向畸变系数:brown5 把畸变硬塞进 k1-3,与 rational 的 k1-6 数值完全不同(不可逐参比,只比净畸变曲线)。

cam1/2 的 brown5 完整内参 $\theta$ ± 10 折 $\sigma$(对照 rational 表):

参数 cam1 brown5 cam1 rational cam2 brown5 cam2 rational
fx 2041.0 ± 1.95 2035.9 ± 0.33 2030.1 ± 2.44 2040.9 ± 0.24
fy 2029.0 ± 2.23 2025.6 ± 0.34 2019.3 ± 1.79 2029.9 ± 0.24
cx 1280.9 ± 2.32 1264.4 ± 0.13 1262.0 ± 2.75 1268.0 ± 0.10
cy 758.1 ± 3.45 767.1 ± 0.16 734.5 ± 1.74 733.4 ± 0.25
k1 −0.633 ± 0.002 4.63 ± 0.58 −0.630 ± 0.002 3.22 ± 0.26
k2 0.486 ± 0.005 3.36 ± 1.41 0.483 ± 0.005 −0.54 ± 0.54
k3 −0.186 ± 0.004 0.30 ± 0.22 −0.184 ± 0.004 −0.32 ± 0.08

深度解读(为何 brown5 不行):

  • 训练 RMS 翻倍 = 拟合不足,非过拟合。过拟合的特征是"训练低、测试高";这里 brown5 训练就高(0.26),测试更高(0.16)——5 参 Brown 根本表达不了 4MP 机的畸变场。rational 多出的 k4-6(3-5-7 阶径向)把这部分残差吃掉,训练测试降。
  • 主参 kfold $\sigma$ 激增 = 模型误设的信号。brown5 的 fx/fy/cx/cy kfold $\sigma$ = 1.7–3.5px,是 rational(0.13–0.34px)的 ~10–20×。机理:畸变模型不对时,优化器强迫焦距/主点去"吸收"未被建模的高阶径向残差 ⇒ 这些本该稳定的主参在折间剧烈飘移。这是模型设定错误(model misspecification)的教科书症状——参数不稳不是因为数据差,而是因为模型容器装不下真实畸变。
  • 主参数值都漂了:brown5 cx=1280.9 vs rational 1264.4(差 16px)、fx 差 4-6px。说明畸变模型的选择会反噬到主参估计,不选对就连 fx 都不可信。
  • k1 数值不可逐参比:brown5 k1=−0.63 vs rational k1=4.63 —— 两模型把同一物理畸变分配到不同阶数的系数里,逐项比无意义;要比就比净畸变曲线(即上图测试 RMS,它才是成像口径)。

结论:cam1/2 选 rational 不是"多参换精度"的奢侈,而是物理必需——这两台 4MP 机的畸变场含 Brown 5 参之外的高阶径向分量,5 参既拟合不了训练集、主参又因吸收残差而失稳。cam3/4(2MP)分辨率低、角点噪声大,Brown 5 参已贴 CRLB、k4-6 不可辨识(零增益),故保留 5 参省自由度(杠杆实验已证)。模型选型 = 用独立测试 RMS 选阶,非训练 RMS(后者随参增多单调降,会误选过参模型)。

5.4 实验:鱼眼模型试算

畸变模型再丰富一档是否还能降 test RMS:用 cv2.fisheye(8 参数 Kannala-Brandt)
在同一标定角点集标定,在独立测试集比 test RMS(lib/exp_fisheye.py,2 图 + JSON)。
test RMS 用「fisheye.undistortPoints → 归一化光线 → solvePnP(I,0) → fisheye.projectPoints」三步,
与现行模型的 solvePnP+projectPoints 评估口径一致。

相机 现行模型 test pooled RMS 鱼眼 test pooled RMS 相对增益 鱼眼 K 折留出 RMS
cam1 (rational) 0.109px 0.108px +1.0% 0.104px
cam2 (rational) 0.102px 0.104px −1.4%(鱼眼更差) 0.113px
cam3 (brown5) 0.138px 0.136px +1.7% 0.113px
cam4 (brown5) 0.135px 0.131px +3.1% 0.107px

结论:不值得切换。四机相对增益均在 ±3.1% 内(远未达"切换阈值" 5%),且 cam2(最高分辨率)
鱼眼反而更差。物理上 cam1/2 视场 ≈64°、cam3/4 ≈71°,均非鱼眼镜头(鱼眼 >100°),强套
Kannala-Brandt 径向模型无优势。这与全文主诊断一致:模型不是瓶颈,换更丰富畸变提不了精度。

fisheye fisheyekf

左:pooled test RMS 鱼眼 vs 现行,基本并列(cam1 鱼眼略高);右:K 折留出 RMS 鱼眼 ≥ 现行 train RMS,无泛化优势。

5.5 10 折交叉验证:经验不确定度

方法(经验 Monte Carlo 不确定度):把每机 good pool(~146–158 张)随机均分 10 份;每次留 1 份作验证、其余 ~130 张标定得 $\theta_k$;跨 10 折 $\theta_k$ 的 std(ddof=1) = 该参数的经验不确定度(回答"如果重新采集等量数据,$\theta$ 会飘多少")。最终 $\theta$ = 全 good pool 标定(用全部数据,精度最高);kfold $\sigma$ 衡量 $\theta$ 的可重复性。固定随机种子(seed=42)保证可复现。

结果图表:

kfold_detail
逐参数 kfold $\sigma$ 分组柱(4 相机 × 9/12 参数,对数纵轴)。主参(fx/fy/cx/cy)<1px;畸变项 cam1/2(rational)$\sigma$ 大(参数间近退化),cam3/4(brown5)$\sigma$ 极小。

kfold_ratio
kfold $\sigma$ / Fisher CRLB($\sigma_{\text{det}}$) 比值热图:fx 比值 24–81×($\sigma_{\text{det}}$ 口径);换 $\sigma_{\text{real}}$ 后 4.7–15.6×(参数非唯一)。

解读:

  • 主参 fx/fy:kfold $\sigma$ 0.24–0.64px ⇒ 焦距估计稳健(重采等量数据,fx 飘 <0.65px ≈ 0.03%)。
  • cx/cy:kfold $\sigma$ 0.10–0.75px ⇒ 主点稳定;cam4(2MP)最差($\sigma_{cx}$ 0.75px,疑似对焦略逊)。
  • 畸变项:cam3/4(brown5)kfold $\sigma$ ~0.001(极稳);cam1/2(rational)kfold $\sigma$ ~0.5–1.8(看似散,但 k1–k6 高度相关,实际成像不受影响,证零增益)。
  • kfold/CRLB($\sigma_{\text{real}}$) ≈ 5–16×(fx):比理论下界($\sigma_{\text{real}}$ 口径)宽,残余 = Brown 近退化的参数非唯一性(①),非可降 RMS。

5.6 内参 Fisher 合理性:理论下界 vs 经验散布

目标:用 Fisher 信息理论问"单次标定的内参 $\theta$ 理论上能定多准"(CRLB 下界),再与 10 折经验散布(真数据重采样下 $\theta$ 实际飘多少)对比。两者比值 →1 ⇒ 噪声受限(已达理论极限);≫1 ⇒ 有超出噪声的散布。

方法(三种 Fisher 之一):待估 β=$\theta$(9/12 内参),干扰 γ=每图 6 参外参;对 [β,γ] 全列数值中心差分雅可比 J → 信息阵 I=$J{\mathsf{T}}\Sigma{-1}J$ → Schur 补消外参得内参边际信息 $I_\beta=A-BC{-1}B{\mathsf{T}}$ → $\mathrm{CRLB}\theta=\sqrt{\operatorname{diag}(I\beta^{-1})}$。经验对照 = 10 折跨折 $\theta$ std。

数据(CRLB 用 $\sigma_{\text{det}}$ 建分母,故「比值($\sigma_{\text{det}}$)」列虚高 ~5.3×;诊断须看 fx k/CRLB($\sigma_{\text{real}}$) 列):

cam k折σfx CRLB fx($\sigma_{\text{det}}$) 比值($\sigma_{\text{det}}$) fx k/CRLB($\sigma_{\text{real}}$) 诊断($\sigma_{\text{real}}$ 口径)
cam1 0.332 0.0074 45× 8.0× 噪声受限;残 8×=参数非唯一
cam2 0.242 0.0100 24× 4.7× 同上
cam3 0.251 0.0076 33× 6.3× 同上
cam4 0.561 0.0069 81× 15.6× cam4(2MP)参数最不稳

stage4

「比值($\sigma_{\text{det}}$)≫1 ⇒ 模型/数据受限」不成立:CRLB 分母用 $\sigma_{\text{det}}$(静态≈0.023px),而真实逐图噪声 $\sigma_{\text{real}}$≈RMS≈0.12px 是其 ~5.3×,CRLB∝$\sigma$ 线性 ⇒ 比值被同比放大。$\sigma_{\text{real}}$ 口径下 fx k/CRLB 仅 4.7–15.6×,残差 = Brown 近退化的参数非唯一性(非可降 RMS)。主结论 = 检测噪声 $\sigma_{\text{real}}$ 受限,非模型受限。畸变项(k1–k6)CRLB 因 cond≈10⁸ 不可靠,不作诊断。

5.7 内参最终结果与不确定度

最终结果——交付 $\theta$ = 用全部 good pool 训练数据一次性标定(每机 ~146–158 张)。⚠ 10 折 kfold 仅用于估计不确定度:每折留 1 份、用其余 90% 数据标定,跨折 $\theta$ 的散布即 kfold $\sigma$;最终交付的 $\theta$ 用 100% 数据(精度最高),与 kfold 估计相互独立。下游 §6/§7 消费此 $\theta$;± = kfold $\sigma$。

主参 fx/fy/cx/cy(px):

cam 模型 fx fy cx cy 测试RMS(px)
cam1 rational 2035.9 ± 0.33 2025.6 ± 0.34 1264.4 ± 0.13 767.1 ± 0.16 0.109
cam2 rational 2040.9 ± 0.24 2029.9 ± 0.24 1268.0 ± 0.10 733.4 ± 0.25 0.102
cam3 brown5 1345.8 ± 0.25 1346.3 ± 0.22 966.4 ± 0.26 520.1 ± 0.33 0.138
cam4 brown5 1346.8 ± 0.56 1347.9 ± 0.64 936.9 ± 0.75 550.7 ± 0.43 0.135

畸变系数(cam1/2 rational = k1–k6;cam3/4 brown5 = k1–k3;切向 p1/p2 全机 |·|<3e-4 可忽略,未列。⚠ 逐参 kfold $\sigma$ 大 = 参数高度相关/近退化,勿逐参比,看净畸变曲线 = 测试 RMS):

cam k1 k2 k3 k4 k5 k6
cam1 4.63 ± 0.58 3.36 ± 1.41 0.30 ± 0.22 5.41 ± 0.58 6.06 ± 1.85 1.44 ± 0.88
cam2 3.22 ± 0.26 −0.54 ± 0.54 −0.32 ± 0.08 4.01 ± 0.26 1.06 ± 0.73 −1.03 ± 0.32
cam3 −0.398 ± 0.001 0.207 ± 0.002 −0.062 ± 0.001
cam4 −0.393 ± 0.002 0.194 ± 0.004 −0.053 ± 0.003

($\theta$ 与 §5.2 表同源——§5.2 为标定过程讨论用、本卡为交付 canonical;完整 $\theta$ 含 p1/p2 见 outputs/intrinsics.json::theta。)

不确定度:

  • 经验(10 折 kfold $\sigma$):主参 fx/fy/cx/cy = 0.10–0.75px(上表 ± 列)≈ fx 的 0.03%,即"重采等量数据,$\theta$ 最多飘这么多"。cam4 最大($\sigma_{cx}$ 0.75px,2MP 对焦略逊)。
  • 理论下界:fx CRLB($\sigma_{\text{real}}$)≈ 0.04–0.05px(§5.6);kfold 高出 4.7–15.6× = Brown 近退化的参数非唯一性残余(净畸变曲线确定、单系数不定),五杠杆零增益已证非可降 RMS。
  • 畸变项 k1–k6:信息阵 cond≈10⁸,逐参不确定度不可靠;只有 fx/fy 可作诊断,畸变项看净畸变曲线(即测试 RMS)。

结果怎么来的(方法溯源):

  1. 数据:每机 good pool ~146–158 张干净标定图(stage1 按重投影/对称性筛选,§4)。
  2. 标定(交付 $\theta$ 就此步产物):5 参 Brown 稳健初值(calibrate_robust)→ 按相机选畸变模型、用全部 good pool 重标(cam1/2 rational、cam3/4 brown5;模型阶由独立测试 RMS 选,非训练 RMS)→ OpenCV cv2.calibrateCamera(LM)最小化重投影残差 $\min_\theta\sum_{\text{images}}\sum_{\text{corners}}\lVert\text{检测}-\text{投影}\rVert^2$,每图配 6DOF 板位姿。
  3. 不确定度(独立步骤):10 折 kfold——随机分 10 份、留 1 折用其余 9 折标定,跨折 $\theta$ 的 std(ddof=1);不参与交付 $\theta$,只产 kfold $\sigma$
  4. 验证三联:① 测试 RMS ≤ 训练 RMS(无过拟合);② kfold $\sigma$(可重复性);③ Fisher CRLB 合理性(§5.6)。
  5. 产物:outputs/intrinsics.json::theta(cam1/2 长 12、cam3/4 长 9)+ kfold_std + test_rms_by_distance

结论与可靠性:四机测试 RMS(0.102–0.138px)均 ≤ 训练 RMS ⇒ 无过拟合,内参在检测噪声 $\sigma_{\text{real}}$ 地板上($\sigma_{\text{model}}$≈0),不引入额外误差。可靠性边界:① $\sigma_{\text{real}}$ ≈ 0.12–0.14px 带约 10% 估计不确定 ⇒ kfold/CRLB 比值 ±10%,不改变「噪声受限」定性;② kfold 是有限样本 MC(~150 张/10 折),$\sigma$ 本身 ±15% 统计涨落;③ 测试仅覆盖 1.18–2.83m,超范围畸变外推未测。模型侧唯一已兑现增益 = cam1/2 rational(测试 RMS −32%);进一步压 RMS 须检测侧(对焦/4MP/亚像素/打光)。

下游引用:§6 外参冻结此 $\theta$(不参与优化)、§7 三角化用此 $\theta$ 的 K/dist 去畸变——后续全文「内参」均指本结果。

6. 外参标定

目标:把 4 台相机统一到一个刚性 rig 坐标系 —— 求 cam1→cam2/3/4 的相对位姿(基线 + 朝向),即 rig 外参。cam1 定为原点,其余三台的基线就是 rig 的几何骨架,后续三角化精度全靠它(基线越长,深度越准)。

承接上游😦§4/§5)**:内参 $\theta$ 取 §5.7 最终值(cam1/2 rational、cam3/4 brown5,测试 RMS 0.102–0.138px ≈ $\sigma_{\text{real}}$≈0.12px 地板);外参 Fisher 与比较口径的噪声分母同 §4 的 $\sigma_{\text{det}}$(0.023px)建分母、§10 再按 $\sigma_{\text{real}}$/$\sigma_{\text{det}}$≈5.3× 重标。最终基线(cam1 原点)cam2/3/4 ≈ 1207/802/529mm,外参 CRLB≈69nm ⇒ 外参过定、从不构成瓶颈(见 §6.4)。

分两步,且分开讲:① 角点序消歧—— 棋盘对称性引入的歧义必须先解决,否则后续所有外参估计都会得到镜像解;② rig 外参估计—— 消歧后,用三种逐步耦合的方案估计 cam1→cam2/3/4 相对位姿并交叉验证,给出结果与置信度。

6.1 角点序消歧(chessboard 180° 对称)

棋盘有 180° 旋转对称 —— 同一幅角点图,角点序 (0,1,…,87) 与翻转序 (87,86,…,0) 都合法。单台相机无法分辨自己拿到的是哪种序;若直接拿翻转序去算位姿,得到的是镜像板姿态。两台相机各自独立选序时,一旦一台正序、一台反序,导出的相对位姿就是镜像外参 ⇒ 三角化深度符号翻转。

解法(rig 刚体约束):rig 是刚体 ⇒ cam1→cj 的相对位姿跨所有快照应为常数。对每个快照、每台相机算正序/反序两套 PnP 位姿,枚举组合,按「相对位姿跨快照一致」聚类选出全局自洽的角点序。关键:聚类必须联合平移 t 与旋转 R(阈值 30mm + 3°);只按平移聚类会把镜像/翻转姿态错误合并(镜像解的平移可能相近,但旋转差一个翻转)⇒ 镜像外参 ⇒ 深度翻号。

消歧后 4 机角点序跨机一致、无翻转;这正是下面四套方案都能算出自洽外参的前提(四方案复用同一消歧逻辑)。

6.2 rig 外参估计:四方案对比

估计 cam1→cam2/3/4 的相对位姿(外参)有四条路径,构成一个耦合度递增的阶梯:方案一(零耦合,三对独立)→ 方案二(外参联合、内参冻结)→ 方案三(内外参全联合)→ 方案四(贝叶斯:全联合 + 内参高斯先验)。四方案并置有两个用途:① 方法独立的交叉验证——方案一(逐对 PnP+聚类)与方案二(联合 BA)原理完全不同,若亚毫米自洽即外参正确性的强证据(非单一方法产物);② 主动探测可辨识性边界——方案三放开内参暴露 fx↔tz 不可辨识,方案四用高斯先验软钉该方向、塌缩回冻结解(§6.6),从而从两侧印证"生产应冻结内参"(非教条,是可辨识性实证;公平口径下四方案深度全持平、横向 J 边际更优,见 §6.2.5)。下面先详述每方案做法,再统一对比。

6.2.1 方案一:两两锚定法(pairwise anchor)

做法(_pairwise_extrinsics / _collect_pair_snaps / _pairwise_est):

  1. 世界系锚定:cam1 = 原点(R=I, t=0)。
  2. 逐对收集:对每个 cj∈{cam2,3,4},收集 cam1 与 cj 都检出角点的同步快照(两机重叠即可,不要求其他相机在场)。
  3. 逐快照双解:每快照对 cam1、cj 各 solvePnP 得绝对位姿。棋盘 180° 对称使 cj 角点序有两解 ⇒ 对 cj 的正序 / 反序各解一次,得相对位姿候选 (Rn,tn)(Rf,tf);cam1 用正序锁世界系。
  4. 联合 t+R 聚类消歧:把全部正/反候选(2N 个)投到(平移,旋转)联合空间,找最稠密簇(阈值 ‖Δt‖<30mm 旋转角<3°,同 );簇心 = 一致解。
  5. 逐快照选向 + 聚合:每快照取距簇心较近的(正或反,度量 ‖Δt‖+50·旋转角);簇内旋转取 chordal 平均(弦平均)、平移取欧氏平均 ⇒ cj 外参。三机各自独立完成,无联合优化、无共享板位姿。

结果(experiment_extrinsic_schemes.json::scheme1_pairwise):

相机 基线(mm) 成对重投影 RMS 内点/总快照 跨快照基线 std 旋转 std
cam2 1206.99 0.458 px 113/113 3.04 mm 0.13°
cam3 801.41 0.346 px 120/121 2.95 mm 0.22°
cam4 528.27 0.394 px 123/123 3.74 mm 0.17°
  • 独立测试集:训练 rig-RMS 0.402 px、测试 rig-RMS 0.225 px(1m 0.172 / 1.5m 0.104 / 2m 0.236 / 2.5m 0.283 / 3m 0.356)。内参冻结 ⇒ 无单机测试项。
  • 特点:最简单、零耦合、无过拟合风险;缺点是不融合多机证据,单快照 PnP 噪声大(跨快照基线 std ~3mm),靠 100+ 快照平均压不确定度。核心价值 = 方法独立的生产交叉验证基线。
6.2.2 方案二:部分重叠冻结内参 BA(partial-overlap frozen-intr BA)

做法(读 experiment_partial_overlap.json::scheme2_B;实现 = _build_partial_snaps + _bundle_adjust_sub):

  1. 冻结内参😒\theta$ 固定为标定结果,整个估计不动内参(外参与内参解耦)。
  2. 扩样到 ≥2 机重叠:收集所有 cam1 在场 + 至少 1 台他机在场的快照(2/3 机检出都算,不限四机同检)——比方案一更融合,同一快照可同时约束多机。
  3. 角点序消歧:每快照用 all-4 BA 方案做参照(_disamb_snapshot)统一角点序 ⇒ 规范板角点 + 一个初始板位姿。
  4. 联合 BA(_bundle_adjust_sub,scipy LM):待估 = {cam2/3/4 外参(各 6 自由度,共 18)} + {每快照板位姿(6 自由度/快照)},最小化全部多机重投影残差。关键:共享板位姿公式天然支持变相机子集——每快照残差项只含它在场的相机,故 2/3/4 机快照都贡献约束,无需四机齐全。
  5. 生产采用:现行 stage5 用其四机同检子集(96 快照)产出下游外参;本方案的 ≥2 机全集(139 快照)是其上界估计。

结果(scheme2_partial,139 个 ≥2 机快照、671 条成对观测):

相机 基线(mm)
cam2 1207.10
cam3 801.58
cam4 528.63
  • 训练 rig-RMS 0.324 px;独立测试 rig-RMS 0.190 px(1m 0.147 / 1.5m 0.091 / 2m 0.204 / 2.5m 0.232 / 3m 0.299)。内参冻结 ⇒ 无单机测试项。
  • 特点:融合全部多机多快照证据、外参与内参解耦(不吸收内参误差、不过拟合);变子集公式把约束数据从「四机同检 96」扩到「≥2 机 139」。生产采用方案族(下游用 stage5 四机子集产出:基线 cam2/3/4 = 1206.9/801.6/528.7mm)。
6.2.3 方案三:内外参联合 BA(joint intr+extr BA)

做法(读 experiment_joint_ba.json::scheme2_J;实现 = _build_canon + _joint_bundle_adjust,freeze_intr=False):

  1. 在方案二基础上松开内参:待估 = {四机内参 $\theta$(9 或 12/机)} + {cam2/3/4 外参} + {每快照板位姿},全部一起联合 BA(共 552 参,scipy LM)。
  2. 动机:检验「放开内参、让内外参联合最优,能否进一步提升整体精度」——即内参与外参该联合估还是该解耦估
  3. 风险:参数空间从 18(+板位姿)暴涨到 552,引入新的不可辨识方向——尤其 fx↔tz(见诊断)。

结果(scheme3_joint,基线 cam2/3/4 = 1208.20 / 802.59 / 530.24 mm):训练 rig-RMS 0.216 px(四方案最低);单机测试 RMS 0.121 px(≈$\sigma_{\text{real}}$,内参本身泛化正常);cam1 fx 沿 fx↔tz 方向滑走 +2.68px=8.1$\sigma$,rig 基线同比例放大(三机均 +0.8~+1.3mm,系统偏高)。

端到端公平口径(full-system vs full-system:J 用自家内参+外参跑独立测试集多目三角化,lib/exp_joint_ba_test.py):

相机数 深度 z:S→J(mm) Δz 横向 xy:S→J(mm) Δxy
2 目 0.457→0.456 持平(−0.3%) 0.305→0.282 −7.5%
3 目 0.231→0.231 持平(+0.1%) 0.199→0.170 −14.5%
4 目 0.157→0.158 持平(+0.6%) 0.164→0.130 −20.6%
  • 深度持平(2/3/4 目 Δz 全 ±0.6% 内):深度在 $\sigma_{\text{real}}$ 噪声地板,任何标定侧手段都降不动。
  • 横向 J 一致优于 S(−7.5/−14.5/−20.6%,随相机数增大):联合 BA 松开内参后 rig 跨机旋转落到更优几何 ⇒ 横向收紧;相机越多越依赖跨机外参一致性 ⇒ 收益越大。
  • 为什么不直接用 J 作生产外参:① 横向改善的绝对量亚 0.1mm(横向本就优秀 0.08–0.35mm),统计一致但实际边际;② J 把 rig 基线系统性放大 +0.8~+1.3mm(三机同向,fx↔tz 病态方向的指纹 ⇒ 准确度顾虑);③ 参数从 18(+板位姿)暴涨到 552,过拟合风险(cam1 fx 滑 8$\sigma$)。收益不抵代价,生产仍选冻结内参。

jointba_test
左:深度 z J≈S 持平(BA 无增益,贴地板);中:横向 xy J 一致优于 S(BA 收紧外参);右:Δ%——深度~0、横向随相机数负向增大。

内参泛化判定:主指标用 rig 无关的单机测试 RMS(每张测试图每机独立 PnP+投影,完全不用外参,无法被共享板位姿过拟合)。它显示 J vs S 差 <0.004px ⇒ 内参没变好;端到端横向改善来自 rig 外参(独立参数),不来自内参。注意:多机 rig 拟合 RMS 会给 J 报 −44%(0.098px<$\sigma_{\text{real}}$ 物理不可能)——那是对共享板位姿过拟合的指标伪影,不可作判定,必须配单机泛化或端到端测试交叉验证。机理与信息椭球见 §6.6。

6.2.4 方案四:贝叶斯 BA(joint + 内参高斯先验)

做法(变体 P,_joint_bundle_adjust(freeze_intr=False, prior=…);代价加 MAP/Tikhonov 先验项 $\Sigma$($\theta$−$\theta$₀)²·$\sigma_{\text{real}}$²/$\sigma_{\text{prior}}$²,锚 $\theta$₀=§5 单目 $\theta$、宽 $\sigma_{\text{prior}}$=k 折 $\sigma$):同方案三放开内参,但用「单目已知的 fx」软钉住 J 暴露的 fx↔tz 病态方向——是方案二(硬冻结)与方案三(全自由)的中间路线,检验「软约束能否兼得稳定与精度」。

结果(scheme4_bayesian):cam1 fx 仅移 +0.19px(0.6$\sigma$,方案三的 1/13)、基线相对 S 偏差回到 10⁻³ 量级(+0.002/+0.002/−0.019%)、单机测试 RMS 0.1221 px(≈方案二 0.1220)。先验 ≈ 冻结:把病态方向钉住后,P 塌缩回 S,换不来精度(单目 fx 本就在 $\sigma_{\text{real}}$ 地板,无头部空间可挖)。机理与信息椭球见 §6.6。

6.2.5 四方案汇总

公平口径(full-system:各方案用自家内参+外参跑端到端测试集):深度四方案全持平(贴 $\sigma_{\text{real}}$ 地板,任何标定侧手段都降不动);横向 J 一致优于 S(−7.5/−14.5/−20.6%,随相机数增大,因横向依赖跨机外参一致性),但绝对量亚 0.1mm。

一张表看全(四方案全维度;基线 cam2/cam3/cam4 mm):

维度 方案一两两锚定 方案二部分重叠 BA(S) 方案三联合 BA(J) 方案四贝叶斯 BA(P)
耦合 / 待估 零耦合,3 个独立外参 外参联合,内参冻结 内外参全联合(552 参) 全联合 + 内参高斯先验
基线 cam2/cam3/cam4 1206.99/801.41/528.27 1207.10/801.58/528.63 1208.20/802.59/530.24 ≈ S
基线偏离均值(最大) 0.69 mm 0.33 mm 1.29 mm 0.28 mm
训练 rig-RMS (px) 0.402 0.324 0.216(最低) 0.250(pooled)
诚实单机测试 RMS (px) —(内参冻结) 0.122 0.121(正常) 0.122(≈S)
公平口径 深度 / 横向 基线方法 持平 / 基准 持平 / −7.5~−20.6% ≈ 方案二
cam1 fx 移动 0(冻结) +2.68px(8.1$\sigma$) +0.19px(0.6$\sigma$)
10 折基线 $\sigma_{\max}$ 0.103 mm 0.010 mm(最稳) 0.071 mm ≈ S
角色 方法独立交叉验证 生产采用 横向边际更优 / 对照 验证「先验≈冻结」

深度分析:

  1. 方法独立的亚毫米自洽(外参正确性的核心证据):方案一(逐对 PnP + t/R 聚类)与方案二(联合 BA)原理完全不同,却给出差 <0.4mm 的基线 ⇒ 外参是数据强约束下的真实解,非单一方法产物。方案三基线三机同向全正(+0.8~+1.3mm,rig 被系统性放大),方向与 fx↔tz(焦距偏大 ⇔ 距离偏远)一致——是参数非唯一的指纹;方案四的先验把这方向钉住,基线即回到 S。

  2. 公平口径:深度持平、横向 J 边际更优(§6.2.3 端到端表):深度在 $\sigma_{\text{real}}$ 地板四方案无差别;横向 J 一致优于 S。改善绝对量亚 0.1mm(横向本就优秀),且 J 基线被系统性放大(准确度顾虑)⇒ 收益不抵代价。

  3. 外参严重过定,不是瓶颈:四方案 10 折基线 $\sigma$ 全部 <0.11mm,在 529–1207mm 基线上是 10⁻⁴ 量级,比 Fisher CRLB(~72nm $\sigma_{\text{real}}$)大 10³–10⁴× 但绝对值极小。下游测试 rig-RMS(方案一/二 0.19–0.23px)由检测噪声 $\sigma_{\text{real}}$ 主导,不由外参主导(外参贡献比检测地板小 10⁴×)。

结论:J 横向边际更优但绝对量可忽略(亚 0.1mm);J 基线被系统性放大(+0.8~+1.3mm,两独立方法之外的高估 ⇒ 准确度顾虑);552 参过拟合风险(cam1 fx 滑 8$\sigma$)。生产选方案二(冻结),是「收益不抵代价」,非 J 不可用。联合 BA 的价值有二:① 公平口径下证明「冻结 vs 联合」在深度上无差别(反证深度已贴地板);② 主动暴露 fx↔tz 不可辨识(§6.6),印证「外参必须冻结内参估」。

外参四方案逐机基线
四方案逐机基线:方案一/二重合、方案三系统偏高 1.3mm;方案四≈方案二。

四方案 rig 几何叠加
rig 叠加俯视图(cam1 原点,各方案 rig 几何几乎重合)。

外参泛化
训练 rig-RMS(紫)vs 诚实单机泛化测试 RMS(红星,rig 无关):方案三训练最低、单机泛化正常(0.121px≈$\sigma_{\text{real}}$)。端到端公平口径见 §6.2.3 表。

外参 10 折
10 折基线 $\sigma$ vs Fisher CRLB(对数轴):各方案均远高于 CRLB 但绝对值 <0.11mm ⇒ 外参过定;方案二/四最稳($\sigma$≈0.01mm)、方案一/三中等($\sigma$≈0.07–0.10mm)。注意:方案三的 fx↔tz 非唯一性表现在 kfold $\sigma$(0.07mm < 方案一 0.10mm),而表现在上表「基线偏离均值」1.29mm 的系统性放大——是偏置,不是方差。

置信度评定(rubric:基线偏差 <1mm 且 kfold $\sigma_{\max}$ <1mm ⇒ High;否则按非唯一性降级):

方案 置信度 依据
方案一(两两锚定) High 偏差 0.69mm;kfold $\sigma_{\max}$=0.103mm;跨折稳定 ⇒ 过定强约束
方案二(部分重叠 BA) High 偏差 0.33mm;kfold $\sigma_{\max}$=0.010mm(最稳)⇒ 过定强约束
方案三(联合 BA) Med 公平口径横向边际更优但绝对量可忽略;基线被放大 1.29mm;cam1 fx 移 8.1$\sigma$ ⇒ fx↔tz 不可辨识 ⇒ 作对照,不作生产
方案四(贝叶斯 BA) High 先验钉住病态方向 ⇒ ≈方案二;验证「软约束≈硬冻结」,无精度增益但无漂移

6.3 生产外参:计算方法与数据

四方案对比选定方案二族 = 冻结内参的部分重叠 BA;本节给出下游实际消费的生产外参的完整计算方法与所用数据(最终数值结果与置信度评定见 §6.7)。生产实现 = lib/run_all.py::stage5,产物 = outputs/extrinsics.json::scheme2(96 张四机同检快照上的 BA 解;scheme1 为 BA 前的消歧均值,作初值与对照)。

计算方法(5 步):

  1. 世界系锚定:cam1 = rig 原点(R = I,t = 0)。所有相机位姿在 cam1 坐标系下表达。
  2. 逐快照双解 PnP:对每个四机同检同步快照、每台相机,用 cv2.solvePnP(迭代法)解板→相机绝对位姿;因棋盘 180° 对称,对每台再补解一次翻转角点序位姿,得正/反两套候选。
  3. 角点序消歧(联合 t+R 聚类):rig 是刚体 ⇒ cam1→cj 相对位姿跨快照应为常数。枚举所有正/反候选,在(平移,旋转)联合空间找最稠密簇(阈值 ‖Δt‖<30mm 旋转角<3°);簇心旋转取弦平均(chordal mean)、平移交由 BA 精修,得初值外参 scheme1,并为每快照、每相机标定正/反序。关键:必须联合 t+R——只按平移聚类会把镜像/翻转姿态错误合并 ⇒ 镜像外参 ⇒ 三角化深度翻号(曾踩坑)。
  4. 规范化角点 + 共享板位姿 BA:按消歧标签翻转角点得规范化角点集 canon;以 scheme1 为初值,scipy.least_squares(trf,稳健 Huber)联合优化 {cam2/3/4 外参 18 自由度 + 每快照共享板位姿 6 自由度},最小化全部多机重投影残差。内参 $\theta$ 全程冻结(= 结果,不参与优化 ⇒ 外参与内参解耦,避免 fx↔tz 不可辨识)。同一快照的板位姿被所有在场相机共享 ⇒ 多机证据在板位姿上自然融合。
  5. 相对位姿导出:rig 外参由各机绝对位姿换算:$R_{jw}=R_j R_1^{\mathsf{T}}$,t_jw = t_j − R_jw·t_1

数据:96 个四机同检同步快照(从 217 个同步快照筛出,if any(cam 未检出): continue);标定板 11×8 内角点、25mm 方格(core/base/board.yaml,square_size 为标称值,TODO 复测——仅缩放 t/CRLB 的绝对 mm,不影响比值结论);内参冻结 = cam1/2 rational、cam3/4 brown5。BA RMS = 0.295 px(96 快照、四机重投影),较消歧均值 scheme1 的 0.391 px 降 24%;消歧簇内翻转快照数 cam2/3/4 全为 0(数据干净,无歧义残留)。

stage5 rig3d
左:生产 rig 外参俯视图(cam1 原点)。右:同一 rig 的 3D 位姿(4 机光学中心 + 光轴朝向 + 板心视锥连线),梯形布局——cam1/cam2(4MP)顶宽边 1207mm、cam3/cam4(2MP)底窄边 340mm、高 ~380mm。

6.4 外参 Fisher:基线能定多准

目标:用 Fisher 信息问"rig 相对位姿(基线)能定多准"。把每快照板位姿(6/快照)+ 各机内参当干扰边缘化掉(Schur 补),得只含 rig 外参的边际信息 → 基线 CRLB。看外参是否过定(远小于基线 ⇒ 强约束 ⇒ 外参不是瓶颈)。

方法(三种 Fisher 之一):待估 β=rig 外参(3 机×[R,t]=18 参,cam1 参考),干扰 γ=板位姿(6×快照)+内参;对 [β,γ] 数值雅可比 → I=$J{\mathsf{T}}\Sigma{-1}J$ → Schur 补消 γ(把每快照板位姿 + 内参边缘化)→ $\mathrm{CRLB}{\text{rig}}=\sqrt{\operatorname{diag}(I\beta^{-1})}$。本节基线 CRLB 取自生产配置(方案二:冻结内参四机同检 BA);四方案外参 CRLB 同量级(贝叶斯 P ≈ 冻结 S,先验钉住尺度)。

数据($\sigma_{\text{real}}$ 口径为主:基线 CRLB≈69nm=$\sigma_{\text{det}}$ CRLB×5.3,$\sigma_{\text{real}}$ 是真实工作点噪声;$\sigma_{\text{det}}$ 对照 13nm 仅作渐近参考)。两口径均比深度地板低 10⁴×:

cam 基线(mm) 基线 CRLB ($\sigma_{\text{real}}$) $\sigma_{\text{det}}$ 对照 旋转 CRLB(°)
cam2 1206.9 0.000069mm(≈69nm) 13nm [0.42, 0.10, 0.33]
cam3 801.6 0.000069mm(≈69nm) 13nm [0.26, 0.19, 0.04]
cam4 528.7 0.000069mm(≈69nm) 13nm [0.18, 0.18, 0.05]

⇒ 基线 CRLB ≈69nm($\sigma_{\text{real}}$)($\sigma_{\text{det}}$ 下 13nm),比基线(529–1207mm)小 7–9 个量级外参几何强约束,严重过定,从不构成精度瓶颈(深度两项分解:外参对深度的贡献比检测地板小 10⁴×)。加相机/加快照对外参精度无意义;外参 CRLB 整体区间 68–72nm。

6.5 联合 BA 实验补充:S/J/P 三变体内参移动与过拟合警示

§6.2.3 已给出端到端公平口径(深度持平、横向 J 边际更优);本节补两组 §6.2.3 未展开的细节:内参移动实测BA 拟合 RMS 的过拟合陷阱,二者共同印证「必须用 rig 无关的单机泛化作主判定」。

S/J/P 三变体内参移动 + 过拟合对照(experiment_joint_ba.json;唯一变量 = 内参自由度):

指标 S(内参冻结) J(联合 BA) P(联合 + 内参先验) 判读
训练 RMS(pooled) 0.2336 0.2162 0.2501 J ↓7.5%(参数更多→轻度过拟合);P 反升(先验罚项抬成本)
诚实单机测试 RMS(rig 无关,主判定) 0.1220 0.1213 0.1221 J +0.61% / P −0.07%,均持平(内参没变好)
多机 rig 拟合 RMS(过拟合敏感) 0.1763 0.0981 0.1623 J ↓44% = 伪增益(0.098<$\sigma_{\text{real}}$≈0.12px 物理不可能)
cam1 fx 移动 +2.68px(=8.1$\sigma$) +0.19px(=0.6$\sigma$) fx↔tz 不可辨识;P 钉住(见 §6.6)
rig 基线相对变化 cam2/3/4 +0.09%/+0.12%/+0.28% +0.002%/+0.002%/−0.019% J 随 fx 同步缩放;P ≈ S

jointba1
训练 RMS 逐机(J 微降)、诚实单机测试 RMS 逐距离/逐机(J≈S 持平,主判定)、三指标增益对比(训练↓、诚实测试→0、多机 rig 拟合伪↓)。

jointba2
内参移动 Δ$\theta$(J−S),误差棒 = k 折 $\sigma$。cam1 fx +2.68px=8.1$\sigma$(远超误差棒),却对单机测试 RMS 零影响 ⇒ fx↔tz 不可辨识(参数非唯一),非系统修正。

过拟合警示:多机 rig 拟合 RMS 给 J 报 −44%(0.098px<$\sigma_{\text{real}}$≈0.12px 物理不可能),是它奖励对共享板位姿结构的过拟合(板位姿 6DOF/快照足以吸掉大量残差)。⇒ 凡用 BA 拟合 RMS 判"哪个方案更精",都需配 rig 无关的单机泛化端到端测试集测量(exp_joint_ba_test.py,§6.2.3)交叉验证,否则必被过拟合欺骗。这正说明为何 §6.2.3 端到端表才是联合 BA 的公平口径。

6.6 fx↔tz 尺度退化:联合 BA 基线为何被放大

J 让 cam1 fx 滑走 8$\sigma$ 却对成像零影响,这不是数值故障,而是信息几何的必然:联合参数空间存在一条几乎"免费"的方向,
优化器沿它漂移几乎不付重投影代价。几何机理、信息椭球实测、高斯先验反证三个角度共同印证这条方向 = fx↔tz 尺度协同漂移

(1) 几何机理:正对板时 fx 与板距精确等价(已知尺寸也救不了)

最干净的反例——板正对相机(法向 ∥ 光轴),针孔模型下角点投影像:

$u_i = f\cdot X_i / Z$, $X_i =$ 已知方格坐标(25mm 网格), $Z =$ 板距, $f =$ 焦距。

观测只依赖比值 $f/Z$。已知 $X_i$ 只是给定了像上图案的尺度,而该尺度被 $f/Z$ 完全吸收:令 $f\to\alpha f$、$Z\to\alpha Z$,每个投影像都不变
所以正对姿态下 (f, Z) 是精确的秩 1 退化——板的已知尺寸无法把 f 与 Z 分开。这正是 Zhang 平面标定"至少要 3 个不同倾斜姿态"
的根因。直觉"我知道方格是 25mm,所以尺度被钉死"只在板填满视场距离已知时成立;对一个 2m 外的小平面板,正对看它 = 看一个
“可整体缩放的图案”,尺寸信息退化为一个被 f/Z 吸收的标量。

倾斜才(微弱地)打破退化 —— 这就是"1/8"的由来。板倾斜 $\theta$ 时,板面各角点深度不同:横向位置 $X_i$ 处深度 $Z_i \approx Z_0 + X_i\sin\theta$,
投影像不再只是 $f/Z_0$ 的函数,板内深度展开提供了分离 $f$ 与 $Z_0$ 的杠杆。杠杆强度 = 板上深度展开 / 平均深度:

$L \approx (W\sin\theta) / Z_0$, $W =$ 板角点场跨度, $\theta =$ 倾角, $Z_0 =$ 工作距离。

本 rig:$W =$ (11−1)×25mm = 250mm(11 个内角点的长边跨度),$Z_0 \approx$ 2m(测试距离中位 1.18–2.83m),故几何上限
$L_{\max} = W/Z_0 = 250/2000 =$ 1/8;真实倾角($\theta\approx$ 20–40°,$\sin\theta\approx$ 0.3–0.6)只兑现其中的 $\sin\theta \approx$ 3–6%
Fisher 信息 ∝ L² ≈ 0.1–0.4%,CRLB 比典型方向松 ~15–25×。即:板的已知尺寸确实钉尺度,但只钉到 ~1/8 强度(正对姿态下甚至完全不钉)——
这是 fx↔tz 方向天生最弱的根源,而非标定做错了。

为什么单目没事、联合 BA 才出问题? 单目标定里 f 由多单应矩阵的代数结构(IAC 约束 $\omega=K{-\mathsf{T}}K{-1}$,≥3 姿态过定)钉住——那是强约束
(k 折 $\sigma$ 0.2–0.6px),不靠这条弱的尺度杠杆;且相机自身是世界原点(t≡0),没有额外的全局深度自由度。联合 BA 多出 rig 平移 t_c
(各机一个、跨全部快照共享)
,这些全局深度自由度可与 f_c 沿同一弱尺度方向协同漂移:所有 f_c 升 x%、所有深度(板距 + 基线深度)
升 x% ⇒ 单机重投影几乎不变(f/深度比守恒),但 rig 绝对尺度整体滑动 ⇒ 多目三角化的深度尺度被破坏
(而旋转/横向方向仍强约束,故见「BA 有效吗」第 2 层:横向有限改善、深度不动)。

(2) 信息椭球实测:最扁的轴正是尺度协同漂移方向

参数不确定椭球 = Fisher 信息的逆 C = $(J{\mathsf{T}}\Sigma{-1}J)^{-1}$。主轴 = C 的特征向量(= $J{\mathsf{T}}\Sigma{-1}J$ 的特征向量),半轴长 = $\sqrt{C\text{ 特征值}}$ = $1/\sqrt{\text{信息特征值}}$
做法:在 J 解处对全联合参数向量(内参+外参+板位姿)算重投影残差的数值雅可比 J → I = $J{\mathsf{T}}\Sigma{-1}J$($\sigma_{\text{real}}$)→ eigh(I)(升序)→
最小特征值 λ_min = 最弱方向(椭球最长轴),条件数 κ = λ_max/λ_min = 病态程度。(κ 与 $\sigma$ 无关——$\sigma$ 只整体缩放 I,不改特征向量与 κ。)

实测(20 快照子集控时;尺度退化是几何性质,与快照数无关,lib/exp_joint_ba.py::_joint_fisher_eigen):

含义
条件数 κ 4.8×10¹⁰ 联合问题严重病态:最扁轴比最强轴长 √κ ≈ 2.2×10⁵
最弱特征向量 ‖v‖² 组成 焦距 fx+fy 41% + 板距 t_z 58% + 其它 1% 99% 集中在"焦距+深度",即尺度协同漂移
最弱向 fx 分量符号 cam1/2/3/4 全同号 所有焦距同向移、深度反向移 = f/depth 比守恒的协同漂移

⇒ 联合信息椭球最扁的那根轴 = fx↔tz 尺度方向,被几何判定为全局优化的最弱点。优化器一旦沿它滑(哪怕几 $\sigma$),重投影不报警,
但绝对 rig 尺度已漂——这正是 cam1 fx 滑 8$\sigma$ 的数学身份。

ellipsoid
左:联合 Fisher 信息特征值谱(对数轴),最弱值比最强小 10¹⁰×。右:最弱特征向量组成——焦距 + 深度平移占 99%,证实最扁轴 = 尺度协同漂移方向。

(3) 高斯先验反证:钉住尺度方向 ⇒ 收敛回冻结解、零增益

若病根真是这条弱尺度方向,那么只用先验把它钉住(不冻结其余)就应让 J 收敛回 S。变体 P = 联合 BA + 内参高斯先验
(MAP/Tikhonov:代价加 $\Sigma$($\theta$−$\theta$₀)²·$\sigma_{\text{real}}$²/$\sigma_{\text{prior}}$²,锚 $\theta$₀ = §5 单目 $\theta$,宽 $\sigma_{\text{prior}}$ = k 折 $\sigma$,权重 $\sigma_{\text{real}}$/max(kfold$\sigma$, $\sigma_{\text{real}}$)):

J(全自由) P(联合 + 先验) S(冻结)
cam1 fx 移动 8.1$\sigma$(+2.68px) 0.6$\sigma$(+0.19px) 0(定义)
基线相对 S 偏差 cam2/3/4 +0.09 / +0.12 / +0.28% +0.002 / +0.002 / −0.019%(≈ S) 0
诚实单机测试 RMS 0.1213px 0.1221px(≈ S 0.1220) 0.1220px

先验把 fx↔tz 方向钉住后:fx 漂移 8$\sigma$ → 0.6$\sigma$、基线回到 S 的 10⁻³ 量级、单机泛化 P ≈ S(−0.07%,无增益)
先验 ≈ 冻结——用"单目已知的 fx"软钉病态方向,与硬冻结等价,换不来精度(单目 fx 本就在 $\sigma_{\text{real}}$ 地板,无头部空间可挖;
任何联合移动都是纯漂移而非改进)。先验权重调对(= k 折 $\sigma$)⇒ 塌缩成冻结;调松 ⇒ 漂移复来。

prior
逐机 Δfx(相对 S):J 漂移多 $\sigma$(cam1 8.1$\sigma$)、P 收敛回 0(误差棒 = k 折 $\sigma$)。先验把 fx↔tz 病态方向钉住 ⇒ P ≈ S,数值印证"先验 ≈ 冻结"。

三角度合一的结论:联合优化并非"处处不准",而是在 fx↔tz 尺度方向上病态(信息椭球最扁轴,κ ≈ 10¹⁰);
该方向天生最弱(板尺寸/距离 ≈ 1/8 的二阶杠杆,正对姿态下精确退化),rig 平移的加入让它成为全局最弱点。
高斯先验与冻结内参都是"砍掉这条方向"的等价手段(先验 = 软砍、冻结 = 硬砍)——生产取冻结(零超参、可审计)。
这从「估计」(P ≈ S)与「信息几何」(椭球最弱轴 = 尺度)两侧共同印证,并与「BA 有效吗」第 2 层互补:
尺度/深度方向病态(故深度无增益、贴地板),旋转/横向方向仍强约束(故横向有限改善)。注:本机理也是在线/自标定的正确架构——
若相机缓慢漂移需增量重标,用上一轮 $\theta$ 作高斯先验做 MAP 更新正是此处的 P 变体;对一次性静态标定则直接冻结更干净。

6.7 外参最终结果与不确定度

最终结果(生产外参 = 冻结内参四机同检 BA = outputs/extrinsics.json::scheme2,cam1 原点;下游 §7 消费此结果):

相机 t (mm) [x, y, z] 基线 |t| (mm) 旋转 R(相对 cam1,3×3,行优先)
cam1 [0, 0, 0] 0(原点) 单位阵 I
cam2 [−1154.98, 63.60, 344.73] 1207.0 [0.891, 0.042, 0.453; −0.045, 0.999, −0.005; −0.453, −0.016, 0.892]
cam3 [−699.77, 389.16, 37.12] 801.6 [0.967, 0.018, 0.254; 0.036, 0.978, −0.207; −0.252, 0.210, 0.945]
cam4 [−365.52, 378.77, −48.76] 528.6 [0.993, −0.032, 0.114; 0.054, 0.980, −0.194; −0.105, 0.198, 0.975]

完整精度(含 R 全部有效位、scheme1 初值)见 outputs/extrinsics.json。基线读数取 scheme2(BA 解);baselines_mm 字段记 scheme1(消歧均值,1206.88/801.63/528.65),两者差 <0.15mm。rig 几何:四机近似共面、cam1→cam2 横向展开 ~27°(最长基线),cam3/cam4 偏上偏近(短基线、收敛角小)。

不确定度:

  • 基线:10 折 kfold $\sigma$ = 0.010mm(方案二,生产,最稳)= 基线的 10⁻⁵;理论下界 CRLB($\sigma_{\text{real}}$)≈69nm($\sigma_{\text{det}}$ 13nm,§6.4),比 529–1207mm 基线小 7–9 个量级。
  • 旋转:10 折 std 0.13–0.22°;CRLB($\sigma_{\text{real}}$)亚弧秒级。
  • BA 精修(消歧均值 scheme1 → BA 解 scheme2):cam2 Δt=0.13mm/Δrot=0.008°、cam3 Δt=0.15mm/0.003°、cam4 Δt=0.10mm/0.002° ⇒ 三机均 <0.15mm / <0.01°,初值已近最优。
  • 方法间一致性:方案一(逐对 PnP)与方案二(联合 BA)基线差 <0.4mm(亚毫米自洽,正确性核心证据)。

结果怎么来的(方法溯源 = §6.3 的 5 步):96 个四机同检同步快照 → 联合 t+R 聚类消歧(§6.1)→ 冻结内参 $\theta$(§5.7)联合 BA {cam2/3/4 外参 18DOF + 每快照共享板位姿}。产物 outputs/extrinsics.json::scheme2

置信度(综合四证据 + BA 幅度)= High:

证据 量值 判读
方法独立交叉验证 方案一(逐对 PnP)与方案二(联合 BA)基线差 <0.4mm 外参是数据强约束的真实解,非单一方法产物
10 折重复性 $\sigma_{\max}$ 0.010mm(方案二,最稳) 跨折极稳 ⇒ 过定
BA 精修幅度 <0.15mm / <0.01° 初值已近最优 ⇒ 强约束
Fisher 基线 CRLB 13nm($\sigma_{\text{det}}$)/ ≈68–72nm($\sigma_{\text{real}}$) 比基线小 7–9 个量级 ⇒ 严重过定

结论与可靠性:外参严重过定(CRLB 69nm vs 529–1207mm 基线,裕度 7–9 量级),下游测试 rig-RMS(0.19–0.23px)由 $\sigma_{\text{real}}$ 主导、外参贡献比检测地板小 ~10⁴× ⇒ 外参从不构成精度瓶颈。可靠性边界:① 两方法共享检测噪声 ⇒ 亚毫米自洽不排除公共偏置(残余风险,缓解=联合 t+R 聚类 + §7 Fisher 闭环);② CRLB 69nm vs kfold 0.01–0.1mm 的 10³–10⁴× 落差是「下界 vs 有限样本实现」的口径差,非模型误差;③ 冻结内参是建模决定(依赖 §5.7 内参不漂;若温漂/松焦,外参会静默吸收 ⇒ 须定期用独立测试 rig-RMS 监测);④ 棋盘 square_size 为标称值,仅缩放绝对 mm。下游引用:§7 三角化投影阵 P_c = K_c[R_c|t_c] 用此外参——后续全文「rig 外参/基线」均指本结果。

7. 多目精度评估

目标:这是整份报告的实测核心 —— 用 §5.7 的内参 $\theta$ + §6.7 的 rig 外参,对独立测试集(5 个距离的棋盘)做去畸变多目三角化,把 88 个已知网格角点重建成 3D,与真实网格对齐(Kabsch),得到每个相机组合、每个距离下的实测 3D 测量误差😒(板法向 ≈ 深度)与 xy(横向)。这是"这套标定到底测得多准"的最终实证,也是与 Fisher 理论对比的实测来源。

承接上游😦§4/§5/§6)**:内参 $\theta$ = §5.7(cam1/2 rational、cam3/4 brown5)、rig 外参 = §6.7 生产方案二(冻结内参 BA,基线 cam2/3/4≈1207/802/529mm);Fisher 理论下界 CRLB 按 §4 $\sigma_{\text{real}}$≈0.12px($\sigma_{\text{real}}$/$\sigma_{\text{det}}$≈5.3×)口径读数(§10)。判据:实测误差贴 CRLB($\sigma_{\text{real}}$)⇒ 已达理论极限($\sigma_{\text{model}}$≈0),高出的部分源自边缘帧 $\sigma_{\text{real}}$ 更大与 Kabsch 口径差,非模型偏差。

方法:① 对每个测试快照,各机角点先去畸变 → DLT 多目三角化得 3D 点云;② 用 Kabsch 将点云对齐到已知棋盘网格(刚体、无尺度——kabsch() 只返回 R,t;三角化点云已是度量 mm,rig 尺度的绝对误差由此进入板面残差),残差 RMS = 3D 测量误差,按 z(深度)/xy(横向)分解;③ 遍历全部相机组合(2/3/4 目)× 5 距离。数据筛选:仅保留四机全部检出 88 角点的同步组(任一机未检出 → 整组删,保证组合间公平可比)。

7.1 测试集概况与三角化实现

测试集概况(各夹保留组/总组):1m:7/8, 1.5m:8/8, 2m:8/8, 2.5m:8/8, 3m:6/8。实测板心深度(全四目三角化世界 Z 中位,以测出来的为准,非文件夹标称):1m:1175mm, 1.5m:1508mm, 2m:2027mm, 2.5m:2402mm, 3m:2834mm。

DLT 三角化实现要点:对每点构造 A,取 SVD 最小奇异值对应零向量 Vt[-1] 作齐次解。该零向量符号任意(SVD 不约定符号),齐次除法必须除以 Xh[3] 本身(保号);若误用 abs(Xh[3]),会在 SVD 给出负号时把整点取反 → 深度符号翻转(近距离正、远距离负,幅值却对)。除以 Xh[3] 保号后,5 个距离深度全部为正且贴合标称(1174/1507/2027/2401/2833mm),重投影残差由数百 px 降到 0.5-1.4px。

7.2 实测 3D 误差 vs Fisher 理论下界

实测 3D 误差 vs Fisher 理论下界(4 目生产配置 cam1+2+3+4 × 5 真实板心深度;CRLB 用 $\sigma_{\text{real}}$ 口径 = $\sigma_{\text{det}}$ CRLB×5.3):

真实深度(m) z 实测(mm) xy 实测(mm) CRLB z($\sigma_{\text{real}}$) CRLB xy($\sigma_{\text{real}}$) z/CRLB xy/CRLB
1.17 0.064 0.096 0.070 0.051 0.92× 1.9×
1.51 0.081 0.078 0.110 0.065 0.73× 1.2×
2.03 0.145 0.160 0.184 0.085 0.79× 1.9×
2.40 0.196 0.207 0.277 0.103 0.71× 2.0×
2.83 0.307 0.289 0.357 0.119 0.86× 2.4×
中位 ≈0.8× ≈1.9×

深度 z 实测 / CRLB($\sigma_{\text{real}}$)≈0.7–0.9×(贴理论下界,$\sigma_{\text{model}}$≈0);横向 xy≈1.2–2.4×(略高于极限,边缘帧 $\sigma_{\text{real}}$ 更大所致)。$\sigma_{\text{det}}$ 口径下 z 比值虚高至 4–5×,是分母用 $\sigma_{\text{det}}$ 被低估 5.3× 所致。

按相机数 / 基线分档(替换原 10 张逐组合子表;完整组合数据基线·相机数曲线):

depth_vs_real
实测 z RMS vs 真实板心深度,按相机数/基线分档:2 目最长基线 cam1+cam2(B=1207mm)与 4 目几乎重合(加相机对深度收益仅 ~1–2%/目);2 目最短基线 cam3+cam4(B=340mm)显著最差。灰虚线=解析地板 $\sigma_z$=z²·$\sigma_{\text{real}}$/(f·B)。深度 ∝ $z^{\sim1.5}$(非教科书 z²——本 rig 有限会聚角下远场近似不成立)。

measured_vs_crlb
4 目实测 vs Fisher CRLB($\sigma_{\text{real}}$):实测 z(红实线)贴 CRLB z($\sigma_{\text{real}}$)(红虚线,z/CRLB≈0.8×);实测 xy(蓝实线)略高于 CRLB xy($\sigma_{\text{real}}$)(蓝虚线,xy/CRLB≈1.9×)。$\sigma_{\text{real}}$ 口径下理论与实测闭环。

全 11 组相机组合的实测精度(生产 4 目 + 其余 10 组子配置;行按相机数分组、组内按 z 中位升序;CRLB 用 $\sigma_{\text{real}}$ 口径 = $\sigma_{\text{det}}$×5.3):

深度 z RMS(mm) —— 基线主导,非相机数主导:

组合 相机数 1.17m 1.51m 2.03m 2.40m 2.83m z/CRLB 中位
cam1+cam2+cam3+cam4 4 0.064 0.081 0.145 0.196 0.307 0.79×
cam1+cam2+cam4 3 0.064 0.082 0.145 0.195 0.307 0.75×
cam1+cam2+cam3 3 0.071 0.081 0.146 0.198 0.314 0.77×
cam2+cam3+cam4 3 0.087 0.163 0.250 0.312 0.492 0.85×
cam1+cam3+cam4 3 0.132 0.160 0.312 0.444 0.702 0.97×
cam1+cam2 2 0.072 0.082 0.147 0.197 0.314 0.73×
cam2+cam4 2 0.100 0.178 0.277 0.345 0.549 0.90×
cam1+cam3 2 0.137 0.182 0.337 0.481 0.744 0.98×
cam2+cam3 2 0.113 0.244 0.370 0.458 0.755 0.79×
cam1+cam4 2 0.218 0.264 0.486 0.741 1.207 0.95×
cam3+cam4 2 0.358 0.580 0.903 1.166 1.871 1.11×

横向 xy RMS(mm) —— 相机数与基线几何共同主导:

组合 相机数 1.17m 1.51m 2.03m 2.40m 2.83m xy/CRLB 中位
cam1+cam2+cam3+cam4 4 0.096 0.078 0.160 0.207 0.289 1.89×
cam1+cam2+cam4 3 0.107 0.082 0.165 0.215 0.299 2.00×
cam1+cam2+cam3 3 0.104 0.076 0.169 0.229 0.311 1.85×
cam2+cam3+cam4 3 0.094 0.124 0.199 0.245 0.340 1.22×
cam1+cam3+cam4 3 0.113 0.122 0.219 0.315 0.472 2.31×
cam1+cam2 2 0.121 0.080 0.176 0.241 0.325 2.02×
cam2+cam4 2 0.116 0.144 0.221 0.278 0.392 1.26×
cam1+cam3 2 0.124 0.136 0.247 0.357 0.519 2.42×
cam2+cam3 2 0.103 0.169 0.299 0.404 0.525 1.03×
cam1+cam4 2 0.194 0.203 0.314 0.490 0.770 3.22×
cam3+cam4 2 0.141 0.203 0.384 0.604 0.909 1.32×

all_combos
全 11 组合 × 5 真实距离的实测 z(左)/xy(右)RMS 热图(对数色,按 z 中位升序 ⇒ 基线长→短)。读图:① 顶 4 行(cam1+cam2 长基线核心, B=1207mm)z 列几近重合 —— 加目对深度收益 ≤1–2%/目,深度精度由最长基线独占;② 底行 cam3+cam4(B=340mm)整片最亮,z 差 5–6×;③ xy(右)大体随相机数增多而下降(4 目最优),同一相机数下含 cam1+cam2 核心的组合横向也更准;④ 全部组合 z/CRLB($\sigma_{\text{real}}$)≤1.1×,整张配置空间贴 $\sigma_{\text{real}}$ 地板,非模型受限 —— 生产 4 目同时吃到了 cam1-cam2 的长基线深度红利与全视角的横向红利。

7.3 多目三角化的 Fisher 原理

融合算法(如何把 C 机观测合成一个 3D 点)见 §2.8;本节专讲这个估计能多准 —— 即三角化 Fisher 信息给出的理论精度下界(CRLB),以及它为何把深度判为弱轴。

① 这是三种 Fisher 中的「单点 3D」Fisher。待估量 β = 板心 3D 坐标 X=(X,Y,Z)(3 参);内外参与 rig 几何作为已知真值固定(无干扰量 nuisance)。这与内参 Fisher(β=9/12 个相机参数)、外参 Fisher(β=刚体位姿)是三个不同问题,共享同一套 crlb_from_J 数值核,但雅可比的列含义不同。

② 信息矩阵的构造。逐相机,把去畸变像点投影对 3D 点求偏导,得 2×3 数值雅可比 J_c = ∂(u,v)/∂X(对 X,Y,Z 三列;数值差分步长由 numerical_jacobian 自适应)。各机观测独立 ⇒ Fisher 信息矩阵相加:

I_X = $\sum_c J_c{\mathsf{T}}\Sigma_c{-1}J_c$(C 个相机的 3×3 信息阵求和;$\Sigma$c 为该机 2×2 像素协方差,对角元 $\sigma{\text{real}}$²)。

无干扰量 ⇒ 无需 Schur 补(对比外参 Fisher 须边缘化板位姿+内参)。$\mathrm{CRLB}=\sqrt{\operatorname{diag}(I_X^{-1})}$,即 3D 不确定椭球的三半轴。

③ 深度为何是弱轴 —— $\sigma_z=z^2\sigma/(fB)$ 的解析根源。信息阵 I_X 的特征方向由各机射线方向张成:横向(垂直于深度、平行于基线)有多机大角度交汇 ⇒ 特征值大 ⇒ CRLB 小;深度方向(沿光轴)各机视角差小、视差灵敏度低 ⇒ 特征值小 ⇒ CRLB 大。双目解析退化定量给出:视差 d = fB/z,像点噪声 $\sigma$ 经链式法则放大到深度 $\sigma_z=|\partial z/\partial d|\cdot\sigma=(z^2/(fB))\cdot\sigma$。两个杠杆都在分母——基线 B 越长、焦距 f 越大,深度越准;且 $\sigma_z$ $\propto$ $z^2$(远距平方恶化)。本 rig 多目沿深度轴会聚角有限(§7.5:18–40°),纯双目 d=fB/z 的小视差近似只在一阶成立,实测深度恶化斜率 ∝ $z^{\sim1.5}$(略缓于 z²,见 §7.2 深度-距离曲线)。

④ 椭球几何与设计规则。CRLB 给出的不确定椭球长轴沿深度、短轴沿横向(扁椭圆,4 目 @2m 时 z-CRLB/xy-CRLB ≈ 0.18/0.085 ≈ 2.1×,长轴约为短轴 2 倍)。两条实测设计规则:(a) 压深度靠长基线 —— 本 rig cam1–cam2 B=1207mm 已把 4 目深度压到地板,加短基线 cam3/cam4 边际仅 1–2%/目(§7.2 顶 4 行重合);(b) 压横向靠多视角 —— 横向特征值随独立视角数近似线性增长,4 目 xy 比最优 2 目低 ~20%。生产 4 目 = 长基线吃深度 + 全视角吃横向,两轴同时逼近 $\sigma_{\text{real}}$ 地板。

7.4 rig 系综合诊断

本节为综合诊断:把三角化 Fisher CRLB(理论下界)与实测 RMS 放到统一的 rig 系下逐距离×相机数对比,精确回答『离理论极限多远、差在哪、为何』。理论支柱:(1) 方差分解 $\sigma_{\text{real}}$²=$\sigma_{\text{CRLB}}$²+$\sigma_{\text{model}}$²——把实测误差拆成噪声项(CRLB)与模型项;(2) CRLB 线性于 $\sigma_{\text{det}}$ ⇒ 定义有效噪声 $\sigma_{\text{eff}}$=ratio×$\sigma_{\text{det}}$ 使 Fisher 曲线贴合实测;(3) rig 系(PCA)给出物体到 rig 的真实垂直距离,而非 cam1 世界 Z。本章最终结论与 4 目测量极限表见章末 §7.9。

7.5 rig 参考系与相机位姿

参考系:原点=4 机光学中心质心;三轴由相机布局 PCA 给出——PC1=水平(长基线 cam1-cam2 方向)、PC2=竖直、PC3=深度(相机平面法向,朝板定向)。4 机实测完全共面(PCA 奇异值 [890.04, 381.82, 0.15],平面度 S3/S1=0.0002≈0),布局为梯形(顶边 cam1-cam2 宽、底边 cam4-cam3 窄)。

梯形边 长度(mm)
top(cam1-2) 1207
bottom(cam4-3) 340
left(cam1-4) 529
right(cam2-3) 632

相机在 rig 系的位姿(光学中心坐标 + 光轴与深度轴夹角=会聚角):

cam x 水平(mm) y 竖直(mm) z 深度(mm) 光轴会聚角(°)
cam1 -560 215 -0 18.1
cam2 646 165 0 39.7
cam3 127 -197 -0 36.8
cam4 -212 -183 0 31.0

stage8_rig_front

stage8_rig_topdown

stage8_rig_3d

正视=相机平面(梯形面,标边长);俯视=水平-深度(板心在各真实距离,绿虚线=相机平面);3D=相机+板心+视锥连线。cam1/cam2(4MP)=顶宽边 1207mm,cam3/cam4(2MP)=底窄边 340mm,高 ~380mm。

7.6 真实距离与测量重复性

目标:确定每个测试档的真实距离,并量化"同一距离反复摆放"的重复性。文件夹名(1/1.5/2/2.5/3m)只是标称,精确分析须用实测距离 —— 把每快照的板心三角化、投影到 rig 深度法向,取组内均值作为该档真实距离(比 cam1 世界 Z 或标称更准,因为 rig 原点在质心)。

标称 rig 垂直距离均值(mm) 组内$\sigma$(mm) 组数
1m 984 12.8 7
1.5m 1380 18.8 8
2m 1878 27.3 8
2.5m 2231 30.3 8
3m 2663 16.1 6

距离=板心到 rig 平面垂直距离(每快照三角化板心→投影到深度法向→组内均值),非 cam1 世界 Z、非文件夹标称。

repeatability
每组每快照的实测深度箱线(◆=均值,散点=各快照)。组内$\sigma$(13-30mm)= 同一距离多次摆放的重复性,随距离增大(远距定位更难);各档均值与标称 1/1.5/2/2.5/3m 系统偏小 = rig 原点(质心)在板与相机之间。

7.7 Fisher 信息 vs 真实误差:精确剖析

§7.2 给出了 4 目(及全 11 组合)的实测误差与 CRLB($\sigma_{\text{real}}$)对比,结论是深度贴理论下界、横向略高。本节从四个互补角度印证该结论(方差分解、有效噪声、几何依赖、边缘 $\sigma_{\text{real}}$),并解释 $\sigma_{\text{det}}$ 口径下「差 4–5×」的来源(分母被低估 5.3×,详见 §10)。$\sigma_{\text{det}}$/$\sigma_{\text{real}}$ 的区分与数学在 §4/§10 已建立,此处只做实测剖析。

theory
左:深度 z;右:横向 xy。实线=实测(最优组合),虚线=Fisher 理论($\sigma_{\text{det}}$ 口径,故低于实测 ~5×),点线=解析双目 $\sigma_z$=z²$\sigma_{\text{det}}$/(fB)。$\sigma_{\text{real}}$ 重标(×5.3)后二者贴合。

7.7.1 误差预算:方差分解

decomp

方差分解 $\sigma_{\text{meas}}$² = $\sigma_{\text{CRLB}}$($\sigma_{\text{real}}$)² + $\sigma_{\text{model}}$²。下表按管线原样的 $\sigma_{\text{det}}$ 口径展示(故 CRLB 被低估 5.3×,把 $\sigma_{\text{real}}$ 噪声虚算成「模型方差」);$\sigma_{\text{real}}$ 重算见结论。

深度 z(4 目最优,mm²):

距离(mm) $\sigma_{\text{CRLB}}$($\sigma_{\text{det}}$) $\sigma_{\text{模型}}$($\sigma_{\text{det}}$口径) $\sigma_{\text{实测}}$ 占比($\sigma_{\text{det}}$口径)
984 0.0132 0.062 0.063 95.6%
1380 0.0208 0.078 0.080 93.3%
1878 0.0328 0.139 0.143 94.7%
2231 0.0460 0.189 0.194 94.4%
2663 0.0599 0.299 0.305 96.2%

横向 xy(4 目最优,mm²;同 $\sigma_{\text{det}}$ 口径):

距离(mm) $\sigma_{\text{CRLB}}$($\sigma_{\text{det}}$) $\sigma_{\text{模型}}$($\sigma_{\text{det}}$口径) $\sigma_{\text{实测}}$ 占比($\sigma_{\text{det}}$口径)
984 0.0066 0.091 0.091 99.5%
1380 0.0101 0.075 0.075 98.2%
1878 0.0146 0.157 0.157 99.1%
2231 0.0216 0.203 0.205 98.9%
2663 0.0267 0.284 0.285 99.1%

$\sigma_{\text{real}}$ 口径重算(CRLB 换 $\sigma_{\text{real}}$):深度 $\sigma_{\text{model}}$=√($\sigma$实测²−CRLB($\sigma_{\text{real}}$)²),因实测/CRLB($\sigma_{\text{real}}$)≈0.8–1.0、实测²<CRLB($\sigma_{\text{real}}$)² ⇒ $\sigma_{\text{model}}$≈0(方差为负→裁零=已贴极限),深度无模型偏差。横向 xy 实测/CRLB($\sigma_{\text{real}}$)≈1–3×(略高于极限),小幅超出由边缘帧 $\sigma_{\text{real}}$ 更大拉高,仍以检测噪声主导。⇒ 系统贴 $\sigma_{\text{real}}$ 检测噪声地板,非模型受限;五杠杆零增益正交证实。

7.7.2 有效噪声 $\sigma_{\text{eff}}$

Fisher CRLB 线性于 $\sigma_{\text{det}}$(I∝1/$\sigma$²)。若把 $\sigma_{\text{det}}$ 放大 ratio 倍,Fisher 曲线 = ratio×原曲线。下图显示这条「Fisher($\sigma_{\text{eff}}$)」曲线几乎精确穿过实测。

effnoise

误差分量 实测/Fisher 比 $\sigma_{\text{det}}$(px) $\sigma_{\text{eff}}$=比×$\sigma_{\text{det}}$(px) 幂律实测 幂律理论 噪声方差占比
深度 z 4.3× 0.023 0.099 z^1.59 z^1.53 5.3%
横向 xy 10.7× 0.023 0.244 z^1.27 z^1.42 0.9%

关键洞察:$\sigma_{\text{eff}}$=ratio×$\sigma_{\text{det}}$ 恰=$\sigma_{\text{real}}$(深度 0.099px、横向 0.244px ≈ 逐图 $\sigma_{\text{real}}$)——即「Fisher($\sigma_{\text{eff}}$) 曲线贴合实测」不是因为模型误差冒充噪声,而是因为分母终于用对了($\sigma_{\text{real}}$);ratio≈4–11× 正是 $\sigma_{\text{real}}$/$\sigma_{\text{det}}$。实测与理论幂律斜率几乎相同($z^{\sim1.6}$ vs $z^{\sim1.5}$,二者平行;非教科书 z²——本 rig 有限会聚角下远场近似不成立)。⇒ 整体噪声地板=$\sigma_{\text{real}}$,非被模型偏差抬高。

7.7.3 比值的几何依赖

ratiocurves
左:比值 vs 距离(每相机数曲线基本水平)⇒ $\sigma_{\text{real}}$/$\sigma_{\text{det}}$ 跨距离恒定;右:比值 vs 基线(短基线偏高)。全网中位 5.0×≈$\sigma_{\text{real}}$/$\sigma_{\text{det}}$。

heatmap
组合 × 距离的比值热图:全网均匀偏高(无个别异常)⇒ $\sigma_{\text{real}}$/$\sigma_{\text{det}}$ 全网一致。

  • 距离无关:固定组合下比值跨 5 档距离几乎不变 ⇒ $\sigma_{\text{real}}$/$\sigma_{\text{det}}$ 在各距离大致恒定($\sigma_{\text{real}}$ 始终≈5×$\sigma_{\text{det}}$)。
  • 基线相关:最短基线 cam3+cam4(5.3×)比最长 cam1+cam2(4.3×)偏高 ⇒ 短基线几何放大弱、$\sigma_{\text{real}}$ 相对更显眼(非「模型项更重」)。
7.7.4 边缘 $\sigma_{\text{real}}$ 更大:检测噪声的实测根源

系统贴 $\sigma_{\text{real}}$ 地板,但 $\sigma_{\text{real}}$ 并非处处相等——逐图 $\sigma_{\text{real}}$ 跨度 0.07–0.19px,最差 10% 帧的定位噪声是最优 10% 的 2.7×。把 4 目三角化的板点回投到各机,残差随像径(距主点)增大而上升:

reproj
像场边缘残差↑ = 边缘 $\sigma_{\text{real}}$ 更大(边缘分辨率下降/畸变大→角点变钝、对比度低→SNR 低;离焦),非「畸变模型吃不掉高阶畸变」——鱼眼、rational 加阶、残差校正场全部零增益已排除模型归因。

boardfield
板上各角点平均误差的空间分布(上=深度 z,下=横向 xy)。误差呈空间结构(边缘/特定区偏高)⇒ 这是 $\sigma_{\text{real}}$ 在像场上的不均匀(边缘高)经同一多目几何放大后的几何印记,而非系统模型偏差(已证模型项≈0)。

7.7.5 空间精度足迹

ellipses
各距离 4 目 1$\sigma$ 椭圆(×30 放大;实线=Fisher 理论($\sigma_{\text{det}}$),虚线=实测(=$\sigma_{\text{real}}$))。纵轴(深度 z)远长于横轴(水平 x)⇒ 深度是多目几何的固有弱轴;实测椭圆比 $\sigma_{\text{det}}$ 理论大~5×、两轴同步放大 = $\sigma_{\text{real}}$>$\sigma_{\text{det}}$ 的均匀缩放,非各向异性模型误差。椭圆随距离增长 = $\sigma$∝$z^{\sim1.5}$ 的几何体现。

7.8 精度 vs 基线、vs 相机数

目标:回答三个工程问题 —— (1) 精度随基线长度怎么变?(2) 加更多相机还有收益吗?(3) rig 外参(基线)本身定得够不够准?前两者看实测,第三者看外参 CRLB(与 §6.4 互证)。

stage8_precision_vs_baseline

stage8_precision_vs_camcount

左:固定距离下 z ∝ 1/B(点沿 1/B 参考线分布,颜色=距离);右:各距离 2/3/4 目最优组合(○△□)。
相机数收益递减:最长基线 cam1-cam2(1207mm)已被 2 目覆盖,加第 3、4 目(主要引入更短基线)对深度 z 的边际增益仅 ~1-2%/目;真正卡精度的是基线长度检测噪声 $\sigma_{\text{real}}$,不是相机数。

外参 CRLB vs 联合标定相机数(与 §6.4 互证外参过定):基线估计精度 ~0.01μm(亚微米),与相机数几乎无关——25 个共享板位姿已充分过定相对位姿,加相机不再提升外参精度(旋转 CRLB 仅小幅改善 0.319°→0.192°)。

相机数 组合 最大基线(mm) baseline CRLB(μm) 旋转 CRLB(°) 配对基线数
2 cam1+cam2 1207 0.01 0.319 1
3 cam1+cam2+cam3 1207 0.01 0.239 3
4 cam1+cam2+cam3+cam4 1207 0.01 0.192 6

extr

外参不是精度瓶颈(内参/外参/模型均非瓶颈,五杠杆零增益);加相机的真正价值是提供更多/不同基线(2 目 1 条 → 4 目 6 条配对基线),提升测量冗余与视场覆盖,而非外参精度本身。

7.9 多目精度:结果与测量极限

最终结论:

  • 深度 z 贴理论地板:实测 z / CRLB($\sigma_{\text{real}}$)中位 0.7–1.0×(4 目 0.79×;全 11 组合 0.73–1.11×)。方差分解 $\sigma_{\text{model}}$=√($\sigma_{\text{meas}}$²−$\sigma_{\text{CRLB}}$($\sigma_{\text{real}}$)²) 在多数距离下开方为负 ⇒ $\sigma_{\text{model}}$≈0(模型项可忽略)。系统在检测噪声 $\sigma_{\text{real}}$ 地板上运行,无系统性模型偏差;精度提升试验(§8 残差校正场、§5.4 鱼眼、§6.5 联合 BA;历史亦含部分重叠外参、板非平面)全部零增益,正交佐证 $\sigma_{\text{model}}$=0。$\sigma_{\text{det}}$ 口径下「实测/CRLB≈5×、模型方差占 95%」是分母用 $\sigma_{\text{det}}$ 被低估 5.3× 所致,并非真有模型误差。
  • 横向 xy 略高于地板:xy / CRLB($\sigma_{\text{real}}$)中位 1.0–3.2×(4 目 1.89×)。高出部分不是模型误差(五杠杆已证零增益),而是板边缘角点有效 $\sigma_{\text{real}}$ 大于板心(离轴更远 ⇒ 畸变模型残差更大、SNR 更低),而 Fisher 分母用单一平均 $\sigma_{\text{real}}$;板心角点比值接近 1。z 受边缘效应弱(整板深度近常数),故 z 比值贴 1、xy 比值偏高。
  • 精度随几何单调:深度由最长基线独占(cam1+cam2 核心 4 组合重合,cam3+cam4 短基线差 5–6×);横向随相机数改善(4 目最优)。生产 4 目配置两轴同时最优——长基线吃深度、全视角吃横向。

4 目生产配置的全距离测量极限(精度最高测试集 = 4 机同步,§7.2 数据;这组数据的测量能力上限):

真实深度 n z 实测(mm) xy 实测(mm) CRLB z($\sigma_{\text{real}}$) CRLB xy($\sigma_{\text{real}}$) z/CRLB xy/CRLB
1.17m 7 0.064 0.096 0.070 0.051 0.92× 1.9×
1.51m 8 0.081 0.078 0.110 0.065 0.73× 1.2×
2.03m 8 0.145 0.160 0.184 0.085 0.79× 1.9×
2.40m 8 0.196 0.207 0.277 0.103 0.71× 2.0×
2.83m 6 0.307 0.289 0.357 0.119 0.86× 2.4×

measured_vs_crlb
4 目实测 z(红实线)贴 CRLB z($\sigma_{\text{real}}$)(红虚线,z/CRLB≈0.8× ⇒ 深度达理论极限);实测 xy(蓝实线)略高于 CRLB xy($\sigma_{\text{real}}$)(蓝虚线,xy/CRLB≈1.9× ⇒ 横向小幅超出,边缘 $\sigma_{\text{real}}$ 更大所致)。

读法:4 目在 1–3m 工作距离上,深度测量精度 0.06–0.31mm、横向 0.08–0.29mm;深度已在 CRLB($\sigma_{\text{real}}$)理论极限上(z/CRLB≈0.8×,模型项≈0),横向在极限的 ~1.9× 处(可解释为边缘帧 $\sigma_{\text{real}}$ 更大,非模型偏差)。这就是本组数据在当前检测噪声 $\sigma_{\text{real}}$≈0.12px 下的测量极限;深度无系统性压缩空间,横向的边缘偏高只能靠降低 $\sigma_{\text{real}}$(检测侧,§11)缩小。

可靠性边界:

  1. $\sigma_{\text{real}}$ 是逐图估计,非已知真值😒\sigma_{\text{real}}$ ≈ 0.12px 取自逐图去心残差 RMS,本身带 ~10% 估计不确定;CRLB($\sigma_{\text{real}}$) 与之同比例波动。故 z/CRLB「0.8×」应读作「约 0.7–1.0×」。核心结论「贴地板」对 ±10% $\sigma_{\text{real}}$ 鲁棒(比值仍在 ~1 附近)。
  2. CRLB 假设 rig 几何精确已知:外参(基线 B、会聚角)取自标定值,其不确定度(外参 CRLB 68–72nm,§6.4)比深度 CRLB(0.1–0.4mm)小 10³–10⁴×,故几何误差对深度 CRLB 的二阶贡献可忽略。
  3. 小样本涨落:每距离档仅 6–8 组快照;比值带 ~15% 统计散布。
  4. Kabsch 对齐引入口径差:实测 RMS 是三角化网格经 Kabsch 刚体对齐已知板后的逐角点残差(全板均值),CRLB 是单点(板心)理论值;二者口径略异,故比值是「量级吻合」而非「逐点闭合」。
  5. CRLB 是下界,非点预测:实测可高于它(横向 1.9× 属正常),亦不应远低于它(z 的 0.7× 在 $\sigma_{\text{real}}$ 估计涨落范围内)。

根本瓶颈:所有维度精度最终受单目检测噪声 $\sigma_{\text{real}}$(=$\sigma_{\text{det}}$×5.3)封顶。模型侧五杠杆全部零增益 ⇒ 压缩空间在检测侧;进一步降 $\sigma_{\text{real}}$ 须靠物理改进(对焦/4MP 升级/亚像素窗口 auto/打光降纹理噪声,§11),cam1/2 已用 rational 模型(比 brown5 测试 RMS 低 ~32%)是模型侧唯一已兑现的增益。

8. 残差校正场:内参后处理的精度增益评估

目标:§5–§7 已分别给出内参、外参与多目精度;本节回到模型侧的最后一问——标定残差里还剩多少可建模的系统误差?尝试把标定角点的残差插值成全局残差场、作为固定偏移叠加到投影上(lib/experiments.py,8 图 + JSON),结论先行:零增益。这反过来界定了残差性质(≥97% 是逐图随机噪声、可建模的固定分量 var(b) 仅 1.5–3.3%),并由 var(b) 反解出真实工作点定位噪声 $\sigma_{\text{real}}$≈RMS≈0.12px(静态 $\sigma_{\text{det}}$ 的 ~5.3×),支撑全报告判据:系统是「检测噪声受限」而非「模型受限」。$\sigma_{\text{real}}$ 的系统辨析见 §4,本节聚焦残差场实验本身。

8.1 残差校正场实验

内参模型已分机选到最优(cam1/2 rational、cam3/4 brown5),重投影 RMS 仍 ~0.12px。
本节构造残差校正场:在标定角点(稀疏点)算残差、插值出全局残差矩阵、作为固定偏移叠加到投影上,
试图补掉最后那点系统误差。(lib/experiments.py,8 图 + JSON)

8.2 方法

  • 残差场参数化为去畸变归一化坐标 (x_n,y_n) 的函数。归一化坐标 = 真实光线方向 ⇒
    残差(=镜头畸变的未建模部分)是其函数,与板姿态无关 —— 这是"固定偏移"能跨姿态泛化的
    前提。每角点:残差 = 检测 − 投影(px,投影用该图 solvePnP 位姿),(x_n,y_n) = undistort(检测)
  • 两种场模型互相印证:(P) 二维多项式,阶数由图像级 K 折 CV 选(防拟合噪声);
    (G) 归一化平面分 32×32 格取残差中位数(抗噪),空格用薄板样条 RBF 插值 —— 即把
    "稀疏点 → 插值 → 全局残差矩阵"落到全局残差矩阵上。把场在归一化平面稠密求值即得全局残差矩阵(交付物)。
  • 应用 = 固定偏移:校正投影 = 投影 + 场(x_n,y_n),在独立测试集(test_v1…v5,不同姿态/距离)
    算 RMS 前后对比。绝不用拟合集自评(否则过拟合)。

8.3 结果:固定残差场无增益

相机 模型 多项式最优阶 测试 RMS 校正前→后(P) (G) pooled 格内跨图 std(随机) 格中位(固定 b) 随机/固定 var(b)/var($\sigma_{\text{real}}$)
cam1 rational 2 0.107→0.107 0.107 0.094px 0.015px 1.5%
cam2 rational 2 0.103→0.103 0.104 0.100px 0.016px 1.7%
cam3 brown5 2 0.137→0.137 0.138 0.109px 0.021px 3.0%
cam4 brown5 2 0.133→0.133 0.134 0.109px 0.021px 3.3%

测试 RMS 校正前后完全相同(增益 0.0%);多项式各阶留出 RMS 都 ≈ 无场 baseline(CV 一律选最低阶 2);
拟合集上反而 −7%(过拟合噪声)。⇒ 固定残差场不可行

testrms

独立测试集(5 距离)RMS:校正前(浅)/后(深)几乎重合 ⇒ 固定场对测试精度零增益。

cv methods

左:多项式各阶 K 折留出 RMS ≈ baseline(虚线),★=最优(都选最低阶)⇒ 加场不降残差;
右:无校正 / 多项式 P / 网格-RBF G 三者 pooled 测试 RMS 并列 ⇒ 与方法无关,均无增益。

field

全局残差矩阵(模型 G 稠密化,du/dv):全场幅值 ~0.01px,已低于 $\sigma_{\text{det}}$ ⇒ 几乎没有可建模结构。

quiver radius

左:固定校正偏移场矢量(箭长=px),整体极短 ⇒ 场接近零;右:残差幅值 vs 归一化半径,校正前后重合 ⇒ 未吃掉任何径向结构。

8.4 真因定位:固定场无效的根源

(B) 空间一致性诊断 —— 核心证据。把归一化平面分格,同一格 = 同一图像位置,跨多张图看残差:

diag

同一图像位置的残差:格内跨图 std(逐图随机,0.094–0.109px)≫ 格中位 |残差|(固定可建模,0.015–0.021px),比值 5–6×。
固定分量 0.015–0.021px 与 $\sigma_{\text{det}}$(0.021–0.024px)同量级,且 var(b) 仅占残差方差 1.5–3.3% ⇒ 没有显著超噪声的、可插值的空间结构,残差主体(方差 60–85%)是逐图随机。

© 板非平面排除。联合求解每角点板系 z 偏移(88 个跨图共享未知数,res ≈ g·z_j):RMS 仅降 0.4–0.7%,
反解 |z| ≤ 0.06mm(板厚量级)⇒ 标定板足够平,非平面不是原因

(D) 真实定位噪声。逐图残差全局偏置仅 ~0.0001px(solvePnP 已吸收刚体平移),残差是纯单角点散布;
其有效 2D $\sigma$($\sigma_{\text{real}}$)≈ 0.12px,是静态爆发 $\sigma_{\text{det}}$(0.023px)的 5.1–5.7×

floor

噪声层级:静态 $\sigma_{\text{det}}$ ≪ 真实逐图 $\sigma_{\text{real}}$ ≈ 重投影 RMS。真实逐图定位噪声远大于静态估计。

8.5 结论

  • 固定残差场不可行:它只能吃掉那 0.015–0.021px(占残差方差仅 1.5–3.3%)的固定空间分量,对占残差方差 >96% 的 ~0.12px 逐图随机散布无能为力。多项式/网格-RBF 在独立测试集上零增益,拟合集反而过拟合,板非平面也排除 ⇒ 结论稳健、与方法无关。

  • 主诊断:系统受限于真实检测噪声 $\sigma_{\text{real}}$ ≈ 0.12px ≈ RMS(RMS/$\sigma_{\text{real}}$ ≈ 1.0×),已贴近真实检测噪声极限。RMS/$\sigma_{\text{det}}$ ≈ 5.3× 之所以看起来像「模型受限」,是因为 $\sigma_{\text{det}}$ 是静态爆发地板(理想条件),远小于工作点噪声 $\sigma_{\text{real}}$;K 折/CRLB 比值偏大同样是 Fisher 用 $\sigma_{\text{det}}$ 做分母所致(§10)。

  • 物理根因:静态爆发只含传感器噪声(同场景、相机不动);真实标定图板在动,伴有轻微离焦/抖动/混叠/
    光照渐变
    ,使 cornerSubPix 的亚像素定位偏差随图内容变化。这部分是测量噪声属性,不是相机模型属性 ——
    任何相机侧模型(固定场/更复杂畸变/板形)都动不了它。

  • 进一步压低 0.12px 地板只能靠检测侧(非模型侧):更锐对焦 / 更小光圈增大景深 / 更匀照明 /
    抗混叠棋盘图案 / 亚像素细化窗口与阈值调参 / 学习型角点检测器。这些是把 $\sigma_{\text{real}}$ 从 ~0.12px 往 $\sigma_{\text{det}}$ 靠拢的途径。

9. K 折详述与可辨识性

lib/exp_kfold_viz.py(3 图 + JSON)把 stage4 的"单 fx 柱"展开为逐参数诊断。

(a) 逐参数 k 折 $\sigma$ vs Fisher CRLB($\sigma_a$ = $\sigma_{\text{det}}$/√2 ≈ 0.019px 为 CRLB 分母):

相机 fx kfold/CRLB fy cx cy k1 k2 k3 cond(Iβ)
cam1 45.0× 41.9× 105.6× 94.5× 26785× 93032× 15359× 3.8×10⁸
cam2 24.2× 23.4× 81.1× 163.2× 13327× 42389× 4917× 3.0×10⁸
cam3 33.1× 27.3× 274.1× 221.5× 85× 171× 133× 8.3×10⁷
cam4 81.0× 86.8× 681.0× 335.4× 328× 570× 435× 1.1×10⁸

kfdetail kfratio

左:逐参数 k 折 $\sigma$(经验)vs CRLB(理论下界);右:比值热图(对数色),畸变项比值极大。

(b) 为何比值 ≫1 —— 分母是关键。CRLB 用的 $\sigma_a$ 来自静态爆发 $\sigma_{\text{det}}$(0.023px),
而 k 折散布含真实逐图定位噪声 $\sigma_{\text{real}}$≈0.12px(单轴 $\sigma$≈0.085px,是 $\sigma_a$ 的 ~5.3×)。
把 CRLB 同比放大 5.3× 后:fx 比值 45.0→8.0×、cam2 24.2→4.7×、cam3 33.1→6.3×(cam4 81→15.6×,偏高)。
即 $\sigma_{\text{real}}$ 口径下经验散布仅高出理论下界约 4.7–15.6×(fx)——剩余部分来自位姿集实现化与模型微差,而非模型受限。
畸变项(k1/k2/k3)比值仍巨大,因其本身量纲小、CRLB 极小,放大后仍在 10²–10³ 量级,但 k 折 $\sigma$ 绝对值已 <0.001–0.2,
对实际投影影响远小于 fx。

© 可辨识性 / 条件数。cond(Iβ) ≈ 10⁸–10⁹,信息阵接近退化——某些参数组合(如 fx↔k1↔k3、
cx↔p1)弱约束、强耦合(相关阵非对角绝对值可达 0.5–0.9)。但参数仍可分辨:k 折间 $\theta$ 稳定(fx $\sigma$ 0.19–0.56px,
相对 fx≈2034/1346 仅 0.01–0.04%),高 cond 反映"参数沿耦合方向联合不确定"而非"无法求解"。
cam4 k 折散布最大(fx 0.56、cx 0.79),可信度略低。

kfstab

K 折稳定性:$\sigma_{fx}$ 随 K=2…15 收敛(经验不确定度已饱和,不再随抽样数下降);条件数柱;cam1/cam3 参数相关阵(红=正相关/蓝=负相关,对角为 1)。

10. Fisher 精度的 $\sigma$ 口径:$\sigma_{\text{det}}$ 与 $\sigma_{\text{real}}$ 的区分

若系统已贴噪声地板、无系统误差可建模(四杠杆 + 联合 BA 全零增益),为何 Fisher 理论精度看起来还差好几倍到几十倍(kfold/CRLB≈24–81×、深度实测/CRLB($\sigma_{\text{det}}$)≈4–5×、“模型方差占 95%”)?根源在 Fisher 信息矩阵 I=$J{\mathsf{T}}\Sigma{-1}J$ 的 $\Sigma$ 选取。

stage4/6/7 三个 Fisher 计算的 $\Sigma$ 全部取 $\sigma_{\text{det}}$(静态连拍传感器噪声 ≈0.023px)。$\sigma_{\text{det}}$ 量的是静止场景的读出 + Pattern 噪声,不含真实标定/测试图里棋盘角点的逐图像定位噪声 $\sigma_{\text{real}}$(亚像素梯度几何 + 对焦 + 混叠 + 光照渐变 + cornerSubPix 收敛误差)≈ 重投影 RMS ≈0.12px,是 $\sigma_{\text{det}}$ 的 5.3×(逐机 5.1–5.7×)。$\sigma_{\text{det}}$ 是 $\sigma_{\text{real}}$ 的乐观下界(理想检测器才达得到),不是当前检测器的真实观测噪声。

关键数学😒\mathrm{CRLB}=\sigma\sqrt{\operatorname{diag}((J{\mathsf{T}}J){-1})}$ ⇒ CRLB 关于 $\sigma$ 线性。把分母里的 $\sigma_{\text{det}}$ 换成 $\sigma_{\text{real}}$(=RMS),整条 CRLB 曲线精确放大 rms/sdet 倍,所有「实测/CRLB」「kfold/CRLB」比值同比缩小。这是一次精确的 post-hoc 重标定(线性缩放即精确,无需重跑管线)。

(a) 内参 kfold/CRLB(fx):24–81× → 4.7–15.6×

cam $\sigma_{\text{real}}$/$\sigma_{\text{det}}$ kfold/CRLB($\sigma_{\text{det}}$) kfold/CRLB($\sigma_{\text{real}}$) 解读
cam1 5.65× 45× 8.0× ~5.65× 是 $\sigma$ 记账偏差;剩余 8.0× = 参数不稳定
cam2 5.10× 24× 4.7× 同上,残差 4.7×
cam3 5.29× 33× 6.3× 同上,残差 6.3×
cam4 5.18× 81× 15.6× cam4(2MP)参数最不稳,残差 15.6×

fsig1
把 Fisher 的 $\sigma_{\text{det}}$ 换成 $\sigma_{\text{real}}$(放大 ~5.3×)后,fx 的 kfold/CRLB 由 24–81× 降到 4.7–15.6×(对数轴)。

(b) 深度实测/CRLB:4.3–5.5× → 0.81–1.04×(贴 CRLB!)(下表为全部 2/3/4 目组合的平均 z 误差;与 © 用 「4 目最优」单列不同,故 1m 的 0.129 > © 的 0.071,但两表的比值结论一致)

距离 z 实测(mm) CRLB($\sigma_{\text{det}}$) CRLB($\sigma_{\text{real}}$) 实测/CRLB(sd) 实测/CRLB(real)
1m 0.129 0.023 0.124 5.5× 1.04×
1.5m 0.190 0.038 0.201 5.0× 0.95×
2m 0.320 0.067 0.356 4.8× 0.90×
2.5m 0.430 0.100 0.531 4.3× 0.81×
3m 0.688 0.140 0.743 4.9× 0.92×

fsig2
左:深度误差实测(黑)贴在 CRLB($\sigma_{\text{real}}$,蓝)上,远高于 CRLB($\sigma_{\text{det}}$,红虚线);右:$\sigma_{\text{real}}$ 口径下实测/CRLB≈0.9(达理论极限)。

深度「差 4 倍」不存在——用 $\sigma_{\text{real}}$ 重标定 Fisher 后,rig 深度精度本就在理论 CRLB 上(比值 0.81–1.04,集中在 ~0.9,部分 <1 是因为"实测"是组内 Kabsch 对齐的重复性散布而非绝对误差,且 CRLB 对单点三角化;≈0.9 即"达极限"),没有模型误差可挖。

© 「模型方差占 95%」同样是 $\sigma_{\text{det}}$ 分母所致。分解 $\sigma_{\text{model}}$²=$\sigma_{\text{real}}$²−$\sigma_{\text{CRLB}}$($\sigma_{\text{det}}$)² 把"$\sigma_{\text{real}}$ 与 $\sigma_{\text{det}}$ 的差"记成了模型误差。换成 $\sigma_{\text{real}}$ 口径:

距离(mm) $\sigma_{\text{CRLB}}$($\sigma_{\text{det}}$) $\sigma_{\text{CRLB}}$($\sigma_{\text{real}}$) $\sigma$实测 模型方差占比($\sigma_{\text{det}}$) 模型方差占比($\sigma_{\text{real}}$)
984 0.0162 0.0896 0.074 95.2% <0(实测已在 CRLB 内)
1380 0.0251 0.1388 0.106 94.4% <0
1878 0.0397 0.2195 0.173 94.7% <0
2231 0.0542 0.2997 0.218 93.8% <0
2663 0.0711 0.3932 0.332 95.4% <0

$\sigma_{\text{model}}$²=$\sigma$实测²−$\sigma_{\text{CRLB}}$($\sigma_{\text{real}}$)² 全部为 ⇒ 模型方差 = 0,实测完全落在(乃至低于)$\sigma_{\text{real}}$ 噪声预算内。「95% 模型方差」是 $\sigma_{\text{det}}$ 记账造成的错觉,不是物理。

fsig3
fx kfold/CRLB($\sigma_{\text{det}}$) 总差距的对数分解 = $\sigma$ 口径因子(橙,≈5.3×,$\sigma_{\text{det}}$ 低估所致)+ 参数不稳定残差(紫,4.7–15.6×)。

(d) 内参的剩余 4.7–15.6× 是什么?不是"可降 RMS 的模型误差",是"参数非唯一性"。四杠杆 + 联合 BA
已证:任何模型侧手段都降不动 RMS(残差多项式 K 折留出曲线在阶 2→6 走平 = 无可建模结构;鱼眼/联合 BA 零增益)。
但 kfold 显示跨折 $\theta$ 散布仍 > CRLB($\sigma_{\text{real}}$)——这是 Brown/rational 模型存在近退化解(多组 $\theta$ 给出近乎相同的
最低 RMS),不同数据子集落到不同 $\theta$。"RMS 贴地板"与"参数非唯一"不矛盾:你可以重投影误差已达噪声极限,
而单个 $\theta$ 仍欠定。这是比"有系统误差"弱得多的"模型局限"——它影响标定可重复性(重标一次 $\theta$ 会动),
但不影响测量精度(RMS、深度都已贴地板)。

(e) 外参基线 CRLB😒\sigma_{\text{det}}$ 下 15nm → $\sigma_{\text{real}}$ 下 ~85nm,仍比深度地板小 4–5 个量级 ⇒ 外参从不构成瓶颈
(与两项分解一致:$\sigma_z$^extr 比 $\sigma_z$^det 小 10⁴×)。$\sigma$ 口径重标不改变此结论。

(f) 这不是循环论证吗?(方法论自检 —— 用纯几何公式独立复核)

最严厉的反驳会是:“把 RMS 当 $\sigma$ 代进 CRLB,再比 actual,那 any 系统都会贴 CRLB(RMS),等于啥也没证。”
为破此循环,我们换一个结构上完全不经过重投影残差的预测:教科书双目深度精度闭式 $\sigma_z$ = z²·$\sigma$/(f·B)
(只依赖几何 z、基线 B、焦距 f 和标量 $\sigma$,不含任何残差)。对最长基线 cam1+cam2(B=1206.7mm, fx=2033.6):

距离 z(mm) 实测 z(mm) 几何预测($\sigma_{\text{det}}$) 几何预测($\sigma_{\text{real}}$) 实测/预测(sd) 实测/预测(real)
1m 1174 0.085 0.015 0.087 5.74 0.97
1.5m 1507 0.113 0.024 0.143 4.65 0.79
2m 2027 0.185 0.044 0.259 4.21 0.71
2.5m 2401 0.220 0.062 0.364 3.56 0.60
3m 2833 0.348 0.086 0.507 4.05 0.69

实测/预测($\sigma_{\text{real}}$) ≈ 0.6–1.0 —— 纯几何 × $\sigma_{\text{real}}$ 精确解释实测,无额外项;且比值随距离从 0.97 单调降到 0.69,
正是远场 z² 近似过估(rig 会聚角有限 ⇒ 实际 ~z^1.5)的签名。结论非循环:几何预测来自 (z,B,f,$\sigma$),
actual 来自测量,二者在 $\sigma_{\text{real}}$ 下吻合 ⇒ 深度误差 = 几何 × 真实定位噪声,不含模型项。唯一的"循环"输入是标量 $\sigma_{\text{real}}$ 本身,
而 $\sigma_{\text{real}}$ 是定位噪声(非偏差)由四杠杆零增益 + 逐图 RMS 紧簇于 0.13–0.22px(非少数偏差图主导)独立支撑 —— 两根支柱各自独立、互相印证。

(g) 「残差随像径↑」的归因。“像场边缘残差变大"的正确读法是:边缘残差↑ = 边缘定位噪声 $\sigma_{\text{real}}$ 更大(边缘 SNR 低、入射角斜、场曲离焦),不是模型偏差。判据:若是平滑径向偏差(r²/r⁴/…),残差多项式(归一化坐标 4 阶,能表 r²–r⁴)、鱼眼(异种径向基)、联合 BA(自由内参)三者至少有一个会吃掉它并降 RMS;三者全零增益 ⇒ 残差不是平滑模型偏差,而是逐图定位噪声(其边缘更大是 SNR/对焦的几何后果)。径向趋势支持"检测噪声受限”,而非反驳。

(h) $\sigma_{\text{det}}$ 与 $\sigma_{\text{real}}$ 各自的正确用法

静态连拍测 $\sigma_{\text{det}}$ 是标准做法,精确量出"检测器在恒定信号下的可重复性"。它回答的是渐近下界问题;作「模型受限 vs 噪声受限」的诊断分母时,须用可达下界 $\sigma_{\text{real}}$。两个 $\sigma$ 对应两个 CRLB,各标清楚、不能混用:

$\sigma_{\text{det}}$(静态连拍) $\sigma_{\text{real}}$(逐图,=RMS)
物理含义 检测器在恒定信号下的可重复性(纯传感器+cornerSubPix 收敛抖动) 实际标定/测试图里角点的逐图像定位误差
回答的问题 若模型完美、只剩检测器噪声,标定能多准?”(信息论渐近下界) 以实际噪声,标定能多准 / 离极限多远?”(可达下界)
用法 标定系统的品质因数 / 天花板,横向对比检测器好坏 「模型受限 vs 噪声受限」的诊断分母、可达精度评估

「实测/CRLB($\sigma_{\text{det}}$)≈4× / 60–270×」里绝大部分是 $\sigma_{\text{real}}$/$\sigma_{\text{det}}$≈5.3 这个比值本身,不是模型误差。诊断分母对齐真实噪声($\sigma_{\text{real}}$)后,这些比值回落到贴极限量级。

$\sigma_{\text{real}}$−$\sigma_{\text{det}}$≈0.12px 的位姿依赖定位退化是"噪声"而非"模型偏差",这是 $\sigma_{\text{real}}$ 能作 CRLB 分母的前提。其来源:场曲离焦(不同位姿切焦面不同)+ 斜姿非对称梯度(cornerSubPix 收敛偏/抖)+ 光照/对比变化 + 混叠(位姿相对像素栅格不同相)——逐图随机、不可被光滑模型吃掉,不是镜头畸变偏差。三条独立证据:

  1. 同位残差实验(lib/experiments.py):同一图像位置格内,跨图残差 std≈0.10px(逐图随机),而格中位(=固定可建模分量)仅 0.015–0.021px ≈ $\sigma_{\text{det}}$(且 var(b) 只占残差方差 1.5–3.3%)⇒ $\sigma_{\text{excess}}$ 几乎全是逐图随机噪声,固定模型分量与 $\sigma_{\text{det}}$ 同量级、可忽略。
  2. 残差场/鱼眼/联合 BA 全零增益:若是模型偏差,这三者(光滑多项式 / 异种径向基 / 自由内参)至少一个能降 RMS;全不行 ⇒ 不是模型偏差。
  3. $\sigma_{\text{det}}$ 只采了 5 个静态位姿(5×100 帧,且都是静止、对焦锐的"好位姿");$\sigma_{\text{real}}$ 跨 ~150 个标定位姿(含斜/远/边缘)。$\sigma_{\text{real}}$>$\sigma_{\text{det}}$ 是位姿分布更宽更难的必然结果,而非模型差。

⇒ $\sigma_{\text{real}}$ 作 CRLB 分母合法(它是真实观测噪声),据此诊断"模型受限"得到"否"有效;$\sigma_{\text{det}}$ 版 CRLB 保留作渐近天花板/检测器品质因数。决定性未来实验(现有数据做不了):在多姿态下各拍静态连拍,测 $\sigma_{\text{det}}$(pose) 再跨姿态平均——若 ≈ $\sigma_{\text{real}}$,则印证"$\sigma_{\text{excess}}$ = 位姿依赖检测噪声";若仍 ≪ $\sigma_{\text{real}}$,则残余部分另有归因。

小结:系统受限于检测噪声 $\sigma_{\text{real}}$。深度精确贴 CRLB($\sigma_{\text{real}}$)、模型方差 = 0;内参 RMS 贴地板(仅参数轻度非唯一,不影响测量精度);外参过定、可忽略。Fisher 理论「看着遥不可及」是 $\sigma_{\text{det}}$ 过乐观所致;四杠杆 + 联合 BA 零增益与「无系统误差可建模」的结论一致。进一步降 $\sigma_{\text{real}}$ 靠检测侧(对焦/光圈/抗锯齿板/亚像素调参/学习检测器/cam3-4 升 4MP),模型侧已无可建模结构;CRLB($\sigma_{\text{det}}$) 数值本身正确(渐近下界),但作判定分母时须配 $\sigma_{\text{real}}$ 版本。

11. 检测侧:亚像素窗口与 $\sigma_{\text{real}}$ 的剩余压缩

模型侧已穷尽(残差场 / 鱼眼 / 部分重叠 / 板非平面 / 联合 BA:深度全零增益)。
唯一可能的方向是检测侧:把 $\sigma_{\text{real}}$(0.12px,真实瓶颈)往 $\sigma_{\text{det}}$(0.023px)压。本节试最直接的一招 ——
cornerSubPix 亚像素窗口/参数(lib/exp_subpixel_sweep.py 静态扫描 + lib/exp_subpixel_recal.py 全量重标定),
并给出"深度已到极限"的论证。

(1) 静态扫描(exp_subpixel_sweep.py):对 cam1/cam4 的静态连拍,扫描窗口 (3,3)/(5,5)/(7,7) + 准则变体:

配置 cam1 $\sigma_{\text{det}}$ cam4 $\sigma_{\text{det}}$
(3,3) 0.0394 0.0348
(5,5) 现行 0.0285 0.0288
(7,7) 0.0250 (−12%) 0.0261 (−9%)
(5,5)+紧/松收敛 ≈0.0285(无差) ≈0.0288(无差)

(7,7) 比 (5,5) 静态 $\sigma_{\text{det}}$ 低 ~10%(准则无效)。但 $\sigma_{\text{det}}$ 是静态/近距,窗口随距离变(远距角点间距小,
大窗口可能越界双峰)⇒ 须全量重标定 + 独立测试判定真伪。

(2) 全窗口扫描(5–13)+ 自适应(exp_subpixel_recal.py):同图像集各窗口标定 → 独立测试 RMS(vs (5,5)):

窗口 cam1(4MP) cam4(2MP)
(5,5) 现行 0.1186 (基准) 0.1524
(7,7) 0.1133 (−2.3%) 0.1425 (−7.5%)
(9,9) 0.1108 (−4.4%) 0.4302 ❌双峰
(11,11) 0.1078 (−7.1%) 1.92 ❌
(13,13) 0.927 ❌双峰 3.17 ❌
auto 自适应 0.1085 (−6.4%) 0.1334 (−13.5%)

双峰边界(直径 ≥ ~1.5×间距即发散):4MP(3m 间距≈17px)安全到 (11,11)(径23≈1.35×间距),(13,13)(径27≈1.6×)发散;2MP(3m 间距≈11px)安全到 (7,7)(径15≈1.36×),(9,9)(径19≈1.7×)发散。固定窗口无法兼顾:4MP 想要 (11,11) 但 2MP 在 (9,9) 就发散;且同一相机近距(间距大)可用更大窗、远距(间距小)必须更小。

auto 自适应机制(detect.py::_adaptive_window,两阶段「先稳后准」):
(5,5) 小窗先做一遍 cornerSubPix —— 锁定每个点到正确鞍点(小窗永不双峰,杜绝 (11,11) 那种"提错角点");
② 从锁定后的精修点测实测角点间距(比整数粗定位更准),设自适应大窗 半径=round(间距×0.6) clip[3,11],
再 cornerSubPix 精修一遍 —— 此时已在正确峰上,大窗只做平均(降方差),不会被邻峰吸走。
又稳(小窗锁定永不错)又准(大窗平均降 $\sigma_{\text{real}}$)。验证:两阶段 auto 与单遍 auto 在本干净数据上数值相同
(cam1 0.1085、cam4 0.1334),但两阶段对脏图/极端斜姿更鲁棒(整数定位偏时也不会被邻峰吸走)。

  • cam1 auto −6.4%(≈ 最优固定 (11,11) −7.1%,但 (11,11) 在更远距会发散,auto 不会);
  • cam4 auto −13.5%(远超最优安全固定 (7,7) −7.5%——因为 auto 近距用大窗(11)、远距用小窗(7),逐距离取最优,而固定 (7,7) 全程保守)。
  • auto 逐距离:cam4 1m 0.141→0.134、2m 0.152→0.122、3m 0.161→0.150(各距离全降,3m 不发散);cam1 1m 0.125→0.097、3m 0.129→0.128(近距大降、远距持平)。

subpix
窗口扫描(5–13)+ auto(粗线):auto 各距离贴最优曲线、且永不双峰发散(4MP (13,13)、2MP (9,9)+ 均发散)。

trend
趋势曲线(稳定区,线性):(a) 测试 RMS 随窗口单调下降(更多像素平均 ⇒ 更准)——4MP 从 w=5 的 0.119 降到 w=11 的 0.108、
2MP 从 w=5 的 0.152 降到 w=7 的 0.143;× 标在边界=双峰发散(超出稳定区,不画进曲线:4MP w=13、2MP w=9+)。
auto(★)取各机稳定区的最优点(cam1 0.1085、cam4 0.1334),又准又稳。(b) auto 两阶段逐距离全稳定无发散且优于 (5,5)。

auto 是精度+可靠性兼顾的唯一机制:逐距离/逐分辨率自适应,充分回收"大窗平均"的精度收益,同时半径≤0.6×间距保证永不越邻角致双峰。无需逐机/逐距手调

(3) 为什么有效 —— 物理原理(深度):
cornerSubPix 在 winSize 半窗(实采 (2w+1)² 像素)内拟合二次曲面找鞍点极值作为亚像素角点。

  • 窗口越大 ⇒ 拟合用像素越多 ⇒ 定位方差越低($\sigma_{\text{real}}$↓):更多像素平均掉梯度噪声,这是大窗降 RMS 的根因。
  • 但窗口直径 ≳ 1.5×间距时,窗口含入相邻角点的鞍点 ⇒ 拟合曲面双峰 ⇒ cornerSubPix 收敛到邻角(错位 ~1 格距) ⇒ 残差剧增(cam4 (9,9)@3m=0.43px、(13,13)=3.17px)。
  • 最优 = 最大化平均(大窗)与避免双峰(窗径 < ~1.4×间距)的折中 ⇒ 安全半径 ≈ 间距×0.6(auto 取此)。
  • 间距 ∝ fx/z(焦距/距离):近距/高分辨间距大→auto 给大窗;远距/低分辨间距小→auto 给小窗。这正是 auto 优于固定窗口的本质:固定窗口只能对某一距离/分辨率最优,auto 对全部最优。
  • 准则无效(紧/松收敛 $\sigma_{\text{det}}$ 无差):收敛已达二次极值,再多迭代不动 ⇒ 窗口大小才是杠杆。

(4) 落地结果(已部署 config.py::REFINE_WIN="auto",全管线 auto 重标定完成)😒\sigma_{\text{real}}$(=测试 RMS)与深度实测下降:

相机 $\sigma_{\text{real}}$(测试RMS) (5,5)→auto 4 目深度 z(2m) (5,5)→auto
cam1(4MP) 0.116→0.109 (−6.1%)
cam2(4MP) 0.119→0.102 (−13.9%)
cam3(2MP) 0.147→0.138 (−6.0%)
cam4(2MP) 0.154→0.135 (−12.5%)
4 目深度 z 0.176→0.145mm (−17.8%);1m 0.074→0.064(−13.5%)、3m 0.336→0.307(−8.7%)
4 目横向 xy 0.191→0.160mm(−16.2%,2m);各距离 −15~−18%

auto 把 $\sigma_{\text{real}}$ 降 6–14%、深度降 ~10–20%。深度仍在(更低的)CRLB($\sigma_{\text{real}}$) 极限(z/Clb=0.71–0.92×)⇒ 仍是检测噪声受限,只是地板更低。这是检测侧唯一有效的改进手段(模型侧五杠杆+联合 BA 零增益);进一步增益须靠硬件。

(5) 为何深度已到极限(论证):

  • 深度实测贴 CRLB($\sigma_{\text{real}}$)😒/CRLB($\sigma_{\text{real}}$)=0.6–0.84×,即深度误差 = 几何 × $\sigma_{\text{real}}$,无模型误差项
    (五杠杆 + 联合 BA 全零增益 ⇒ 模型方差=0,©)。
  • $\sigma_{\text{real}}$ 是真实定位噪声(非偏差):残差场/鱼眼/联合 BA 零增益 + 同位跨图 std 0.10px≫固定 0.015–0.021px(③)。
  • 给定 $\sigma_{\text{real}}$,CRLB($\sigma_{\text{real}}$) 是理论下界,实测已贴之 ⇒ 任何**不改 $\sigma_{\text{real}}$**的手段都无法降深度。
  • 降 $\sigma_{\text{real}}$ 只能靠检测侧:本节证明 cornerSubPix 窗口能压 ~5–7%(2MP);再往下须硬件/采集
    (更锐对焦/更小光圈/更匀照明/抗混叠棋盘/学习型检测器/cam3-4 升 4MP)—— 无法在现有数据上仿真。
  • 结论:深度精度 = $\sigma_{\text{real}}$ × 几何 = CRLB($\sigma_{\text{real}}$),已基本达到(0.6–0.84×,缺口是 Kabsch 方法论 + 小样本,
    ④)。模型侧已无可建模结构;检测侧亚像素窗口收回 ~7%(2MP),进一步压缩须靠硬件。

12. 结论

  • 标定已经够好了。 0.12px 的重投影 RMS 不是「模型还拟合得不够」,而是检测噪声在真实工作点的水平——真实工作点比静态连拍恶劣约 5.3 倍。4 目生产配置在 1–3m 工作距离上的实测测量精度:深度 0.06–0.31mm、横向 0.08–0.29mm——深度已贴 CRLB($\sigma_{\text{real}}$) 理论极限($z/\text{CRLB}\approx 0.8\times$)。
  • 精度的诚实分母是 CRLB($\sigma_{\text{real}}$),不是 CRLB($\sigma_{\text{det}}$)。 用错分母会把一个「已贴极限」的系统误读成「还有 95% 模型方差可压」。
  • 四外参方案对比的公平口径是 full-system vs full-system。 联合 BA(J)深度持平、横向边际更优但绝对量亚 0.1mm,且基线被 fx↔tz 退化放大(准确度顾虑)。生产选冻结内参 BA,是收益不抵代价,不是联合 BA 不可用。
  • 想再提精度,去压检测噪声。 自适应亚像素窗口已收回 6–14%、深度 −18%;再往下须更高分辨率、更锐对焦,而不是换模型或加参数。

一句话:当系统贴着检测噪声地板时,模型侧已没有可建模的结构可挖,精度只剩检测侧的物理改进这一条路。

参考资料



文章链接:
https://www.zywvvd.com/notes/3d/four-eyed-vision-calibration/four-eyed-vision-calibration/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

四目视觉标定与精度评估(Four-Eyed Vision Calibration & Fisher Precision)
https://www.zywvvd.com/notes/3d/four-eyed-vision-calibration/four-eyed-vision-calibration/
作者
Yiwei Zhang
发布于
2026年8月11日
许可协议