iss_keypoints — 3D feature_register op

• Datenarten: points → indices

• Aufruf: import fullseye as fs; fs.ledger.iss_keypoints(points, radius, nms_radius=None, gamma21=0.99, gamma32=0.99, max_kp=400, min_neighbors=8) (die Implementierung direkt: import feat_shot; feat_shot.iss_keypoints(points, radius, nms_radius=None, gamma21=0.99, gamma32=0.99, max_kp=400, min_neighbors=8); aus dem Register: ops3d.get("iss_keypoints"))

Verwendung

ISS-Keypoint-Detektion (Intrinsic Shape Signatures, das 3-D-Harris-Pendant).

Nutzt den kleinsten Eigenwert λ3 der lokalen Kovarianz als Saliency, nimmt nur Punkte mit distinkten Eigenwerten (Orientierung well-defined) als Kandidaten und wählt sie per NMS dünn aus. Rotationsinvariant. Rückgabewert = Array von Punktindizes.

Argumente:

• points (N,3). radius: Radius der Nachbarschaftskugel für die Saliency (gleiche Einheit wie die Punktwolke).

• nms_radius: Abstand der Non-Maximum-Suppression. Bei None 0.6*radius.

• gamma21, gamma32: Obergrenzen der Eigenwertverhältnisse λ2/λ1, λ3/λ2 (Standard 0.99). Nur Punkte, bei denen beide

darunter liegen, sind Kandidaten (schließt Punkte aus, deren Verhältnis nahe 1 liegt = isotrop, Orientierung unbestimmt).

• max_kp: Obergrenze der Rückgabe. min_neighbors: Punkte mit weniger Nachbarn werden nicht Kandidaten (Standard 8).

Ablauf: An jedem Punkt werden die Nachbarn innerhalb von radius gesammelt und die Eigenwerte λ1≥λ2≥λ3 der Momentenmatrix 2. Ordnung (qᵀq)/n mit dem betrachteten Punkt als Ursprung bestimmt (ausgeschlossen, wenn λ1 höchstens 1e-12 ist). Mit λ3 als Saliency wird absteigend durchlaufen; ein gieriges NMS verwirft alles, was näher als nms_radius an einem bereits übernommenen Punkt liegt. Rückgabewert ist ein int64-Array von Punktindizes (absteigende Saliency). Ohne Kandidaten Länge 0.

Hinweis: Die Nachbarn werden auf den betrachteten Punkt zentriert (nicht auf den Schwerpunkt). Bei einem Punkt auf einer Ebene liegt auch der betrachtete Punkt in dieser Ebene, daher ist λ3 theoretisch 0, und Rundungsreste (λ3/λ1 ≤ 1e-9) werden aus den Kandidaten entfernt. Da es eine Python-Schleife mit Nachbarschaftssuche für alle Punkte ist, sollten Wolken mit mehr als einigen zehntausend Punkten vorher mit voxel_grid_downsample ausgedünnt werden. Es speist direkt die Keypoint-Eingabe von shot_descriptor, und register_shot ruft es mit dem Saliency-Radius 0.6*radius und dem NMS-Radius 0.3*radius auf (radius ist der Stützradius von register_shot).

Hintergrundwissen (Physik und Konventionen hinter diesem Operator)

• blas_threads_and_memory — Warum Matrixzerlegungen langsam sind — BLAS-Threads, Caches, Speicherlayout

Referenzen (Beispieldaten, Literatur)

• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).

• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• feature_register — py -3.11 examples_3d/feature_register.py

Typkompatible Folge-Operatoren (nehmen indices als Eingabe)

fuse_to_voxel

Gleiche Kategorie (feature_register)

harris3d_keypoints · compute_fpfh · shot_descriptor · register_spin · register_fpfh · register_shot


*Provenance: feat_shot.py — 3D Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*

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