typed op• Data kinds: points → signal
• Call: fullseye.apply(img, "tb_iss_keypoints", a=0.5, b=0.5) (the 2-D model is one image plus two scalar knobs a,b∈[0,1])

*The figure is the actual output on a synthetic 128×128 input. Left: input, right: output. Point clouds are drawn as a top-down scatter (brightness = z), 1-D series as a line plot, volumes as the maximum-intensity projection along z, videos as the middle frame, complex images as magnitude; return values that are not pictures are shown as the values themselves.*
Sweeping knob a (0.1 / 0.5 / 0.9, the other knob at its default):
▸ tb_iss_keypoints: knob a sweep (docs site)
Sweeping knob b (0.1 / 0.5 / 0.9, the other knob at its default):
▸ tb_iss_keypoints: knob b sweep (docs site)
Stages (the ops that come before → this op, left to right):
▸ tb_iss_keypoints: stages (docs site)
On other images (synthetic scene / photo / coins. Top row: inputs, bottom row: their outputs. Knobs at default):
▸ tb_iss_keypoints: other inputs (docs site)
ISS (Intrinsic Shape Signatures, equivalent to a 3D Harris) keypoint detector. Uses the smallest eigenvalue λ3 of the local covariance as the saliency, restricts candidates to points whose eigenvalues are distinct (i.e. well-defined orientation), and sparsely selects them via NMS. Rotation-invariant. Returns an array of point indices.
Arguments:
• points (N,3). radius: radius of the neighbourhood sphere for saliency (same units as the point cloud).
• nms_radius: non-maximum suppression distance. If None, 0.6*radius.
• gamma21 / gamma32: upper limits of the eigenvalue ratios λ2/λ1, λ3/λ2 (default 0.99). Only points where both are
below these are candidates (excluding points whose ratio is close to 1 = isotropic, with undetermined orientation).
• max_kp: maximum number returned. min_neighbors: points with fewer neighbours than this are not candidates (default 8).
Procedure: at each point gather the neighbours within radius, form the 2nd-order moment matrix with the point of interest as origin, (qᵀq)/n, and obtain its eigenvalues λ1≥λ2≥λ3 (excluded if λ1 is 1e-12 or less). Using λ3 as saliency, scan in descending order; greedy NMS discards those closer than nms_radius to an already accepted point. Returns an int64 array of point indices (in descending saliency). Length 0 if there are no candidates.
Note: neighbours are centred on the point of interest (not on the centroid). A point on a plane has the point of interest on the same plane, so λ3 is 0 in theory, and rounding dust (λ3/λ1 ≤ 1e-9) is excluded from the candidates. It is a Python loop doing a neighbourhood search for every point, so clouds above tens of thousands of points should be thinned with voxel_grid_downsample before use. It feeds directly into the keypoint input of shot_descriptor, and register_shot calls it with saliency radius 0.6*radius and NMS radius 0.3*radius (radius being the support radius of register_shot).
The 3d op iss_keypoints bridged into the 2-D evolution registry. The implementation is the same; only the calling convention is adapted to op(v, a, b). a sweeps gamma21 (default 0.99), b sweeps gamma32 (default 0.99).
• 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 program below has been verified to run (same input as the figure). In Studio's help this block becomes buttons that load and run it on the spot.
img_to_points 0.50 0.50 tb_iss_keypoints 0.50 0.50
▸ Load this pipeline · Load & run
The examples below call the underlying ledger op iss_keypoints. This bridge op is the same implementation adapted to the fn(v, a, b) convention, so the behaviour carries over unchanged (only the call form differs).
• feature_register — py -3.11 examples_3d/feature_register.py
signal as input)identity · tb_create_funct_1d_array · tb_smooth_funct_1d_gauss · tb_smooth_funct_1d_mean · tb_derivate_funct_1d · tb_integrate_funct_1d · tb_zero_crossings_funct_1d · tb_abs_funct_1d
typed)tb_points_to_voxel · tb_estimate_point_normals · tb_project_points · tb_render_point_depth · tb_statistical_outlier_removal · tb_radius_outlier_removal · tb_voxel_grid_downsample · tb_mls_smooth
*Provenance: ops.py — 2D 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.