piv_peak_locking — PIV assess op

• Datenarten: flow2d → table

• Aufruf: import fullseye as fs; fs.ledger.piv_peak_locking(flow, bins=20) (die Implementierung direkt: import pivops; pivops.piv_peak_locking(flow, bins=20); aus dem Register: opspiv.get("piv_peak_locking"))

Verwendung

Stärke des Peak-Lockings: wie stark die Verteilung der Nachkommaanteile von der Gleichverteilung abweicht.

Die Subpixel-Schätzung hat eine Verzerrung, die den Nachkommaanteil der wahren Verschiebung zu 0 oder 0.5 hinzieht, wenn er dort liegt (ein lehrbuchmäßiger systematischer Fehler von PIV, der daher rührt, dass die Form des Korrelationsgipfels von der Form der angepassten Funktion abweicht). Ist die Strömung nicht gleichförmig, sollte der Nachkommaanteil nahezu gleichverteilt sein, und die Abweichung davon wird gemessen.

Der Index c0 ist eine Chi-Quadrat-artige Abweichung, unabhängig vom Stichprobenumfang:

sum((n_i - n_bar)^2 / n_bar) / (bins - 1). Bei Stichproben aus einer Gleichverteilung ist der Erwartungswert 1, daher ist es um 1 herum nicht von gleichverteilt zu unterscheiden; je größer, desto verzerrter.

★ Dieser Index setzt jedoch voraus, dass "der Nachkommaanteil der wahren Verschiebung gleichverteilt ist". In Feldern mit wenigen Fenstern oder langsam variierender Verschiebung wird schon das c0 der Ground Truth groß (gemessen: 82 für die Ground Truth einer linearen Rampe —— das Fenstergitter hat nur 19 Spalten, sodass der Nachkommaanteil nur diskret auftritt). c0 daher im Vergleich mit der Ground Truth derselben Eingabe lesen.

Die entscheidende Diagnose ist eine andere —— den Nachkommaanteil einer gleichförmigen Translation von 0 bis 0.9 variieren und prüfen, ob die Schätzwerte auf der Diagonale liegen. Gemessen (win=32, density 0.02):

========== ================= ==================

Verfahren RMS Bruchteilf. max. Absolutfehler

========== ================= ==================

gauss3 0.0037 px 0.0088 px

parabolic 0.0104 px 0.0151 px

centroid 0.2259 px 0.3701 px

========== ================= ==================

centroid antwortet auf wahre 0.1 mit 0.02 und auf 0.9 mit 0.98 —— die lehrbuchmäßige S-Kurve, die zu ganzen Zahlen zieht. Es bestätigt, dass erschienen ist, was erscheinen sollte, und ist kein Defekt der Implementierung (deshalb sind alle 3 erhalten).

Args:

flow: (2, h, w).

bins: Anzahl der Klassen des Histogramms des Nachkommaanteils.

Returns:

dict: c0 (Index für beide Komponenten zusammen), hist ((2, bins)),

frac_mean / frac_std, bins.

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

• poc_battery_electrode_breathing — py -3.11 examples/poc_battery_electrode_breathing.py

Typkompatible Folge-Operatoren (nehmen table als Eingabe)

—

Gleiche Kategorie (assess)

piv_sample_at_windows · piv_error_stats · piv_time_statistics


*Provenance: pivops.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.