增加条纹数量,相同的位置变化会产生更大的相位变化,按理说更容易测准。可条纹太密时,相机看到的明暗起伏又会变弱,甚至接近噪声。到底该选哪一个频率?

不能只挑画面最清楚的,也不能把别人的“最优 88 个周期”直接填进自己的设备。需要先测出系统在各个频率下的调制幅值,再把它与位置灵敏度放在同一个误差模型里比较。

这篇沿着“推导目标 → 采集标定数据 → 拟合 → 搜索 → 实测验收”展开。主线是扫描式条纹投影的窗口平滑模型;有关数据筛选、全局误差优化和近优集合的做法,会明确标为工程扩展。所有曲线都是本文公式计算的教学示意,不冒充硬件实验结果。

如果还不熟悉背景亮度 A、调制幅值 B、包裹相位和相位展开,可以先看条纹测量基础:相移、展开与深度学习。这里不再重复整套基础,重点回答频率怎样选。

先说清楚:选的是条纹数量,不是相移步数

量 本文记号 含义
条纹数量 f 规定投影范围内的完整周期数
空间频率 ν 单位空间长度内的周期数
条纹周期宽度 T_f 一次“亮→暗→亮”占据的长度
相移步数 N 一组相移图像的张数
投影帧率 fps 每秒投出多少幅图案

若投影范围宽度为 \(L\),则:

\[ \nu=\frac fL,\qquad T_f=\frac Lf. \]

例如在 100 mm 的范围内投 80 个周期,空间频率是 0.8 周期/mm,一个周期宽 1.25 mm。用 6 步相移测量它,意味着拍 6 张相同密度、不同偏移的条纹图,不是只投 6 个周期。

讨论最优值时,范围定义必须一致。原模型按特定扫描角区间定义条纹数,不能把半幅与整幅扫描范围的数值直接比较。实际投影器还可能按投影坐标而不是毫米设置频率,需要通过几何关系换算。

对于多频展开,本文主要选择的是最后负责精细测量的最高频率。低频、中频怎样配合,以及总共需要多少帧,仍是另外的设计问题。

为什么推荐分数是 fλ(f)

更密的条纹,提高位置灵敏度

先用一维线性编码理解相位与位置的关系:

\[ \Phi(x)=\frac{2\pi f}{L}x+\Phi_0. \]

其中 \(x\) 是编码方向的位置,\(\Phi_0\) 是相位基准。位置变化 \(\Delta x\) 产生:

\[ \Delta\Phi=\frac{2\pi f}{L}\Delta x. \]

取 \(L=100\) mm,位置差为 0.1 mm。20 个周期产生约 0.126 rad 的相位变化,100 个周期则产生约 0.628 rad。后者放大了同一位置差的相位响应。

这说明高频编码更敏感,还不能单独证明它更准确。相位本身能读得多稳定,也要算进去。

调制幅值下降,相位噪声会变大

相移图像满足:

\[ I_n=A+B(f)\cos(\phi-\delta_n). \] \(A\) 是背景亮度,\(B(f)\) 是当前频率下的明暗起伏幅度。在线激光扫描系统中,有限宽度的光带会把邻近位置的光混合起来,高频起伏往往更容易衰减。

在等步相移、小幅独立同方差亮度噪声条件下,常用近似为:

\[ \sigma_\phi\approx\sqrt{\frac2N}\frac{\sigma_I}{B(f)}. \] \(\sigma_I\) 是亮度噪声标准差,\(\sigma_\phi\) 是相位误差标准差。幅值越小,同样的亮度噪声就越容易影响角度估计。运动、饱和、谐波和整周期展开错误不在这个简化公式里。

把相位误差换到共同的位置尺度

由编码关系反求位置:

\[ x=\frac{L}{2\pi f}(\Phi-\Phi_0). \]

在展开正确、误差足够小时,误差传播给出:

\[ \begin{aligned} \sigma_x&\approx\frac{L}{2\pi f}\sigma_\Phi,\\ &\approx\frac{L}{2\pi f}\sqrt{\frac2N}\frac{\sigma_I}{B(f)}. \end{aligned} \]

固定范围、步数和噪声条件后:

\[ \sigma_x\propto\frac1{fB(f)}. \]

所以,不能拿高频和低频的原始相位误差直接比位置精度。高频相位数值即使更抖,换成相同空间尺度后仍可能更准。

这里的 \(x\) 是编码位置,不是任何装置都通用的深度公式。要预测三维坐标误差,还需经过实际标定映射的局部导数,也就是几何误差传播系数。

