estimate op• Datenarten: image2d × image2d → flow2d
• Aufruf: import fullseye as fs; fs.ledger.piv_cross_correlate(a, b, window=32, overlap=0.5, peak='gauss3', window_func='hann', subtract_mean=True, shift=None, normalize='overlap', search_limit=0.25) (die Implementierung direkt: import pivops; pivops.piv_cross_correlate(a, b, window=32, overlap=0.5, peak='gauss3', window_func='hann', subtract_mean=True, shift=None, normalize='overlap', search_limit=0.25); aus dem Register: opspiv.get("piv_cross_correlate"))
• Rückgabewert über das Register: fullseye.ledger.piv_cross_correlate(...) liefert nur den Wert des deklarierten Out-Typs flow2d (die zugrunde liegende Funktion gibt zusätzlich Hilfsinformationen zurück). Wird das Verworfene gebraucht, nutze fullseye.ledger.piv_cross_correlate.raw(...) oder rufe pivops.piv_cross_correlate direkt auf.
• Rückgabe der Funktion: (flow, info) -> flow2d
Bestimmt das Verschiebungsfeld durch fensterweise Kreuzkorrelation. Rückgabe: (flow, info).
In jedem Fenster wird 2-mal FFT gebildet und das konjugierte Produkt zurücktransformiert (zirkuläre Korrelation); die Position des Maximums liefert die ganzzahlige Verschiebung, die 3 Punkte darum herum die Subpixel-Verschiebung.
Verzerrung zur Null hin und ihre Korrektur (gemessen): die reine Kreuzkorrelation zieht die Verschiebung zur Null. Verschiebt man das Fenster, schrumpft der überlappende Bereich, sodass der Korrelationswert selbst mit der Verschiebung sinkt; auch gemessen war die Verzerrung proportional zur Verschiebung (win=32, Hann, dx von 0.5 bis 6 px variiert, Verzerrung / (d/N) = 1.30, 1.29, 1.28, 1.28, 1.28 —— konstante Steigung).
normalize="overlap" korrigiert dies durch Division durch die Autokorrelation der Fensterfunktion (gleichbedeutend mit Normierung auf die Überlappungsfläche). Am Rand geht der Divisor jedoch gegen 0, daher wird es stets gepaart mit search_limit, das den Suchbereich auf 1/4 des Fensters begrenzt. Gemessen:
=============== ========== ========== ==========
dx [px] ohne Korr Korr.+1/4 nur Korr.
=============== ========== ========== ==========
Bias bei 1.0 -0.0402 -0.0020 -0.2659
Bias bei 5.0 -0.2001 -0.0128 -0.9210
RMS bei 5.0 0.2081 0.0301 4.8881
=============== ========== ========== ==========
Die rechte Spalte ist der Fall "nur normieren, ohne die Suche zu begrenzen": die Korrektur verschlechtert den Fehler um das 23-fache. Das Messergebnis, dass man nicht nur eines von beiden einschalten darf, ist direkt der Default.
Args:
a, b: Bildpaar (H, W).
window: Seitenlänge des Fensters [px]. Gerade, 8 oder mehr.
overlap: Überlappungsgrad der Fenster [0, 1). 0.5 ist üblich.
peak: PEAK_MODES.
window_func: WINDOW_FUNCS.
subtract_mean: pro Fenster den Mittelwert abziehen (verhindert, dass der Gleichanteil des Hintergrunds in der Mitte einen riesigen
Gipfel bildet). Ausgeschaltet klebt es an der Nullverschiebung.
shift: vorhergesagte Verschiebung (2, h, w) (für mehrstufig). Das Fenster des 2. Bildes wird um diesen ganzzahligen Betrag
versetzt ausgeschnitten und das Residuum gemessen.
normalize: "overlap" (Default) oder "none".
search_limit: Obergrenze der gesuchten Verschiebung als Anteil des Fensters (Default 0.25 = die
"1/4-Regel" von PIV). None heißt unbegrenzt —— zusammen mit normalize="overlap"
wird es schlechter, wie in der Tabelle oben.
Returns:
(flow (2, h, w), info). info ist ein dict mit rows / cols (Bildkoordinaten der
Fenstermitten), peak_ratio (1. Gipfel / 2. Gipfel; je näher an 1, desto weniger
verlässlich), window / overlap / peak.
• 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
• piv_flow_from_particles — py -3.11 examples/piv_flow_from_particles.py
• poc_beam_modal_video — py -3.11 examples/poc_beam_modal_video.py
• poc_change_detection_misreg — py -3.11 examples/poc_change_detection_misreg.py
• poc_dic_strain — py -3.11 examples/poc_dic_strain.py
• poc_print_registration — py -3.11 examples/poc_print_registration.py
• poc_river_surface_velocity — py -3.11 examples/poc_river_surface_velocity.py
• poc_strain_history — py -3.11 examples/poc_strain_history.py
• poc_superresolution_limits — py -3.11 examples/poc_superresolution_limits.py
• poc_tacsim_marker_shear — py -3.11 examples/poc_tacsim_marker_shear.py
flow2d als Eingabe)piv_deform_pass · piv_outlier_mask · piv_replace_outliers · piv_vorticity · piv_divergence · piv_flow_magnitude · piv_to_velocity · piv_velocity_gradient
estimate)piv_multipass · piv_deform_pass · piv_ensemble_correlate
*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.