depth_to_organized_points — 3D range_image op

• Data kinds: depth → pointmap

• Call: import fullseye as fs; fs.ledger.depth_to_organized_points(depth, fx=None, fy=None, cx=None, cy=None) (to call the implementation directly, import range_image; range_image.depth_to_organized_points(depth, fx=None, fy=None, cx=None, cy=None); from the registry, ops3d.get("depth_to_organized_points"))

Usage

An organized depth image → grid-aligned 3-D points (H,W,3).

With fx,fy given, perspective back-projection P=((u-cx)/fx*d, (v-cy)/fy*d, d). Otherwise orthographic (P=(x,y,depth), grid spacing 1).

u is the column number (0..W-1), v the row number (0..H-1). fx and fy are focal lengths in pixels, cx and cy the principal point, defaulting to the image centre ((W-1)/2, (H-1)/2). If either fx or fy is None, orthographic mode is used and cx and cy are ignored. In orthographic mode x, y are the pixel coordinates themselves, so note that the depth unit (mm etc.) and the x, y unit (pixels) are mixed. In perspective mode all 3 components have the same unit as the depth. Depth 0 or NaN propagates as is (pixels with 0 collapse to the origin x=y=0), so excluding invalid pixels is the caller's job. Returns float64 (H,W,3); the 3rd axis is (x, y, z) with x to the right, y down, z into the scene (image coordinate system). There is no input validation; anything other than 2-D fails in the unpacking of d.shape. normals_from_depth uses this function's output internally.

Background guides (the physics and conventions behind this op)

• blender_interop — Using Blender alongside — build the shape, measure it with fullseye (pitfalls: axes, units, ground truth)

• depth_sensors — Depth sensors — ranging principles, real-device figures, how dropouts appear

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.

Runnable examples (verified samples that actually call this op)

• range_image — py -3.11 examples_3d/range_image.py

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

fuse_to_voxel · bump_normals_fbm

Same category (range_image)

normals_from_depth · occlusion_edges · bearing_angle_image


*Provenance: range_image.py — 3D 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.