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"))
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.
• Leitfaden zur Familie piv_displacement
• 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.
• piv_field_analysis_tour — py -3.11 examples/piv_field_analysis_tour.py
table als Eingabe)—
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.