用衰减因子描述幅值变化

窗口平滑模型把调制幅值写成:

\[ B(f)=(A-\varepsilon)\lambda(f). \] \(\varepsilon\) 表示环境光贡献,\(\lambda(f)\) 是调制幅值的保留比例。若平均投影贡献 \(A-\varepsilon\) 不随频率明显改变: \[ \sigma_x\propto\frac1{f\lambda(f)}. \]

于是推荐分数与最优选择就是:

\[ \begin{aligned} Q(f)&=f\lambda(f),\\ f_{\mathrm{opt}}&=\underset{f\in\mathcal F}{\arg\max}\ Q(f). \end{aligned} \] \(\mathcal F\) 是允许使用的频率集合,arg max 的意思是“找出让分数最大的那个频率”。这个乘积来自误差传播,不是随意给两个指标加权。

一个算得出来的例子:条纹更清楚,不代表位置更准

先用高斯平滑做教学示例,它便于解析计算,但不是后文五段模型的拟合结果。设投影宽度为 100 mm,高斯空间权重的标准差为 0.2 mm。

这里用 \(s\) 表示高斯标准差,它不是直接等于光带的直径或半高全宽。没有统一线宽定义时,不能把设备标注的宽度直接填进来。

高斯权重对正弦的幅值响应是:

\[ \lambda(f)=\exp\left[-2\pi^2s^2\left(\frac fL\right)^2\right]. \]

高斯教学模型中,频率提高时调制幅值下降,推荐分数先升后降,归一化位置误差在80个周期附近最低

图 1:同一模型的三种观察方式。上图看幅值,中图看推荐分数,下图看相对位置误差。示例参数 L=100 mm、s=0.2 mm;不是实测数据。

条纹数 f 幅值保留比例 λ 分数 Q 预测误差相对最优值
20 0.969 19.38 2.49 倍
40 0.881 35.25 1.37 倍
60 0.753 45.15 1.07 倍
80 0.603 48.26 1.00 倍
100 0.454 45.40 1.06 倍
120 0.321 38.49 1.25 倍
160 0.132 21.20 2.28 倍

20 个周期保留了很高的幅值,但位置灵敏度低;160 个周期虽然密,幅值已经损失太多。80 附近更合适。

还可以直接求导检查。将指数中的系数记为 \(c\):

