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 族使用指南

参考(示例数据・文献)

• 示例数据目录(下载 URL / 许可证) —— 2-D 用 skimage.data(BSD/公有领域)加合成图,3-D 给出真实数据源(Stanford/PDS 等)的下载 URL。

• 算子来历与参考文献 —— 该算子族所依据的研究/方法出处。

• 算法的正典(作者・年份)与用途见上面的族使用指南

可运行的示例(实际调用该算子并已验证的样例)

quaternion_monogenicpy -3.11 examples/quaternion_monogenic.py

类型可衔接的下一个算子(可接受 table 作为输入)

同类别(motion)

riesz_displacement · riesz_displacement_series


*Provenance: quatimage.py — QUAT 算子登记表。本条目由 tools/opdocs.py md 自动生成(请勿手工编辑)。*

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