speckle_quality — PIV solid op

• Datenarten: image2d → table

• Aufruf: import fullseye as fs; fs.ledger.speckle_quality(img: 'Any') -> 'dict[str, float]' (die Implementierung direkt: import dic; dic.speckle_quality(img: 'Any') -> 'dict[str, float]'; aus dem Register: opspiv.get("speckle_quality"))

Verwendung

Gibt mit 4 Zahlen an, ob das aufgenommene Speckle-Muster für DIC geeignet ist.

Existiert weder in pivops noch in fullseye (speckle_filter ist die Entfernung von SAR- Speckle-Rauschen, etwas anderes). Ein Einstieg, um am Aufnahmeort zu beurteilen, "ob sich mit diesem Muster messen lässt".

Argumente

img Speckle-Bild (2-D). Die Leuchtdichteskala ist beliebig, aber coverage

wird mit einer relativen Schwelle gezählt, die auf Minimum und Maximum innerhalb des Bildes beruht.

Der Rückgabewert ist ein dict:

mig mittlerer Intensitätsgradient sqrt(mean(Ix² + Iy²)).

Der DIC-Qualitätsindex von Pan et al. Die Untergrenze der Verschiebungsvarianz

wird durch σ_noise / (mig √N) bestimmt; ist dieser Wert

klein, lässt sich durch nichts messen.

grad_rms sqrt(mean(Ix²)) nur in x-Richtung.

coverage Anteil der Pixel über 0.2*(max-min) + min.

mean_blob_diameter_px Schätzwert des mittleren Speckle-Durchmessers [px] (siehe unten).

★ mean_blob_diameter_px ist eine Schätzung, keine Messung

Der Radius R½, bei dem das radiale Mittel der Autokorrelation des mittelwertbereinigten Bildes auf 0.5 fällt, wird linear

interpoliert, und diameter = √2 · R½ wird geliefert. Begründung für √2: für ein Feld zufällig verteilter

Gauß-Speckles mit 1σ-Radius r ist die Autokorrelation ein Gauß mit 1σ = r√2, daher

R½ = 2r√(ln2), während die FWHM eines Speckles 2r√(2ln2) ist; das Verhältnis ist genau √2.

Mit der FWHM stimmt es also nur unter der Annahme gaußförmiger Speckles mit unkorrelierten Positionen überein.

Gemessen (links: analytischer Speckle, 1σ-Radius variiert, Anzahl so angepasst, dass der Bedeckungsgrad gleich bleibt.

rechts: piv_synth_particles; diameter_px ist 2σ, daher ist die FWHM

1.1774 × diameter_px):

1σ r FWHM Schätz Verh.| d_px FWHM Schätz Verh. 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 |

Bei gaußförmigen Speckles innerhalb von 3 %. Echter Speckle (gedruckt, gesprüht) ist

nicht gaußförmig; diese Tabelle bestätigt also, dass die Umrechnungsarithmetik stimmt,

und ist nicht die Genauigkeit an echten Aufnahmen. Wodurch es verzerrt wird:

• ist die Speckle-Form nicht gaußförmig, weicht schon die √2-Umrechnung ab.

• niederfrequente Ungleichmäßigkeit (Beleuchtungsgradient) hebt die Ausläufer der Autokorrelation an und ergibt zu große Werte. Zuerst einen Hochpass anwenden.

• die Autokorrelation ist zirkulär (FFT), daher stört ein periodischer Hintergrund.

• als repräsentativer Radius eines Rings dient der mittlere Radius innerhalb des Rings. Mit der Bin-Nummer gerät die Diagonale √2 in den Ring mit Radius 1, und bei 1σ=0.6 px ergab sich ein Durchmesser von 0.80-fach (2 Zehntel zu klein).

★ MIG ist ein Index für eine untere Schranke, keine zu maximierende Zielfunktion

In der linken Tabelle oben wächst mig, je feiner die Speckles (0.1127 bei 1σ=0.6 gegenüber

0.0384 bei 1σ=4.0, 2.9-fach). Speckle mit 1.4 px Durchmesser ist jedoch unter-

abgetastet, und in der Messung von Abschnitt 9 von examples/poc_dic_strain.py sind Verzerrung und Streuung

am schlechtesten. Maximiert man MIG, wählt man nicht messbaren Speckle.

Bei den Partikelbildern der rechten Tabelle flacht es bei d=4.0 ab und sinkt bei d=6.0 leicht ——

derselbe Index ist je nach Erzeugung der Eingabe monoton oder nicht, daher

nicht als Absolutwert, sondern zum Vergleich gleich aufgenommener Bilder verwenden.

★ Die Schwelle von coverage ist nicht Otsu

Es ist die feste Schwelle 0.2*(max-min) + min. Otsu setzt eine bimodale Verteilung voraus, doch

die Intensitätsverteilung von Speckle ist durch Überlappung der Speckles oft unimodal, und mit Otsu

wandert die Schwelle von Bild zu Bild, sodass kein Vergleich möglich ist. Eine feste erlaubt wenigstens,

Bilder derselben Skala zu vergleichen.

★ MIG hat eine Einheit

"Leuchtdichte / px". Ob man 8-bit-Ganzzahlen unverändert übergibt oder vorher auf [0, 1] normiert, macht

einen Faktor 255 aus. Vergleichbar nur zwischen Bildern derselben Skala.

fail-closed

• nicht 2-D / kleiner als 8x8 / enthält NaN / Inf.

• das Bild ist völlig gleichförmig (max == min) —— kein einziger Speckle.

• die Autokorrelation fällt nicht unter 0.5 (Speckles größer als das Sichtfeld) —— nur dann ist mean_blob_diameter_px nan. Die übrigen 3 werden geliefert.

Ausführlicher Anwendungsleitfaden

• Leitfaden zur Familie piv_displacement

Referenzen (Beispieldaten, Literatur)

• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).

• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.

• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• piv_field_analysis_tour — py -3.11 examples/piv_field_analysis_tour.py

Typkompatible Folge-Operatoren (nehmen table als Eingabe)

—

Gleiche Kategorie (solid)

strain_from_displacement · correlation_quality


*Provenance: dic.py — PIV Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*

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