piv_peak_locking — PIV assess op

• 数据种类:flow2d → table

• 调用: import fullseye as fs; fs.ledger.piv_peak_locking(flow, bins=20)(要直接调用实现,import pivops; pivops.piv_peak_locking(flow, bins=20);从台账取用则 opspiv.get("piv_peak_locking"))

用法

峰值锁定的强度:小数部分的分布偏离均匀分布的程度。

亚像素估计带有这样的偏差:真实位移的小数部接近 0 或 0.5 时会被拉向那里(来自相关峰形状与拟合函数形状不同,是 PIV 教科书级的系统误差)。只要流动不是均匀的,小数部应接近均匀分布,测量的就是与之的偏离。

指标 c0 是不依赖样本数的卡方型偏离: sum((n_i - n_bar)^2 / n_bar) / (bins - 1)。从均匀分布抽样时期望值为 1,因此在 1 附近就与均匀无法区分,越大越偏。

★ 但这个指标假定“真实位移的小数部是均匀的”。在窗口数少的场、位移缓慢变化的场中,真值本身的 c0 也会变大 (实测:线性斜坡的真值为 82 —— 窗口网格只有 19 列,小数部只能离散地出现)。因此请与同一输入的真值对比来解读 c0。

决定性的诊断另有其法 —— 把均匀平移的小数部从 0 变到 0.9,看估计值是否落在对角线上。实测(win=32、density 0.02):

========== ================= ==================

估计法 小数部误差的 RMS 最大绝对误差

========== ================= ==================

gauss3 0.0037 px 0.0088 px

parabolic 0.0104 px 0.0151 px

centroid 0.2259 px 0.3701 px

========== ================= ==================

centroid 把真值 0.1 答成 0.02,0.9 答成 0.98 —— 拉向整数的教科书式 S 形。这是确认该出现的东西出现了,而不是实现的缺陷(所以 3 种都保留着)。

Args:

flow: (2, h, w)。

bins: 小数部直方图的组数。

Returns:

dict: c0(两分量合并的指标)、hist((2, bins))、

frac_mean / frac_std、bins。

详细使用指南

• piv_displacement 族使用指南

参考(示例数据、文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

• 算法的正典(作者、年份)与用途见上面的族使用指南。

可运行的示例(实际调用该算子并已验证的样例)

• piv_field_analysis_tour — py -3.11 examples/piv_field_analysis_tour.py

• poc_battery_electrode_breathing — py -3.11 examples/poc_battery_electrode_breathing.py

类型可衔接的下一个算子(可接受 table 作为输入)

—

同类别(assess)

piv_sample_at_windows · piv_error_stats · piv_time_statistics


*Provenance: pivops.py — PIV 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.