monogenic_signal — QUAT riesz op

• Data kinds: image2d → qimage

• Call: import fullseye as fs; fs.ledger.monogenic_signal(image, wavelength_px=8.0, bandwidth_octaves=1.0) -> 'np.ndarray' (implementation को सीधे call करना हो तो import quatimage; quatimage.monogenic_signal(image, wavelength_px=8.0, bandwidth_octaves=1.0) -> 'np.ndarray', registry से लेना हो तो opsquat.get("monogenic_signal"))

उपयोग

एक scale पर image का monogenic signal। → (H, W, 4)।

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

Felsberg & Sommer (2001). The image is band-passed by a log-radial raised cosine centred at 1/wavelength_px cycles/pixel with half-width *bandwidth_octaves*, and the result is packed with its Riesz pair as the quaternion (band-pass image, R1, R2, 0). From that single object monogenic_amplitude, monogenic_phase and monogenic_orientation read the local contrast, the local phase and the local orientation — the 2-D analogue of what |z| and arg z give a 1-D analytic signal, with orientation as the extra degree of freedom that only exists in 2-D.

The band-pass is applied *before* the Riesz kernels because the Riesz multiplier has a jump at DC: without a band that excludes DC the "local phase" of the image mean is undefined, not merely noisy.

Closed form

A grating exactly at the band centre passes with gain 1, so for contrast * cos(2*pi*(u0*x+v0*y) + p) the amplitude is contrast everywhere, the phase is the grating's own phase, and the orientation is atan2(v0, u0) mod pi. Measured on a 64x64 frame with an 8 px grating of unit contrast and phase 0.7: amplitude mean exactly 1.0 with a spread of 8.9e-16 across the frame, phase error 5.3e-15 rad, orientation error 0.0 rad.

Honest limit. The phase is well defined only where the amplitude is; in a flat region the amplitude is at the rounding floor and the phase is the angle of numerical dust. Nothing here suppresses that — the amplitude map *is* the confidence map and it is returned in the same object, so a caller can mask on it. The operators that consume the signal (riesz_displacement, riesz_motion_magnify) do mask, with the same relative thresholds motionmag uses, so their numbers are comparable.

Raises ValueError: *image* is not a finite real (H, W) array; *wavelength_px* is not > 2 (a shorter wavelength is past Nyquist and the band would be empty); *bandwidth_octaves* is not > 0; the band contains no frequency bin of this frame size.

उपयोग की विस्तृत 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 जुड़ता है (qimage को input के रूप में लेते हैं)

quaternion_to_rgb · quat_norm · quat_conjugate_image · quat_normalize_image · quat_image_multiply · monogenic_amplitude · monogenic_phase · monogenic_orientation

इसी category के (riesz)

riesz_transform · monogenic_amplitude · monogenic_phase · monogenic_orientation


*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.