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.