From ee894f272e16922607350ac93be1802cec4c04e2 Mon Sep 17 00:00:00 2001 From: Jayktopus <179423526+Jayktopus@users.noreply.github.com> Date: Wed, 5 Aug 2026 00:15:53 +0200 Subject: [PATCH] Explain the hybrid technology pipeline --- README.md | 5 +- README_DE.md | 5 +- TECHNOLOGY.md | 247 +++++++++++++++++++++++++++++++++++++++++++++++ TECHNOLOGY_DE.md | 233 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 488 insertions(+), 2 deletions(-) create mode 100644 TECHNOLOGY.md create mode 100644 TECHNOLOGY_DE.md diff --git a/README.md b/README.md index 723cb6f..a61692a 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![License: GPL-3.0-or-later](https://img.shields.io/badge/license-GPL--3.0--or--later-4C1?style=flat-square)](LICENSE) [![Public beta](https://img.shields.io/badge/status-public%20beta-D97706?style=flat-square)](https://github.com/Jayktopus/Scan2Sketch-OpenSource/releases) -[Install](#installation) · [How it works](#how-it-works) · [Roadmap](ROADMAP.md) · [Contribute](CONTRIBUTING.md) · [Deutsch](README_DE.md) +[Install](#installation) · [How it works](#how-it-works) · [Technology](TECHNOLOGY.md) · [Roadmap](ROADMAP.md) · [Contribute](CONTRIBUTING.md) · [Deutsch](README_DE.md) ![Scan2Sketch demonstration: scan selection, contour review, sketch creation and pad](media/demo/scan2sketch-demo.gif) @@ -34,6 +34,9 @@ creating a real `Sketcher::SketchObject`. The correction workspace supports both a guided workflow for new users and fine-grained tools for advanced contour editing. +For a plain-language overview and a detailed description of the hybrid +pipeline, see [Technology explained](TECHNOLOGY.md). + ## Capabilities | Area | What Scan2Sketch provides | diff --git a/README_DE.md b/README_DE.md index f61bf9f..fb63be0 100644 --- a/README_DE.md +++ b/README_DE.md @@ -9,7 +9,7 @@ [![Lizenz: GPL-3.0-or-later](https://img.shields.io/badge/Lizenz-GPL--3.0--or--later-4C1?style=flat-square)](LICENSE) [![Öffentliche Beta](https://img.shields.io/badge/Status-öffentliche%20Beta-D97706?style=flat-square)](https://github.com/Jayktopus/Scan2Sketch-OpenSource/releases) -[Installation](#installation) · [Funktionsweise](#so-funktioniert-es) · [Roadmap](ROADMAP.md) · [Mitwirken](CONTRIBUTING.md) · [English](README.md) +[Installation](#installation) · [Funktionsweise](#so-funktioniert-es) · [Technologie](TECHNOLOGY_DE.md) · [Roadmap](ROADMAP.md) · [Mitwirken](CONTRIBUTING.md) · [English](README.md) ![Scan2Sketch-Demonstration: Scan auswählen, Kontur prüfen, Skizze und Pad erzeugen](media/demo/scan2sketch-demo.gif) @@ -34,6 +34,9 @@ Erzeugung eines echten `Sketcher::SketchObject` wird das Ergebnis geprüft. Das Korrekturfenster bietet einen geführten Ablauf für neue Nutzer und präzise Einzelwerkzeuge für fortgeschrittene Konturbearbeitung. +Eine verständliche Kurzfassung und die vollständige technische Beschreibung +stehen unter [Technologie erklärt](TECHNOLOGY_DE.md). + ## Funktionsumfang | Bereich | Funktionen | diff --git a/TECHNOLOGY.md b/TECHNOLOGY.md new file mode 100644 index 0000000..6958b5a --- /dev/null +++ b/TECHNOLOGY.md @@ -0,0 +1,247 @@ +# Technology explained + +[Basic explanation](#basic-explanation) · [Detailed pipeline](#detailed-pipeline) · [Limits](#what-the-system-does-not-claim) · [Code map](#implementation-map) · [Deutsch](TECHNOLOGY_DE.md) + +Scan2Sketch does not ask one AI model to produce final CAD geometry. It uses +several independent views of the scan, compares them, returns to the original +pixels for measurement, and validates the resulting geometry before FreeCAD +receives it. + +## Basic explanation + +### Why a hybrid exists + +Different methods fail in different ways: + +- OpenCV is deterministic and preserves full image resolution, but shadows or + internal texture can resemble an object boundary. +- SAM is good at identifying the intended object, but its mask is not a + dimensional CAD measurement. +- Light HQ-SAM often preserves small structures and corners better, but it is + still a segmentation model rather than a measuring instrument. +- CAD fitting can produce clean lines and circles, but only after the correct + material edge and topology have been established. + +Scan2Sketch therefore gives each method a limited role instead of trusting any +single result blindly. + +### The short version + +```mermaid +flowchart LR + A["Calibrated scan"] --> B["OpenCV: component and full-resolution edges"] + B --> C["SAM: semantic object mask"] + B --> D["Light HQ-SAM: detailed object mask"] + C --> E["Mask candidates are scored"] + D --> E + B --> E + E --> F["Original pixels: material-edge refinement"] + F --> G["Lines, circles, arcs and B-splines"] + G --> H["User review and correction"] + H --> I["Topology and FreeCAD export checks"] +``` + +In normal language: + +1. Calibration turns pixels into millimetres and can correct a saved scanner + distortion profile. +2. OpenCV proposes the physical component and examines its edges at the scan's + original resolution. +3. SAM and Light HQ-SAM provide two additional interpretations of which pixels + belong to that component. +4. Scan2Sketch creates several possible combinations, scores them against the + image and chooses a coarse working mask. +5. The program examines the original image again to find consistent material + edges. The segmentation vote is not treated as the final CAD contour. +6. Plausible geometric primitives and alternative edge candidates are offered + for review. The user can keep, replace or correct them. +7. Only closed, non-branching and non-self-intersecting geometry is written to + FreeCAD. The exported sketch is checked against the accepted preview. + +## Detailed pipeline + +### 1. Input and calibration + +The image is loaded without changing the original file. A `mm_per_pixel` scale +comes from a validated calibration rather than being inferred silently from +object size. Saved calibration profiles can apply scale and two-dimensional +distortion corrections to the neutral geometry. + +Image-processing tolerances are defined in physical units where practical and +converted to pixels only at image-processing boundaries. This keeps a setting +such as a 0.20 mm feature comparable at 300, 600 and 1200 dpi. + +### 2. OpenCV component bootstrap + +OpenCV finds connected component candidates using colour, contrast and +threshold evidence. A click can select the intended component; the largest +region is only a suggestion. The selected bounding box, centroid and area +become the common region of interest for the other backends. + +A deterministic stability pass analyzes several threshold interpretations in +the original-resolution region. Their consensus is refined toward visible +image edges within a bounded physical distance. This supplies detailed edge +evidence that is not limited by a neural encoder's input resolution. + +### 3. SAM and Light HQ-SAM masks + +The selected component supplies a box prompt and a robust positive point away +from shadows and boundaries. Optional negative points identify regions that +must not belong to the component. + +SAM and Light HQ-SAM run as independent backends. They return masks, not +FreeCAD objects and not final dimensions. On a CUDA machine, neural inference +can run on the GPU while deterministic full-resolution metrology occupies a +CPU worker. CPU-only systems remain sequential to avoid oversubscription. + +### 4. Transparent mask fusion + +The three masks are reduced to the connected component selected by the user. +Scan2Sketch then evaluates: + +- each original backend mask; +- a pixel majority mask; +- their union; and +- their intersection. + +Candidates are scored using image-edge alignment, agreement between sources, +expected area, contour complexity and hole count. These scores and the winning +strategy are retained in analysis metadata. A specific safeguard prevents a +single threshold mask from moving an otherwise agreed plain silhouette merely +because a scanner shadow has a strong gradient. + +The fusion stage also restores credible enclosed or background-matching holes +that prompt segmenters may fill, while tiny engraving-like gaps can be filled. +These thresholds are expressed in physical units. + +### 5. Material-edge refinement + +The fused mask establishes topology and a search region. For supported shapes, +the metrology stage samples the original scan again instead of accepting the +mask boundary as a measurement. + +For rectangle-like parts, profiles are sampled normal to all four sides at +several physical smoothing scales. Multiple edge bands are retained and the +four sides are selected jointly, favouring consistent opposite edges over four +unrelated local maxima. + +For circular boundaries and holes, radial profiles generate alternative radii. +Candidates are evaluated across angle, scale, contrast, profile width and +centre stability. Distinct plausible radii can remain available for visual +selection instead of being silently collapsed. + +Material-edge replacement is applied only when the shape-specific fit passes +its acceptance and confidence gates. Otherwise the reviewed contour remains +the fallback. + +### 6. Geometry candidates and regularization + +Scan2Sketch proposes exact primitives only when their residuals and topology +are plausible: + +- regular polygons with three, four, six or eight sides; +- full circles for round outer boundaries and holes; +- lines and circular arcs for supported intervals; and +- B-splines for remaining smooth, non-primitive intervals. + +Candidate ranking considers image support and estimated uncertainty. The UI +keeps mutually exclusive candidates separate so that a user can inspect the +one currently under consideration. Manual masks, freehand edge guidance, +segment recalculation, direct measurements and undo/redo modify the neutral +geometry before export. + +Regularization is bounded in millimetres and is shown in the correction +preview. If it breaks topology, Scan2Sketch rejects that regularization and +keeps the earlier geometry. There is intentionally no hidden simplification +after the user accepts the green contour. + +### 7. Uncertainty + +The displayed estimate combines separately tracked terms: + +```text +combined uncertainty² = + pixel localization² + + edge localization² + + scanner calibration² + + model selection² + + repeatability² + + optional distortion residual² + + optional reference-measurement uncertainty² +``` + +The 95% value is currently reported as twice the combined standard +uncertainty. It is an engineering estimate based on the available evidence, +not a certification of the scanner or part. + +### 8. Topology and FreeCAD export + +Before export, the neutral geometry is checked for missing or open outer +loops, zero and duplicate edges, branches, self-intersections, invalid hole +containment, intersecting holes and invalid circle radii. + +The FreeCAD writer uses real Sketcher lines, circles, arcs and B-splines where +the reviewed geometry contains those primitives. Document changes run inside +a transaction and are rolled back on failure. + +After writing, Scan2Sketch verifies that: + +- the number of FreeCAD wires matches the expected contour count; +- every wire is closed; and +- each exported curve still passes through the coordinates accepted in the + preview within a strict numerical tolerance. + +This last gate prevents FreeCAD constraints or a second export-time fit from +silently changing the confirmed contour. + +## Fallback behaviour + +- If model weights are absent, the OpenCV workflow remains available. +- If a geometric replacement is uncertain, the measured polygon is retained. +- If regularization invalidates topology, the unregularized geometry is kept. +- If an optional pad fails, the valid sketch is preserved. +- If geometry cannot be validated, Scan2Sketch refuses to create a misleading + final profile and reports actionable locations where possible. + +## What the system does not claim + +- Segmentation masks are not treated as ground-truth dimensions. +- Subpixel localization cannot decide which of several visually real edges is + the functional edge of a chamfered or reflective part. +- A single scan cannot reveal hidden geometry, height, thread dimensions or a + complete 3D object. +- The uncertainty display is not a substitute for a traceable measurement or + a caliper check of critical dimensions. + +See [Known limitations](KNOWN_LIMITATIONS.md) for operational constraints. + +## Privacy and reproducibility + +Analysis runs locally. Scan2Sketch does not upload the scan. The external +analysis process exchanges neutral JSON data with the FreeCAD add-on so that +heavy image dependencies remain isolated from FreeCAD's Python environment. +The result metadata records backend, fusion, candidate and uncertainty details +for diagnostics and reproducible bug reports. + +## Implementation map + +| Responsibility | Main implementation | +| --- | --- | +| Backend contract | `scan2sketch/core/backends.py` | +| OpenCV analysis | `scan2sketch/core/opencv_backend.py` | +| SAM backend | `scan2sketch/core/sam_backend.py` | +| Light HQ-SAM backend | `scan2sketch/core/light_hq_sam_backend.py` | +| Hybrid orchestration | `scan2sketch/core/triple_hybrid_backend.py` | +| Mask comparison | `scan2sketch/core/mask_fusion.py` | +| Full-resolution edge stability | `scan2sketch/core/opencv_stability.py`, `boundary_refinement.py` | +| Material-edge hypotheses | `scan2sketch/core/material_edge_optimizer.py` | +| Candidate ranking | `scan2sketch/core/candidate_ranking.py` | +| Primitive fitting and vectorization | `primitive_fitting.py`, `cad_primitives.py`, `contour_vectorization.py` | +| Measurement uncertainty | `scan2sketch/core/measurement_uncertainty.py` | +| Neutral topology validation | `scan2sketch/core/validation.py` | +| FreeCAD sketch writer | `scan2sketch/freecad/sketch_writer.py` | +| Isolated process boundary | `scripts/analyze_hybrid_external.py` | + +Contributions that change a decision rule should include a reproducible test +case and describe how the change affects dimensional error, topology, runtime +and manual correction effort. diff --git a/TECHNOLOGY_DE.md b/TECHNOLOGY_DE.md new file mode 100644 index 0000000..4d6679f --- /dev/null +++ b/TECHNOLOGY_DE.md @@ -0,0 +1,233 @@ +# Technologie erklärt + +[Kurz erklärt](#kurz-erklärt) · [Detaillierter Ablauf](#detaillierter-ablauf) · [Grenzen](#was-das-system-nicht-behauptet) · [Code-Übersicht](#code-übersicht) · [English](TECHNOLOGY.md) + +Scan2Sketch lässt nicht ein einzelnes KI-Modell die endgültige CAD-Geometrie +bestimmen. Mehrere voneinander unabhängige Auswertungen werden verglichen. +Anschließend wird für die eigentliche Messung erneut auf die Originalpixel +zugegriffen. Erst nach einer Geometrieprüfung wird das Ergebnis an FreeCAD +übergeben. + +## Kurz erklärt + +### Warum mehrere Verfahren zusammenarbeiten + +- OpenCV arbeitet deterministisch und in voller Bildauflösung. Schatten oder + Texturen können jedoch wie eine Bauteilkante aussehen. +- SAM erkennt gut, welches Objekt gemeint ist. Seine Maske ist aber keine + maßhaltige CAD-Messung. +- Light HQ-SAM erhält oft kleine Strukturen und Ecken besser, bleibt aber ein + Segmentierungsmodell und kein Messgerät. +- CAD-Anpassung erzeugt saubere Geraden und Kreise, darf jedoch erst nach der + Auswahl der richtigen Materialkante und Topologie erfolgen. + +Deshalb erhält jedes Verfahren eine begrenzte Aufgabe. Kein Einzelergebnis wird +blind übernommen. + +```mermaid +flowchart LR + A["Kalibrierter Scan"] --> B["OpenCV: Bauteil und Kanten in voller Auflösung"] + B --> C["SAM: semantische Objektmaske"] + B --> D["Light HQ-SAM: detaillierte Objektmaske"] + C --> E["Maskenkandidaten bewerten"] + D --> E + B --> E + E --> F["Originalpixel: Materialkante verfeinern"] + F --> G["Geraden, Kreise, Bögen und B-Splines"] + G --> H["Visuelle Prüfung und Korrektur"] + H --> I["Topologie- und FreeCAD-Ausgabeprüfung"] +``` + +In einfachen Worten: + +1. Die Kalibrierung wandelt Pixel in Millimeter um und kann eine gespeicherte + Scannerverzerrung korrigieren. +2. OpenCV schlägt das Bauteil vor und untersucht seine Kanten in der + Originalauflösung. +3. SAM und Light HQ-SAM liefern zwei weitere Interpretationen der + Objektzugehörigkeit. +4. Scan2Sketch bewertet einzelne Masken und mehrere Kombinationen davon. +5. Für die Materialkante wird erneut das unveränderte Originalbild untersucht. + Das Abstimmungsergebnis der Segmentierer ist nicht die finale CAD-Kontur. +6. Geometrische Kandidaten und alternative Kanten bleiben visuell prüfbar. +7. Nur geschlossene, eindeutige und überschneidungsfreie Geometrie wird an + FreeCAD übergeben und dort nochmals mit der Vorschau verglichen. + +## Detaillierter Ablauf + +### 1. Eingabe und Kalibrierung + +Der Scan bleibt unverändert. Ein geprüfter `mm_per_pixel`-Wert legt den Maßstab +fest. Kalibrierprofile können zusätzlich Maßstabs- und zweidimensionale +Verzerrungskorrekturen auf die neutrale Geometrie anwenden. + +Toleranzen werden möglichst in Millimetern definiert und erst an den Grenzen +der Bildverarbeitung in Pixel umgerechnet. Dadurch bedeutet beispielsweise +0,20 mm bei 300, 600 und 1200 dpi weiterhin dieselbe physische Größe. + +### 2. OpenCV-Auswahl und hochauflösende Kanten + +OpenCV ermittelt zusammenhängende Kandidaten anhand von Farbe, Kontrast und +Schwellwerten. Ein Klick kann das gewünschte Bauteil wählen; die größte Fläche +ist nur ein Vorschlag. Bounding Box, Schwerpunkt und Fläche begrenzen die +Suche für die anderen Backends. + +Mehrere deterministische Schwellwertvarianten werden in Originalauflösung +verglichen. Ihre stabile gemeinsame Kontur wird innerhalb eines begrenzten +physischen Abstands zu sichtbaren Bildkanten verfeinert. + +### 3. SAM und Light HQ-SAM + +Das ausgewählte Bauteil liefert eine Box und einen robusten positiven Punkt, +der möglichst nicht auf Schatten oder Randpixeln liegt. Negative Punkte können +ausgeschlossene Bereiche kennzeichnen. + +SAM und Light HQ-SAM liefern unabhängige Masken. Sie erzeugen weder FreeCAD- +Objekte noch endgültige Maße. Bei CUDA kann die GPU die neuronale Inferenz +berechnen, während ein CPU-Worker parallel die hochauflösende Messanalyse +ausführt. Auf reinen CPU-Systemen bleibt der Ablauf bewusst sequenziell. + +### 4. Nachvollziehbare Maskenfusion + +Ausgewertet werden: + +- jede ursprüngliche Backend-Maske; +- eine Pixelmehrheit; +- die Vereinigungsmenge; und +- die Schnittmenge. + +Die Bewertung berücksichtigt Bildkantenübereinstimmung, Einigkeit der Quellen, +erwartete Fläche, Konturkomplexität und Lochanzahl. Sieger und Einzelwerte +bleiben in den Analysemetadaten erhalten. Eine Schutzregel verhindert, dass ein +starker Scannerschatten eine ansonsten übereinstimmende Silhouette allein über +die OpenCV-Maske verschiebt. + +Geschlossene oder zum Scannerhintergrund passende Löcher können wiederhergestellt +werden. Winzige gravurähnliche Lücken können gefüllt werden. Die Grenzwerte +werden in physischen Einheiten festgelegt. + +### 5. Materialkantenverfeinerung + +Die fusionierte Maske legt Topologie und Suchbereich fest. Für unterstützte +Formen untersucht die Messstufe anschließend erneut das Originalbild. + +Bei rechteckähnlichen Bauteilen werden an allen vier Seiten Normalprofile auf +mehreren physischen Glättungsskalen abgetastet. Mehrere Kantenbänder bleiben +erhalten und die Seiten werden gemeinsam gewählt. Dadurch werden gegenüberliegende +konsistente Materialkanten gegenüber vier unabhängigen lokalen Maxima bevorzugt. + +Bei kreisförmigen Konturen und Löchern entstehen aus radialen Profilen mehrere +Radiuskandidaten. Winkelabdeckung, Skalenstabilität, Kontrast, Profilbreite und +Mittelpunktstabilität fließen in die Bewertung ein. Mehrere plausible Radien +können für die visuelle Auswahl erhalten bleiben. + +Eine Materialkante ersetzt die vorherige Kontur nur, wenn die zugehörigen +Akzeptanz- und Konfidenzbedingungen erfüllt sind. Ansonsten bleibt die +prüfbare Kontur erhalten. + +### 6. CAD-Geometrie und Benutzerprüfung + +Exakte Primitive werden nur bei passenden Residuen und gültiger Topologie +vorgeschlagen: + +- regelmäßige Drei-, Vier-, Sechs- und Achtecke; +- vollständige Kreise für Außenkonturen und Löcher; +- Geraden und Kreisbögen; sowie +- B-Splines für verbleibende glatte Abschnitte. + +Bildunterstützung und geschätzte Unsicherheit beeinflussen die Rangfolge. +Gegenseitig ausschließende Kandidaten bleiben getrennt und visuell auswählbar. +Maskenwerkzeuge, Materialkanten-Nachzeichnen, segmentweise Neuberechnung, +Maßband und Rückgängig/Wiederholen verändern das neutrale Modell vor der +FreeCAD-Ausgabe. + +Glättung und Vereinfachung sind in Millimetern begrenzt und bereits in der +Vorschau sichtbar. Erzeugt die Änderung eine ungültige Topologie, wird sie +verworfen. Nach dem Bestätigen der grünen Kontur gibt es bewusst keine +unsichtbare zweite Vereinfachung. + +### 7. Unsicherheit + +Die Anzeige kombiniert getrennt geführte Beiträge: + +```text +Gesamtunsicherheit² = + Pixellokalisierung² + + Kantenlokalisierung² + + Scannerkalibrierung² + + Modellwahl² + + Wiederholbarkeit² + + optionaler Verzerrungsrest² + + optionale Referenzmessunsicherheit² +``` + +Der 95-Prozent-Wert wird derzeit als das Doppelte der kombinierten +Standardunsicherheit ausgegeben. Er ist eine technische Schätzung aus den +vorhandenen Daten und keine Zertifizierung des Scanners. + +### 8. Topologie und FreeCAD-Ausgabe + +Geprüft werden unter anderem fehlende oder offene Außenkonturen, Null- und +Doppelkanten, Verzweigungen, Selbstüberschneidungen, ungültige Lochhierarchien, +sich schneidende Löcher und ungültige Kreisradien. + +Der FreeCAD-Schreiber verwendet echte Sketcher-Geraden, -Kreise, -Bögen und +-B-Splines, sofern das geprüfte neutrale Modell diese enthält. Änderungen am +Dokument laufen in einer Transaktion und werden bei Fehlern zurückgerollt. + +Nach der Ausgabe wird kontrolliert, ob die erwartete Anzahl geschlossener +Wires entstanden ist und ob jede Kurve weiterhin durch die in der Vorschau +bestätigten Koordinaten verläuft. Dadurch können FreeCAD-Constraints oder eine +späte Neuanpassung die bestätigte Kontur nicht unbemerkt verändern. + +## Rückfallverhalten + +- Ohne Modellgewichte bleibt der OpenCV-Ablauf verfügbar. +- Bei unsicherer Primitive bleibt die gemessene Polygonkontur erhalten. +- Bei ungültiger Glättung bleibt die vorherige Geometrie erhalten. +- Scheitert ein optionales Pad, bleibt die gültige Skizze bestehen. +- Nicht validierbare Geometrie wird abgelehnt, statt als scheinbar korrektes + Profil ausgegeben zu werden. + +## Was das System nicht behauptet + +- Segmentierungsmasken sind keine maßliche Ground Truth. +- Subpixel-Lokalisierung kann bei Fasen oder Reflexionen nicht entscheiden, + welche von mehreren sichtbaren Kanten die funktionale Kante ist. +- Ein einzelner Scan enthält keine verdeckte Geometrie, Höhe, Gewindemaße oder + vollständige 3D-Information. +- Die Unsicherheitsangabe ersetzt keine rückführbare Messung oder Kontrolle + kritischer Maße mit einer Schieblehre. + +Weitere Einzelheiten: [Bekannte Einschränkungen](KNOWN_LIMITATIONS.md). + +## Datenschutz und Reproduzierbarkeit + +Die Analyse läuft lokal; Scan2Sketch lädt keine Scans hoch. Der externe +Analyseprozess tauscht neutrale JSON-Daten mit dem FreeCAD-Add-on aus, damit +umfangreiche Bildabhängigkeiten von FreeCADs Python-Umgebung getrennt bleiben. +Backend-, Fusions-, Kandidaten- und Unsicherheitsdaten werden für Diagnose und +reproduzierbare Fehlerberichte in den Ergebnis-Metadaten festgehalten. + +## Code-Übersicht + +| Aufgabe | Hauptimplementierung | +| --- | --- | +| Backend-Schnittstelle | `scan2sketch/core/backends.py` | +| OpenCV-Analyse | `scan2sketch/core/opencv_backend.py` | +| SAM | `scan2sketch/core/sam_backend.py` | +| Light HQ-SAM | `scan2sketch/core/light_hq_sam_backend.py` | +| Hybrid-Orchestrierung | `scan2sketch/core/triple_hybrid_backend.py` | +| Maskenvergleich | `scan2sketch/core/mask_fusion.py` | +| Hochauflösende Kantenstabilität | `opencv_stability.py`, `boundary_refinement.py` | +| Materialkantenhypothesen | `scan2sketch/core/material_edge_optimizer.py` | +| Kandidatenrangfolge | `scan2sketch/core/candidate_ranking.py` | +| Primitive und Vektorisierung | `primitive_fitting.py`, `cad_primitives.py`, `contour_vectorization.py` | +| Messunsicherheit | `scan2sketch/core/measurement_uncertainty.py` | +| Neutrale Topologieprüfung | `scan2sketch/core/validation.py` | +| FreeCAD-Skizzenschreiber | `scan2sketch/freecad/sketch_writer.py` | +| Isolierte Prozessgrenze | `scripts/analyze_hybrid_external.py` | + +Änderungen an Entscheidungsregeln sollten einen reproduzierbaren Testfall +enthalten und Auswirkungen auf Maßabweichung, Topologie, Laufzeit und manuelle +Korrekturen dokumentieren.