riesz_motion_magnify — QUAT motion op

• Data kinds: video → table

• Call: import fullseye as fs; fs.ledger.riesz_motion_magnify(video, alpha, f_lo, f_hi, fps, scales: 'int' = 4) -> 'dict' (implementation को सीधे call करना हो तो import quatimage; quatimage.riesz_motion_magnify(video, alpha, f_lo, f_hi, fps, scales: 'int' = 4) -> 'dict', registry से लेना हो तो opsquat.get("riesz_motion_magnify"))

उपयोग

Riesz वाले रास्ते से clip की in-band motion को *alpha* से scale करता है। → dict।

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

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 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 MAX_PYRAMID_ELEMENTS; |alpha| is over MAX_ALPHA; the pass-band is empty, reaches DC, or exceeds Nyquist; *scales* is outside [1, MAX_SCALES].

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

• quaternion_monogenic 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 करते हैं)

• quaternion_monogenic — py -3.11 examples/quaternion_monogenic.py

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

—

इसी category के (motion)

riesz_displacement · riesz_displacement_series


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

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