cad_defect_to_cad — CADMAP defect op

• Datenarten: mesh × labels → table

• Aufruf: import fullseye as fs; fs.ledger.cad_defect_to_cad(mesh, labels, K=None, R=None, t=None, cull_backfaces=True, min_pixels=1, background=0, strict=False) (die Implementierung direkt: import cadmap; cadmap.cad_defect_to_cad(mesh, labels, K=None, R=None, t=None, cull_backfaces=True, min_pixels=1, background=0, strict=False); aus dem Register: opscadmap.get("cad_defect_to_cad"))

Verwendung

2-D-Defektlabelbild → eine Tabelle auf der CAD-Fläche (Flächen-ID / Fläche darauf / 3-D-Schwerpunkt).

labels ist ein (H, W)-Label-Bild aus Ganzzahlen (background wird ignoriert, eine bool-Maske ist auch erlaubt). Pro Label werden Strahlen für alle Pixel geschossen und die getroffenen Flächen sowie die reale Fläche, die die Pixel auf der Oberfläche einnehmen, aufsummiert. Die Fläche ist nicht die Pixelzahl, sondern

dA = Z^2 * cosα / (fx * fy * |cosθ|)

wobei cosα die Neigung zur optischen Achse und cosθ der Winkel zwischen Sehstrahl und Flächennormale ist. Je schräger eine Fläche gesehen wird, desto größer die Fläche, die 1 Pixel abdeckt -- das ist genau die Jacobi-Matrix der perspektivischen Projektion, und belässt man es bei Z^2/(fx*fy), erscheinen Defekte auf geneigten Flächen zu klein (bei 60 Grad genau halb so groß).

Die Rückgabe ist eine list von dicts, eines pro Label (table sort):

• label Label-Wert.

• n_pixels Anzahl der Pixel dieses Labels.

• n_hit Anzahl der Pixel, die das CAD getroffen haben. hit_fraction = deren Anteil.

• area reale Fläche auf der Oberfläche (Längeneinheit des mesh hoch 2). Summe nur über die getroffenen Pixel; nicht getroffene Pixel werden nicht addiert.

• area_naive Summe allein von Z^2/(fx*fy) (= Wert ohne Neigung). Beides wird zurückgegeben, damit Nutzer selbst prüfen können, ob die Neigungskorrektur greift.

• face_ids aufsteigende eindeutige Liste der getroffenen Flächen (int64-Array).

• face_areas Fläche je Fläche in derselben Reihenfolge wie face_ids.

• centroid flächengewichteter 3-D-Schwerpunkt (Weltkoordinaten). NaN bei 0 Treffern.

• depth_mean mittleres Z der getroffenen Pixel. NaN bei 0 Treffern.

• winding_fixed bool -- ob ein nach innen gewundenes geschlossenes Mesh erkannt und korrigiert wurde. Alle Datensätze tragen denselben Wert (da es eine Eigenschaft pro mesh ist).

Regionen unter min_pixels werden verworfen. Regionen mit 0 Treffern werden nicht gelöscht, sondern mit area = 0.0, hit_fraction = 0.0 behalten -- würde man sie löschen, verschwänden "Defekte außerhalb des CAD" stillschweigend aus der Tabelle.

Der Umlaufsinn wird wie bei den anderen ops behandelt (cull_backfaces=True erkennt ein geschlossenes, nach innen gewundenes Mesh → Standard: automatische Korrektur + winding_fixed; mit strict=True ValueError). Ehrliche Grenze: Da eine list von Datensätzen zurückkommt, gibt es, wenn labels ganz Hintergrund ist oder alle Regionen unter min_pixels liegen und die list leer ist, keinen Ort, um die Tatsache der Korrektur zu vermerken. In dem Fall wurde ohnehin nicht 1 Defekt abgebildet (eine falsche Zahl kann gar nicht zurückkommen). Braucht man einen solchen Ort, strict=True setzen oder auf demselben mesh cad_pixel_to_surface für nur 1 Pixel abfragen.

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.

• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.

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

• defect_to_cad — py -3.11 examples/defect_to_cad.py

Typkompatible Folge-Operatoren (nehmen table als Eingabe)

—

Gleiche Kategorie (defect)

—


*Provenance: cadmap.py — CADMAP 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.