piv_cross_correlate — PIV estimate op

• Data kinds: image2d × image2d → flow2d

• Call: 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) (implementation को सीधे call करना हो तो 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), registry से लेना हो तो opspiv.get("piv_cross_correlate"))

• Ledger के ज़रिए return value: fullseye.ledger.piv_cross_correlate(...) केवल घोषित out type flow2d का value लौटाता है (मूल function सहायक जानकारी भी लौटाता है)। जो हिस्सा छोड़ दिया गया है उसकी ज़रूरत हो तो fullseye.ledger.piv_cross_correlate.raw(...) का उपयोग करें, या pivops.piv_cross_correlate को सीधे call करें।

• मूल function का return: (flow, info) -> flow2d

उपयोग

हर window के cross-correlation से displacement field निकालता है। (flow, info) लौटाता है।

हर window के लिए FFT 2 बार लिया जाता है और conjugate product का inverse transform लिया जाता है (circular correlation); maximum की position integer displacement देती है, और उसके आसपास के 3 points subpixel displacement देते हैं।

शून्य की ओर bias और उसका correction (measured): सादा cross-correlation displacement को शून्य की ओर खींचता है। Window खिसकाने से overlap वाला region घटता है, इसलिए correlation value खुद displacement के साथ गिरती है; measurement में भी bias displacement के अनुपात में था (win=32, Hann, dx 0.5 से 6 px तक बदला, bias / (d/N) = 1.30, 1.29, 1.28, 1.28, 1.28 —— स्थिर slope)।

normalize="overlap" इसे window function के autocorrelation से भाग देकर ठीक करता है (overlap area से normalise करने के समान)। किनारों पर, हालाँकि, भाजक 0 के पास पहुँचता है, इसलिए यह search_limit के साथ हमेशा जोड़ा जाता है, जो search range को window के 1/4 तक सीमित करता है। Measured:

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

dx [px] no corr. corr.+1/4 corr. only

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

bias at 1.0 -0.0402 -0.0020 -0.2659

bias at 5.0 -0.2001 -0.0128 -0.9210

RMS at 5.0 0.2081 0.0301 4.8881

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

सबसे दायाँ column "search सीमित किए बिना केवल normalisation" है: correction error को 23 गुना बदतर कर देता है। यह measured परिणाम कि एक को दूसरे के बिना चालू नहीं करना चाहिए, सीधे default के रूप में इस्तेमाल होता है।

Args:

a, b: image pair (H, W)।

window: window की भुजा [px]। सम, 8 या ज़्यादा।

overlap: window overlap ratio [0, 1)। 0.5 प्रचलित है।

peak: PEAK_MODES।

window_func: WINDOW_FUNCS।

subtract_mean: हर window पर mean घटाना (background के DC component को centre पर विशाल

peak बनाने से रोकता है)। इसे बंद करने पर परिणाम शून्य displacement पर चिपक जाता है।

shift: अनुमानित displacement (2, h, w) (multi-pass के लिए)। 2nd image की window इस

integer मात्रा से खिसकाकर काटी जाती है, और residual मापा जाता है।

normalize: "overlap" (default) या "none"।

search_limit: खोजे जाने वाले displacement की ऊपरी सीमा, window के हिस्से के रूप में (default 0.25 = PIV का

"1/4 rule")। None का अर्थ असीमित —— normalize="overlap" के साथ मिलाने पर

यह बदतर हो जाता है, जैसा ऊपर की table में है।

Returns:

(flow (2, h, w), info)। info एक dict है जिसमें rows / cols (window centres के

image coordinates), peak_ratio (1st peak / 2nd peak; 1 के जितना पास, उतना कम

भरोसेमंद), window / overlap / peak हैं।

उपयोग की विस्तृत guide

• piv_displacement family guide

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• 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

वे अगले ops जिनसे type जुड़ता है (flow2d को input के रूप में लेते हैं)

piv_deform_pass · piv_outlier_mask · piv_replace_outliers · piv_vorticity · piv_divergence · piv_flow_magnitude · piv_to_velocity · piv_velocity_gradient

इसी category के (estimate)

piv_multipass · piv_deform_pass · piv_ensemble_correlate


*Provenance: pivops.py — PIV operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

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