speckle_quality — PIV solid op

• 数据种类:image2d → table

• 调用: import fullseye as fs; fs.ledger.speckle_quality(img: 'Any') -> 'dict[str, float]'(要直接调用实现,import dic; dic.speckle_quality(img: 'Any') -> 'dict[str, float]';从台账取用则 opspiv.get("speckle_quality"))

用法

用 4 个数字返回所拍摄的散斑是否适合 DIC。

pivops 和 fullseye 中都没有(speckle_filter 是 SAR 斑点噪声的 去除,是另一回事)。用于在拍摄现场判定“这个图案能否测量”的接口。

参数

img 散斑图像(2 维)。亮度的标度不限,但 coverage

以图像内最小、最大值为基准的相对阈值来计数。

返回值为 dict:

mig 平均亮度梯度 sqrt(mean(Ix² + Iy²))。

Pan 等人的 DIC 质量指标。位移方差的下限

由 σ_noise / (mig √N) 决定,因此它

小的话怎么做都测不出来。

grad_rms 仅 x 方向的 sqrt(mean(Ix²))。

coverage 超过 0.2*(max-min) + min 的像素比例。

mean_blob_diameter_px 斑点平均直径 [px] 的估计值(见下)。

★ mean_blob_diameter_px 是估计而不是测量

用线性插值求出减去平均后图像的自相关径向平均降到 0.5 的半径

R½,返回 diameter = √2 · R½。√2 的依据:随机撒布 1σ 半径 r 的

高斯斑点所得场的自相关是 1σ 为 r√2 的高斯,因此

R½ = 2r√(ln2),斑点的 FWHM 为 2r√(2ln2),比值恰好是 √2。

也就是说,只有在斑点为高斯且位置无相关这一假定之下才与 FWHM 一致。

实测(左:解析散斑,改变 1σ 半径并调整个数使覆盖率一致。

右:piv_synth_particles,diameter_px 是 2σ,因此 FWHM 为

1.1774 × diameter_px):

1σ r FWHM 估计 比 | d_px FWHM 估计 比 cov mig

0.6 1.41 1.36 0.97 | 1.5 1.77 1.80 1.02 0.043 0.1351

1.0 2.35 2.39 1.01 | 2.5 2.94 2.93 1.00 0.106 0.1676

1.6 3.77 3.77 1.00 | 4.0 4.71 4.69 1.00 0.159 0.1775

2.5 5.89 5.77 0.98 | 6.0 7.06 7.01 0.99 0.286 0.1764

4.0 9.42 9.18 0.97 |

高斯斑点在 3 % 以内。真实的散斑(印刷、喷涂)并非

高斯,因此这张表是确认换算的算术正确,

而不是实拍中的精度。会偏向哪里:

• 斑点形状不是高斯时,√2 的换算本身就会偏。

• 有低频不均(照明梯度)时,自相关的尾部被抬高,结果偏大。请先做高通滤波。

• 自相关是循环相关(FFT),因此有周期性背景时会被扰乱。

• 环的代表半径使用环内半径的平均。若使用 bin 编号,半径 1 的环中会混入对角的 √2,在 1σ=0.6 px 时直径为 0.80 倍(偏小 2 成)。

★ MIG 是截断下限的指标,而不是要最大化的目标函数

在上面左表中,mig 斑点越细越大(1σ=4.0 时 0.0384,

1σ=0.6 时 0.1127,2.9 倍)。但直径 1.4 px 的散斑采样

不足,在 examples/poc_dic_strain.py 第 9 节的实测中偏差和离散都

最差。最大化 MIG 会选中测不了的散斑。

右表的粒子像在 d=4.0 达到顶点,d=6.0 时略微下降 ——

同一指标会因输入的生成方式而单调或不单调,因此

不要看绝对值,而要用于同样拍法之间的比较。

★ coverage 的阈值不是 Otsu

是 0.2*(max-min) + min 的固定阈值。Otsu 假定双峰分布,但

散斑的亮度分布常因斑点重叠而呈单峰,用 Otsu 的话

阈值会随图像变化而无法比较。固定的话至少

同一标度的图像之间可以比较。

★ MIG 有单位

“亮度 / px”。以 8 bit 整数原样传入还是归一化到 [0, 1] 后传入,

会相差 255 倍。只能在同一标度的图像之间比较。

fail-closed

• 不是 2 维 / 小于 8x8 / 含 NaN、Inf。

• 图像完全均匀(max == min)—— 1 个斑点也没有。

• 自相关不降到 0.5 以下(斑点比视场大)—— 只有此时 mean_blob_diameter_px 为 nan。其余 3 个照常返回。

详细使用指南

• 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

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

—

同类别(solid)

strain_from_displacement · correlation_quality


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

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