points_to_voxel — 3D transform op

• Data kinds: points → voxel

• Call: import fullseye as fs; fs.ledger.points_to_voxel(points, size, bounds=None, device='cpu', smooth=0.0) (to call the implementation directly, import match3d; match3d.points_to_voxel(points, size, bounds=None, device='cpu', smooth=0.0); from the registry, ops3d.get("points_to_voxel"))

• GPU: this op has a GPU path (device="cuda")

Usage

Point set (N,3) → a density voxel volume (size³). Splatted with scatter_add, optionally Gaussian-smoothed.

If bounds=(lo,hi) is given, several clouds can be placed on the same grid (= prerequisite for matching).

Procedure: each point is mapped onto the integer grid by idx = floor((p − lo)/(hi − lo)·(size − 1)), and that voxel gets 1 added (value = number of points that fell into that voxel). If smooth > 0, a gaussian with σ=smooth (in voxel units) is applied as a 3-axis separable conv (radius max(1, int(4σ + 0.5)), edges replicate). The output axis order is exactly the column order of the points (points[:, 0] → axis 0); there is no reordering into (depth,row,col).

• bounds: 2 vectors (lo, hi) of dimension 3. None means the cloud's own min/max (the grid changes per

cloud, so always pass the same bounds when comparing 2 clouds). If the length is not 3, a value is non-finite, or an axis has hi <= lo, ValueError is raised (the tsdf-style ((xmin,xmax),...) convention is rejected as length 2).

• Out-of-range points are not discarded but clipped to the edge voxel (false density piles up at the edges). If you want them cut off,

remove them from the point cloud beforehand.

• size: number of voxels per side. An axis whose hi − lo is 0 is merely replaced by 1e-9, without a warning.

• An empty point cloud with bounds=None makes numpy's min raise an exception.

• Returns: (size, size, size) float64 numpy (moved back to the CPU even when computed on a device). The values are counts

(after smoothing, a weighted distribution of counts) and are not normalised.

Downstream: input for match_points_ncc / signed_distance_field / voxel_to_mesh.

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)

• sh_descriptor_retrieval — py -3.11 examples_3d/sh_descriptor_retrieval.py

• shape_desc_pose — py -3.11 examples_3d/shape_desc_pose.py

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

voxel_to_mips · voxel_to_mesh · signed_distance_field · to_points · sobel3d · hessian3d · curvature_maps · edt_jfa

Same category (transform)

gaussians_to_voxel · mesh_to_voxel · mesh_to_points · depth_to_points · voxel_to_mips · voxel_to_mesh · tsdf_from_depth · signed_distance_field


*Provenance: match3d.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.