band_snr — MOTIONMAG temporal op

• Data kinds: video → table

• Call: import fullseye as fs; fs.ledger.band_snr(video, f_lo, f_hi, fps) -> 'dict' (implementation को सीधे call करना हो तो import motionmag; motionmag.band_snr(video, f_lo, f_hi, fps) -> 'dict', registry से लेना हो तो opsmotionmag.get("band_snr"))

उपयोग

मापता है कि clip के temporal band में क्या है, और उसकी क्या कीमत है -> dict।

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

Every quantity is a measured mean-square power obtained from the per-pixel temporal DFT (Parseval-normalised so that the bins of one pixel sum to that pixel's mean square), averaged over pixels:

• static_power — the DC bin. The scene that is simply *there*.

• band_power — the bins inside [f_lo, f_hi]. Coherent motion plus whatever noise happens to fall in the band.

• out_of_band_power / out_of_band_bins — everything else except DC. With broadband sensor noise this is the noise floor, and noise_power_per_bin is its per-bin density.

• noise_in_band = noise_power_per_bin * band_bins — how much of band_power is expected to be noise.

• motion_power = max(band_power - noise_in_band, 0) and motion_snr_db = 10*log10(motion_power / noise_in_band).

• image_snr_db = 10*log10(static_power / (band_power + out_of_band_power)) — the static scene against everything that flickers.

The two SNRs answer different questions and magnification moves only one of them. Scaling the in-band phase by alpha scales the in-band motion *and* the in-band noise by the same factor, so the true motion SNR cannot

improve: magnification never makes a measurement more certain than the recording was. What does change is image_snr_db, because the temporal fluctuation of the output frames grows like alpha^2 while the static scene does not.

A caveat that matters when this is run on an already-magnified clip. motion_snr_db here divides the in-band signal by a noise floor estimated from the *out-of-band* bins, and magnification does not touch those. Applied to a magnified video it therefore credits alpha^2 more in-band power against an unchanged noise estimate and reports an improvement that did not occur — measured, +6.86 dB at alpha = 2 on a clip whose true motion SNR cannot have moved. motion_magnify knows the gain and returns the corrected figure as motion_snr_out_db; use that one, not result["snr_out"]["motion_snr_db"].

snr_clamped is True when a reported dB hit the [-100, +100] window (a noiseless synthetic has zero out-of-band power, which is a division by zero rather than an infinite SNR).

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

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

• motion_magnification — py -3.11 examples/motion_magnification.py

• poc_motion_magnification — py -3.11 examples/poc_motion_magnification.py

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

complex_steerable_reconstruct

इसी category के (temporal)

temporal_bandpass · temporal_band_power


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

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