harris3d_keypoints — 3D feature_register op

• Data kinds: voxel → keypoints

• Call: import fullseye as fs; fs.ledger.harris3d_keypoints(vol, device='cpu', k=0.005, nms=3, topn=64, sigma_i=1.5, response='mineig', rel_thresh=0.01, border=2) (to call the implementation directly, import feat_harris; feat_harris.harris3d_keypoints(vol, device='cpu', k=0.005, nms=3, topn=64, sigma_i=1.5, response='mineig', rel_thresh=0.01, border=2); from the registry, ops3d.get("harris3d_keypoints"))

• Return value through the ledger: fullseye.ledger.harris3d_keypoints(...) returns only the declared out type keypoints (the underlying function also returns auxiliary values). When you need what was dropped, use fullseye.ledger.harris3d_keypoints.raw(...) or call feat_harris.harris3d_keypoints directly.

• Underlying return: (keypoints, scores)

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

Usage

3-D Harris keypoint detection (the 3-D version of the 2-D Harris corner detector).

From the 3D gradient g=(gz,gy,gx) of a voxel density field, it builds at each voxel the local structure tensor M=Σ_w w·g gᵀ (3x3 symmetric, weighted sum with a gaussian window sigma_i) and measures cornerness. Voxels whose response is a local maximum and above the threshold become keypoints (since they can be detected without an initial pose estimate, they can be used for correspondence under large rotation + partial overlap or to supply a coarse init for ICP).

Cornerness measures:

• "mineig" (default): the minimum eigenvalue of the 3x3 symmetric matrix (Shi-Tomasi style). The more there is structure in all 3 directions (= a corner), the larger the minimum eigenvalue. Computed in closed form (trigonometric method). Robust with no k tuning (measured mean repeatability 85%, min 72.5%).

• "harris": R = det(M) - k·tr(M)³. In 3D there are 3 eigenvalues, so it is made dimensionless with the 3rd power of tr. ★Note: at corners of a density voxel field the det/tr³ ratio is empirically only ~0.01, so with the 2D standard k=0.04-0.06 every response becomes negative and 0 points are detected. In 3D k≈0.005 is needed (measured mean 89.6% at k=0.005).

Arguments:

vol: (D,H,W) density voxels (numpy / torch). Assumed to be the output of points_to_voxel.

device: torch device ("cpu" etc.). All operations run on this device.

k: Harris sensitivity coefficient (only effective when response="harris"). For 3D density fields

around 0.005 (the 2D convention 0.04-0.06 is too strong in 3D and detects 0 points).

nms: side length of the cubic window for non-maximum suppression (odd, standard 3 = 3x3x3 neighbourhood).

topn: maximum number of keypoints returned, in descending order of response.

sigma_i: standard deviation (voxel) of the integration window (gaussian) of the structure tensor.

response: "mineig" (default, robust) or "harris".

rel_thresh: response threshold = rel_thresh × maximum response in the valid region (noise suppression).

border: nothing is detected within border voxels of the edge (removes gradient edge effects).

Returns:

keypoints: (M,3) float64. voxel coordinates (z,y,x) of the keypoints (same axis order as

sobel3d). In descending order of response, at most topn.

responses: (M,) float64. The corresponding response values (descending).

Dependencies: sobel3d (3D gradient), _gauss3d (integration-window smoothing). Both run on the device.

Background guides (the physics and conventions behind this op)

• blas_threads_and_memory — Why matrix decompositions are slow — BLAS threads, caches, memory layout

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)

• feature_register — py -3.11 examples_3d/feature_register.py

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

fuse_to_voxel · dlt_pose · pnp_ransac · reprojection_error

Same category (feature_register)

iss_keypoints · compute_fpfh · shot_descriptor · register_spin · register_fpfh · register_shot


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