\[ \begin{aligned} c&=\frac{2\pi^2s^2}{L^2},\\ Q(f)&=f\exp(-cf^2),\\ Q'(f)&=\exp(-cf^2)(1-2cf^2). \end{aligned} \]

正频率上的最优点为:

\[ f_{\mathrm{opt}}=\frac{L}{2\pi s}\approx79.58. \]

若候选值限定为 1 到 200 的整数,结果就是 80。在这个特定高斯模型中,连续最优点的幅值保留比例为 \(e^{-1/2}\approx0.607\)。这不意味着其他光束也应在“对比度降到六成”时选频率。

标定之前,要准备哪些数据

实际算法不能预先知道光束的响应曲线,要测量它。

最优频率标定流程,从固定相机和激光设置、白板多频采集、提取幅值,到逐像素拟合、候选搜索和实际重建验收

图 2:主体是模型标定与搜索;有效像素筛选、保留频率验证和最终验收是本文补充的工程质量检查。

白板、工作距离和固定设置

选用稳定、近似漫反射的白色平面目标,避免强光泽、纹理、遮挡和饱和。它是帮助分离系统响应的标定目标,不限制以后只能测白色物体。

同一个距离位置上,比较不同频率时应固定曝光、增益、激光功率、相移步数和图案调制方式。关闭自动曝光与自动增益,保持相机在有效对焦范围内。频率变了,曝光也跟着变,测得的幅值就不再只反映频率响应。

沿工作深度移动白板,在多个距离重复。每次移动后等目标稳定再采集,记录距离、曝光、功率和相机设置。扫描式投影减少了某些投影端离焦问题,但相机的景深仍然有限。

频率点怎么安排

一种已报道的采样设置是:

1
1, 5, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200

每个频率采集 6 步相移,单个距离需要 12×6=72 张基础图像。假设自行安排 5 个距离,就是 360 张,还不包括暗场和重复采集。这里的五个距离只是采集量示例,不是规定。

采样应覆盖衰减较小的低频、可能出现最优点的区域,以及衰减明显的较高频。可以先粗采,再在峰值附近加密。只测峰值左边几个点,却把模型一路外推到很高的频率,得到的“最优值”可能没有数据支持。

对实际实现,数据可组织为:

1
2
3
images[distance, frequency, phase_step, y, x]
background[distance, y, x]
valid_mask[distance, frequency, y, x]

这里强调坐标含义,不要求一次把全部图片装入内存。逐距离、逐图块处理同样可以完成标定。

从相移图计算 A、B 和衰减因子

对某个像素、某个距离和某个频率的一组相移图,使用与前文一致的减号约定,计算:

\[ \begin{aligned} \delta_n&=\frac{2\pi n}{N},\\ A&=\frac1N\sum_{n=0}^{N-1}I_n,\\ M&=\sum_{n=0}^{N-1}I_n\sin\delta_n,\\ D&=\sum_{n=0}^{N-1}I_n\cos\delta_n,\\ B&=\frac2N\sqrt{M^2+D^2}. \end{aligned} \]

于是:

\[ \lambda=\frac{B}{A-\varepsilon}. \]

暗环境下近似为 \(\lambda=B/A\)。例如 \(A=120\)、\(B=72\)、环境光可忽略,得到 0.6;更高频率下若 \(A\) 仍为 120、\(B\) 降到 36,就得到 0.3。

原始资料有一处正文把这个比例写成倒数。由幅值定义可知应为 B/A,复现时不能直接照抄。并且,这种归一化依赖投影调制和成像线性条件;若图案本来就没有采用完整的正弦调制,响应比例还会包含调制深度。

环境光与黑电平

在同样曝光、增益、环境条件下关闭投影光,可以估计环境背景。相机黑电平等电子偏置还需要按设备校正方式处理,不应算作有效的平均投影贡献。

分母接近零时不要继续相除。白板暗部、遮挡和低信号区域的比值容易剧烈波动,应该标记无效,而不是让异常值参与后面的拟合。

幅值估计在噪声底附近有偏

即使真实条纹幅值为零,噪声也会让 M、D 的平方和大于零。因此,用模长估计出来的 B 通常不会恰好为零。

如果高频端已经没有有效条纹,却把这些噪声幅值当作真实响应,拟合曲线就可能被抬高,进而错误推荐很高的频率。

工程上至少需要筛除:

  • 达到饱和值或明显波峰截断的像素;
  • 背景校正后过暗、调制幅值接近噪声底的像素;
  • 坏点、遮挡、采集期间移动的区域;
  • 相移波形残差异常,明显不符合正弦模型的区域。

阈值应由相机噪声与重复采集决定。后文代码中的阈值仅演示接口,不是所有相机通用的设定。

用五段光强模型拟合 λ(f)

分段是在描述什么

线激光不是没有厚度的一条数学直线。它在扫描方向上的空间光强分布,会影响每个位置积累到的光。

把光带总宽度记为 W,分成五段,每段宽度为 \(\ell=W/5\)。五段的相对光强分别为 \(c_{-2}\) 到 \(c_2\)。

五段对称光强示意,中央段和内外两对段分别贡献归一化权重,区分总宽度W与单段宽度ell

图 3:用 1、2、4、2、1 作为教学权重。图中的数值不是对真实激光器的测量,也不是固定的最佳分布。

对于近似对称的分布,在模型适用的响应区间内,可以写成:

\[ \begin{aligned} G(f)&=a_2+a_3\cos(2a_1f)\\ &\quad+a_4\cos(4a_1f),\\ \lambda(f)&=\operatorname{sinc}(a_1f)G(f). \end{aligned} \]

此处采用 \(\operatorname{sinc}(z)=\sin z/z\),在零点按极限取 1。NumPy 的 np.sinc 使用另一种常见定义:np.sinc(x)=sin(πx)/(πx),所以代码应写成 np.sinc(a1*f/np.pi) 才对应这里的表达式。

定义总权重 \(C=\sum_{k=-2}^{2}c_k\) 后:

\[ \begin{aligned} a_1&=\frac{\pi\ell}{L},\\ a_2&=\frac{c_0}{C},\\ a_3&=\frac{c_{-1}+c_1}{C},\\ a_4&=\frac{c_{-2}+c_2}{C}. \end{aligned} \] \(a_1\) 控制空间宽度相对投影范围的尺度,另外三项分别表示中央段、内侧两段和外侧两段的贡献。在严格归一化定义下,它们非负,且和为 1。如果额外加入投影调制深度等比例项,应明确把它与这些权重分开。

同样是“线宽”,总宽度 W、单段宽度 ℓ、高斯标准差 s 都不同。混用会让最优频率差出一个常数倍,而程序可能仍然正常运行。

非线性最小二乘怎么用

每个像素得到若干实测点 \((f_i,\lambda_i)\),通过拟合寻找模型参数。为了让公式更好读,先把残差记为 \(r_i\):

\[ \begin{aligned} \boldsymbol a&=(a_1,a_2,a_3,a_4),\\ r_i(\boldsymbol a)&=\hat\lambda(f_i;\boldsymbol a)-\lambda_i,\\ \hat{\boldsymbol a}&=\arg\min_{\boldsymbol a}\sum_i w_i r_i^2(\boldsymbol a). \end{aligned} \]

残差是预测值与实测值之差;最小二乘最小化残差平方和。参数进入 sinc 和余弦函数,因此这是非线性拟合。权重 \(w_i\) 可以全取 1,也可以根据重复测量的不确定度设置,降低不可靠数据的影响。

原方法使用最小二乘。以下是实现时的额外建议:

  1. 给参数合理的物理边界,不让负光强或不合理线宽拟合噪声。
  2. 尝试多个合理初值,避免只接受一次局部收敛结果。
  3. 记录逐像素残差和失效掩膜,不只报告整幅图平均误差。
  4. 预留部分频率或独立重复采集作验证,检查模型能否预测没参与拟合的数据。
  5. 只在经过采样支持的区间内推荐。最优点跑到搜索边界,应提示范围可能不足。

如果某些像素无法可靠拟合,应返回无效标志,而不是随手用周围均值填成“已标定”。邻域约束可以另做扩展,但会引入新的空间假设。

正负响应与不对称光束不能忽略

通过模长计算的 B 非负,但 sinc 与余弦组合的传递系数在部分频段可能为负。负响应会伴随相位翻转,不只是幅值数字换了符号。

因此,不应在任意频段直接拿有符号曲线拟合 B/A,更不能静默裁掉负值。初次实现可以限定在响应符号明确、幅值充足且经过验证的工作区间;若需要跨过零点,必须分别处理幅值和相位。

不对称光束还可能引入额外相位偏移。原模型也讨论了使相关正弦项抵消的频率关系,例如单段宽度与条纹周期之比接近半整数。但正弦项为零不自动保证幅值非零、相位分支正确,更不能把这个条件脱离信号强度单独用来选频率。

搜索时先定义允许使用的候选集合

得到模型以后,对每个像素 p、距离位置 j 计算:

\[ f^*_{p,j}=\underset{f\in\mathcal F}{\arg\max}\ f\lambda_{p,j}(f). \]

如果只考虑 10 到 180 的整数,一共 171 个候选,逐个计算即可。响应曲线可能有多个局部峰值,这时有限集合枚举比依赖一个初值的局部优化更容易检查。

整数周期是常见图案设计选择,但不是所有设备在数学上只能用整数频率。候选集合应来自实际编码和硬件接口。

候选值进入评分前,需要同时满足:

约束 检查内容
模型有效性 在已验证的频率区间内,响应分支明确
有效信号 调制幅值高于噪声底,饱和和失效比例可接受
投影采样 每个周期有足够有效采样,波形可实现
相机采样 局部条纹没有严重混叠,倾斜表面也要检查
展开方案 低频到高频的级次恢复可靠
工作范围 覆盖目标距离与关键区域,不只在中心点有效

Nyquist 条件只是某些混叠问题的理论底线,不是高精度解相的验收标准。尤其在陡峭表面,局部成像条纹可能比白板标定时更密。

如果允许的候选频率本来就很少,也可以每个都实际采集,直接比较 \(f\lambda\),不一定要先拟合。模型的价值主要在物理解释、频率点之间的估计和数据降噪,不是增加步骤本身。

从每个像素的最优值,到设备的一个设置

原方法:先求局部最优,再汇总平均

扫描位置、光路和工作距离不同,参数也可能不同,所以会得到一张最优频率图,而不是一开始就得到一个数字。

原方法在每个距离求所有像素的最优频率,然后取均值,再对工作空间的多个位置取均值:

\[ \begin{aligned} \bar f_j&=\frac1{P_j}\sum_{p\in V_j}f^*_{p,j},\\ f_{\mathrm{final}}&=\frac1J\sum_{j=1}^{J}\bar f_j. \end{aligned} \] \(V_j\) 是第 j 个距离的有效像素集合,\(P_j\) 是其数量。实现时排除无效像素,是实际数据质量控制。最终均值若不属于允许集合,应映射到可用候选,并检查相邻选择。

一个已报道的系统在约 220–280 mm 的工作空间汇总得到 88 个周期。这是该系统的标定结果,不是方法给所有设备规定的答案。

工程扩展:平均局部最优,不一定最小化全局误差

两个操作一般不等价:

\[ \operatorname{mean}(\arg\max Q_p) \ne \arg\max(\operatorname{mean}Q_p). \]

更不用说,它们也未必等价于最小化重建坐标的平均误差。有些像素在峰值附近很平坦,另一些像素在稍高频率就迅速失去信号;简单平均各自的峰值位置,没有考虑这种差别。

若目标是全局平均方差,可以在明确噪声和几何系数后,直接对所有有效区域评价同一个候选频率:

\[ \begin{aligned} \sigma_{p,j}(f)&=\frac{C_{p,j}}{f\lambda_{p,j}(f)},\\ f^*&=\arg\min_{f\in\mathcal F}\sum_{j,p}w_{p,j}\sigma_{p,j}^2(f). \end{aligned} \] \(C_{p,j}\) 汇总噪声、平均亮度和必要的几何误差传播系数。它是否能视为与频率无关,也要验证。\(w_{p,j}\) 表示应用权重,可以优先照顾常用距离或关键测量区域。

还有一种选择是优化误差的高分位数,而不是平均值。这样可以照顾表现较差的区域,但可能牺牲平均精度。这里没有唯一正确的权重,关键是声明“推荐”在优化什么。

无论采用哪种汇总,都不要让不同频率各自剔除一批困难像素后直接比平均值。应使用可比的公共评估区域,或显式加入有效覆盖率约束,否则“更准”可能只是删掉了更多坏点。

用近优集合替代一个过于精确的数字

如果 80 和 88 的预测误差差别很小,但 88 更容易加入现有展开链,就没有必要为了数学峰值强行更改整套编码。

设允许保留最优分数的比例为 \(\eta\),定义:

\[ \mathcal F_\eta= \{f\in\mathcal F:Q(f)\geq\eta Q_{\max}\}. \]

若 \(\eta=0.95\),在同一误差模型下,集合中各频率的预测标准差不超过最佳值的 \(1/0.95\approx1.053\) 倍,也就是多约 5.3%。这是标准差的容差,不是方差的 5%。

推荐分数的95%近优集合,在高斯教学示例中为63到98个整数周期,并标出可用离散候选与最优80

图 4:浅色带表示分数至少达到最优值的 95%。灰色点演示一组设备可能允许的离散候选,不能把带内任意数值都视为硬件可用。

在前面的高斯示例中,1 到 200 的整数搜索给出最优 80,95% 近优集合为 63 到 98。这个例子只有一个连续峰,所以集合刚好是连续区间;真实响应有多个峰或硬件只允许部分值时,必须保留候选列表,不能只报告最小值和最大值。

还应区分“近优容差”和“统计置信区间”。95% 分数阈值是人为选择的工程容差,并不是说真实最优频率有 95% 概率落在这里。若要估计标定不确定性,可以对重复数据重新拟合、重新搜索,观察结果如何变化。

一段能运行的推荐代码

下面只用 Python 标准库,演示从已有衰减曲线到候选评分的过程。高斯曲线是教学输入,没有做白板采集或五段参数拟合,也没有替代真实的展开可靠性检查。

代码返回近优候选列表,而不是默认它们连续。模拟设备约束通过 allowed 参数传入,幅值下限通过 min_lambda 演示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import math


def gaussian_lambda(f, width=100.0, sigma=0.2):
if width <= 0 or sigma <= 0:
raise ValueError("width and sigma must be positive")
return math.exp(-2 * math.pi**2 * sigma**2 * (f / width)**2)


def recommend(allowed, attenuation, eta=0.95, min_lambda=0.05):
if not 0 < eta <= 1:
raise ValueError("eta must be in (0, 1]")
if not 0 < min_lambda <= 1:
raise ValueError("min_lambda must be in (0, 1]")

scores = {}
for f in sorted(set(allowed)):
if not math.isfinite(f) or f <= 0:
continue
lam = attenuation(f)
# This example expects a positive, normalized amplitude response.
if not math.isfinite(lam) or not min_lambda <= lam <= 1:
continue
scores[f] = f * lam

if not scores:
raise ValueError("No reliable candidate frequency")

# Equal scores retain the lower frequency because keys are sorted.
best = max(scores, key=scores.get)
threshold = eta * scores[best]
near = [f for f, score in scores.items() if score >= threshold]
return best, near, scores


if __name__ == "__main__":
best, near, scores = recommend(range(1, 201), gaussian_lambda)
assert best == 80
assert near == list(range(63, 99))
print("best:", best)
print(f"Q_best: {scores[best]:.5f}")
print("near:", near[0], "..", near[-1], "count:", len(near))

# Example hardware restriction: only these frequencies are available.
allowed = [60, 72, 88, 100, 120]
best2, near2, _ = recommend(allowed, gaussian_lambda)
print("restricted best:", best2)
print("restricted near:", near2)

保存为 recommend_frequency.py,运行 python recommend_frequency.py。预期输出:

1
2
3
4
5
best: 80
Q_best: 48.26482
near: 63 .. 98 count: 36
restricted best: 72
restricted near: [72, 88]

受限候选中,72 的分数略高于 88,所以选择 72;两者都落在相应的近优集合里。这里完全来自教学参数与候选表,不能用于推断真实装置的最优值。

若把 attenuation 换成实测插值或拟合函数,搜索部分可以复用。但要先限定有效区间;有符号的五段传递系数不能直接交给这个“正幅值响应”接口,也不能随意取绝对值忽略相位分支。

推荐值出来后,还要过三道验收

相位展开:小误差模型不包含整周期误判

\(f\lambda(f)\) 评价的是展开正确条件下的局部误差。级次错一档,就是一个完整周期的错误,不是公式中的轻微噪声。

高频要放进实际展开链验证,不能只把最后一个频率改掉。对层级展开,低频误差会按频率比放大,跨度过大可能把细频率级次推过取整边界。需要检查实际场景的展开失效率,而不只是白板上的包裹相位平不平滑。

噪声与曝光:不固定时,应改用更一般的评分

如果频率变化时,曝光、功率、背景或噪声也显著变化,不能再只用 \(f\lambda\)。在相同步数、小噪声假设下,更一般的分数是:

\[ S(f)=\frac{fB(f)}{\sigma_I(f)}. \]

若相移步数 N 也变化,还要考虑 \(\sqrt N\) 与采集时间预算。真实噪声可能依赖亮度并具有不同来源,这时最好直接使用经验证的误差模型,而不是把固定噪声公式无限推广。

重建验证:重复性与绝对偏差分开报告

推荐频率及其邻近候选都应重建实际目标,分别检查重复性、参考尺寸偏差、有效覆盖率、边缘和台阶表现。相同物体反复得到一样的错误尺寸,说明重复性好,但准确度并不好。

还可以观察模型是否把最优值推到搜索边界。如果是,就补采样或报告“最优点尚未被当前范围包围”,而不是输出一个看似确定的数字。

一个推荐结果应该交代什么

字段 为什么需要
推荐周期数与范围定义 防止整幅、半幅或不同视场之间混用
对应空间频率和周期宽度 便于与线宽、采样尺度比较
工作距离、曝光、增益、功率、相移步数 说明标定结果在哪些条件下有效
允许集合与近优候选列表 给展开方案和硬件设计留出选择
拟合误差及有效像素比例 防止模型只适用于少数好像素
汇总目标与权重 说明优化的是平均误差、关键区域还是尾部风险
展开失效率 补上局部小噪声模型看不到的错误
重复性与参考误差 区分稳定和准确

光源、焦点、曝光策略或工作范围明显变化后,应重新检查模型,而不是永久沿用一次标定值。是否完整重标,可先通过少量验证频率判断原曲线是否仍然成立。

记住优化对象,而不是记住某个频率

这套方法做的是一件具体的事:在可靠的候选集合里,比较位置灵敏度提高与调制幅值损失,找到预测位置误差较小的选择。

首次实现不必马上追求复杂的全局优化。先在一个白板距离采集几组频率,画出实测 B、归一化 λ 与 fλ 三条曲线,再拿峰值附近的几个候选做重复重建。如果数据都没有覆盖峰值,或者展开已经出错,增加优化器复杂度并不能解决问题。

资料与延伸阅读

本文的高斯曲线、五段示意、流程和封面均为自行绘制。原方法的局部最优均值策略,与本文建议的加权误差、有效覆盖率和近优集合应分开理解;示例代码只验证推荐计算,没有宣称完成硬件标定。