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 个照常返回。
• 示例数据目录(下载 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.