piv_cross_correlate — PIV estimate op

• 데이터 종류: image2d × image2d → flow2d

• 호출: 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)(구현을 직접 호출하려면 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), 원장에서 가져오려면 opspiv.get("piv_cross_correlate"))

• 원장 경유의 반환값: fullseye.ledger.piv_cross_correlate(...) 는 선언된 out 형 flow2d 의 값만 반환합니다(실제 함수는 보조 정보도 반환). 버려진 쪽이 필요하면 fullseye.ledger.piv_cross_correlate.raw(...) 를 쓰거나 pivops.piv_cross_correlate 를 직접 호출하세요.

• 실제 반환: (flow, info) -> flow2d

사용법

창별 상호상관으로 변위장을 구한다. 반환값은 (flow, info).

각 창에서 FFT를 2회 취하고 공액곱의 역변환을 취해(순환 상관), 최대값의위치를 정수 변위, 그 주위의 3점으로 서브픽셀 변위를 정한다.

영 방향으로의 치우침과 그 보정(실측): 맨 상호상관은 변위를 영으로 끌어당긴다. 창을 어긋나게 하면 겹치는 영역이 줄어 상관의 값 자체가 변위와 함께 떨어지기 때문이며, 실측에서도 치우침은 변위에 비례했다(win=32·Hann, dx를 0.5에서 6 px까지흔들어 치우침 / (d/N)이 1.30, 1.29, 1.28, 1.28, 1.28 —— 기울기 일정).

normalize="overlap"은 이것을 창 함수의 자기상관으로 나눔으로써 보정한다(겹침 면적으로 정규화하는 것과 같다). 다만 가장자리에서는 나누는 양이 0에 가까워지므로, search_limit로 탐색 범위를 창의 1/4로 좁히는 것과 반드시 짝을 짓는다. 실측:

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

dx [px] 보정 없음 보정+1/4 보정만

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

1.0의 편향 -0.0402 -0.0020 -0.2659

5.0의 편향 -0.2001 -0.0128 -0.9210

5.0의 RMS 0.2081 0.0301 4.8881

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

오른쪽 끝이 "탐색을 좁히지 않고 정규화만 한" 경우로, 보정이 오차를 23배로 악화시킨다. 한쪽만 넣어서는 안 된다는 측정 결과를 그대로 기본값으로 해 두었다.

Args:

a, b: 이미지 쌍 (H, W).

window: 창의 한 변 [px]. 짝수·8 이상.

overlap: 창의 겹침률 [0, 1). 0.5가 관행.

peak: PEAK_MODES.

window_func: WINDOW_FUNCS.

subtract_mean: 창마다 평균을 뺀다(배경의 직류 성분이 중앙에 거대한

피크를 만드는 것을 막는다). 끄면 영 변위에 들러붙는다.

shift: 예측 변위 (2, h, w)(다단용). 2번째 장의 창을 이 정수량만큼

어긋나게 잘라 내어 잔차를 잰다.

normalize: "overlap"(기본값) 또는 "none".

search_limit: 탐색할 변위의 상한을 창에 대한 비로 준다(기본값 0.25 = PIV의

"1/4 법칙"). None이면 무제한 —— normalize="overlap"과의

병용은 위 표와 같이 악화된다.

Returns:

(flow (2, h, w), info). info는 rows / cols(창 중심의

이미지 좌표), peak_ratio(제1 피크 / 제2 피크. 1에 가까울수록

믿을 수 없다), window / overlap / peak를 가진 dict.

자세한 사용 가이드

• piv_displacement 패밀리 가이드

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

• 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 를 입력으로 받는 것)

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 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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