riesz_transform — QUAT riesz op

• Data kinds: image2d → qimage

• Call: import fullseye as fs; fs.ledger.riesz_transform(image) -> 'np.ndarray' (to call the implementation directly, import quatimage; quatimage.riesz_transform(image) -> 'np.ndarray'; from the registry, opsquat.get("riesz_transform"))

Usage

The 2-D Riesz transform of an image, as a pure quaternion field. → (H, W, 4).

The isotropic generalisation of the Hilbert transform: a *pair* of filters with frequency responses -i*u/|w| and -i*v/|w|, returned as the quaternion (0, R1 f, R2 f, 0). It is the 2-D object that has no complex analogue — the 1-D analytic signal needs a direction to say which way "90 degrees later" is, and in 2-D there is no single direction, so the answer needs two components and therefore an algebra with room for them.

Closed form, which is how this is tested rather than eyeballed

For a grating cos(2*pi*(u0*x + v0*y)) sampled on the DFT grid,

R1 = (u0/|w0|) * sin(2*pi*(u0*x + v0*y)),

R2 = (v0/|w0|) * sin(...)

exactly. Measured over a table of eight grid-exact orientations from 0 to 159.4 degrees on a 64x64 frame, the largest absolute deviation from that closed form is 6.1e-15, and the orientation recovered through monogenic_orientation matches the grating's to 3.6e-15 rad at every one of them. There is no tolerance to choose.

Note the scalar component is 0, so this is the Riesz *transform* and not the monogenic signal — feeding it to monogenic_phase gives pi/2 everywhere, correctly but uselessly. Use monogenic_signal, which keeps the band-pass image in the scalar slot.

Raises ValueError: *image* is not a finite real (H, W) array with H, W >= 2, or exceeds MAX_PIXELS.

Detailed usage guide

• quaternion_monogenic family guide

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• quaternion_monogenic — py -3.11 examples/quaternion_monogenic.py

Ops the type connects to (they accept qimage as input)

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

Same category (riesz)

monogenic_signal · monogenic_amplitude · monogenic_phase · monogenic_orientation


*Provenance: quatimage.py — QUAT operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

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