riesz_motion_magnify — QUAT motion op

데이터 종류: videotable

호출: import quatimage; quatimage.riesz_motion_magnify(video, alpha, f_lo, f_hi, fps, scales: 'int' = 4) -> 'dict'(또는 opsquat.get("riesz_motion_magnify"))

사용법

Riesz 경로로 클립의 대역 내 움직임을 *alpha* 배. → dict.

> 아래 상세 설명은 원문입니다 —— 요약과 제목은 번역되어 있습니다.

The Riesz-pyramid magnifier of Wadhwa et al. (2014), and the direct

counterpart of `motionmag.motion_magnify: same contract, same alpha`

convention (a displacement gain — 1 is the identity, 2 doubles the

motion, -1 reverses it), same honesty block, different decomposition.

Each radial sub-band is turned into a monogenic signal, projected onto the

band's temporal-mean orientation to give a complex analytic signal `z`, and

the temporal phase deviation `angle(z * conj(z_mean))` is band-passed and

multiplied by `alpha - 1`. The band is then re-rendered as

`I*cos(shift) - R_proj*sin(shift) — the real part of z * exp(i*shift)`

— and the bands are summed. Because the radial filters are an *amplitude*

partition of unity, that sum is the reconstruction: at `alpha = 1` the

output equals the input to 5.55e-16 (measured on a 64x64x64 clip;

`motionmag.motion_magnify` gives 7.77e-16 on the same clip).

The gain really is the gain. Measuring the magnified clip's displacement with

the *independent* steerable estimator `motionmag.displacement_series`, on a

single-grating clip of true amplitude 0.1 px:

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

alpha Riesz measured gain steerable measured gain

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

0.0 0.000000000000 0.000000000000

2.0 2.000000000000 2.000000000000

4.0 4.000000000000 4.000000000000

-1.0 -1.000000000000 -1.000000000000

20.0 20.000000000000 20.000000000000

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

— twelve decimal places, for both, including the reversal.

Returns the same shape of dict `motionmag.motion_magnify` returns —

``{"video", "alpha", "band_hz", "fps", "scales", "snr_in", "snr_out",

"image_snr_change_db", "motion_snr_out_db", "motion_snr_change_db",

"band_power_ratio", "phase_shift_max_rad", "phase_shift_rms_rad",

"linear_regime", "reference_coherence"}`` — and it is the same dict because

the SNR block is computed by calling `motionmag.band_snr` rather than

re-deriving it. Two magnifiers that disagree about how to measure their own

cost cannot be compared, so they share the measurement.

Magnification never improves the motion SNR, here as there: scaling the

in-band phase scales the in-band noise by the same factor. What degrades is

the image SNR. Measured on the shared 64x64x64 / 32 fps / 0.2 px / 4 Hz

synthetic under sigma = 0.01 noise, band 3-5 Hz, against

`motionmag.motion_magnify` on the identical clip:

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

alpha image change (dB) image change (dB) band ratio band ratio

Riesz steerable Riesz steerable

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

2 -4.8611 -4.8260 0.937704 0.935433

4 -10.3616 -10.3504 0.861162 0.858130

8 -15.3515 -15.5097 0.629948 0.628597

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

The two magnifiers cost essentially the same — within 0.16 dB and 0.3 % of

band-power linearity at every gain. So the choice between them is not

about magnification quality; it is about the displacement measurement (where

the Riesz route has a 13 % failure mode on multi-orientation texture, see

:func:riesz_displacement) and about cost (this one is 2.09x faster on the

same clip: 0.1034 s against 0.2163 s, best of 7).

Raises `ValueError: *video* is not a valid (T, H, W)` clip or is

over :data:MAX_PYRAMID_ELEMENTS; `|alpha| is over :data:MAX_ALPHA`;

the pass-band is empty, reaches DC, or exceeds Nyquist; *scales* is outside

`[1, MAX_SCALES]`.

자세한 사용 가이드

quaternion_monogenic 패밀리 가이드

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

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

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

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

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

quaternion_monogenicpy -3.11 examples/quaternion_monogenic.py

타입이 이어지는 다음 연산자(table 를 입력으로 받는 것)

같은 카테고리(motion)

riesz_displacement · riesz_displacement_series


*Provenance: quatimage.py — QUAT 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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