motion opvideo → tableimport fullseye as fs; fs.ledger.riesz_motion_magnify(video, alpha, f_lo, f_hi, fps, scales: 'int' = 4) -> 'dict' (実装を直接呼ぶなら import quatimage; quatimage.riesz_motion_magnify(video, alpha, f_lo, f_hi, fps, scales: 'int' = 4) -> 'dict'、台帳から引くなら opsquat.get("riesz_motion_magnify"))Scale a clip’s in-band motion by alpha, by the Riesz route. → 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].
py -3.11 examples/quaternion_monogenic.pytable を入力に取れる)—
motion)riesz_displacement · riesz_displacement_series
Provenance: quatimage.py — QUAT operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.