![]() |
Erkennung von einfachen Formen
Liste der Anhänge anzeigen (Anzahl: 1)
Servus,
ich hab aktuell das Problem, daß ich erkennen soll, ob eine durch eine beliebige Anzahl von Punkten definierte Polyline in etwa einem Kreis, einem Rechteck oder einem Dreieck entspricht. Wenn ja, dann sollen die Punkte so abgeändert werden, daß sie exakt diese Form bilden. Hintergrund der Geschichte: wenn jemand mit der Maus/dem Stift eine Linie zeichnet, dann will ich erkennen, ob die Linie so in etwa einen Kreis/ein Rechteck/ein Dreieck darstellt und wenn ja, dann soll die Linie auf genau dieses Rechteck, Dreieck/Kreis hin geglättet werden. Sprich ein schnell hin gezeichnetes Rechteck soll als korrektes Rechteck dann in der Zeichnung erscheinen (siehe Anhang) Gibt's für sowas irgendwelche Algorithmen oder Stichworte, nach denen man Theorie dazu suchen kann? Da das Ganze während des Schreibens auf dem Bildschirm passieren soll, dürfte die Bestimmung nicht mehr als ca. 1/2-1 Sekunde in Anspruch nehmen. Ist das realistisch? vielen Dank, Uli |
AW: Erkennung von einfachen Formen
Hmm..
Fragen wir mal erstmal, 'wie' die Sysmbole gezeichnet werden. Wenn hierfür den IInkRecognizer von MS verwendest, kannst Du über die Strokes Poligone bekommen. Dann brauchst Du nur diese zu analysieren ;) |
AW: Erkennung von einfachen Formen
Hast schon recht, es wird hier Ink aufgezeichnet (via InkOverlay). Nur das analysieren der Polyline ist ja das Problem. Ich wüßte jetzt nicht, daß die Ink hier etwas anbietet, um Formen zu erkennen.
Zumindest nichts, was unter Windows 7 läuft und keine UWP benötigt. Oder hab ich das was übersehen? |
AW: Erkennung von einfachen Formen
Hmm..
es gibt da als Aufsatz IInkAnalyse (oder so ähnlich) jedoch konnte ich die hierfür benötigte TypeLib noch nicht identifizieren. Damit sollte es dann möglich sein, eine StrokeCollection zu Prüfen.. Gibt nur leider kaum Beispiele (außer UWP) hierfür.. |
AW: Erkennung von einfachen Formen
Ich bin mir nicht mal sicher, ob das IInkAnalzer Interface überhaupt via TypeLib gibt. Im Standard MSInkAut ist jedenfall nichts drinnen. Auch im InkDevider nicht.
Ich denke, ich muß erst mal selbst eine Lösung zu finden. |
AW: Erkennung von einfachen Formen
Können sich die Formen überlappen? Kannst du die einzelne gezeichnete Form schon identifizieren?
|
AW: Erkennung von einfachen Formen
Vielleicht kannst du den
Delphi-Quellcode:
oder die
TGestureRecognizer
Delphi-Quellcode:
aus Vcl.Touch.Gestures irgendwie verwenden. Die sind in der Lage, anhand einer Punktliste eine vorher registrierte CustomGesture zu erkennen.
TGestureEngine
|
AW: Erkennung von einfachen Formen
Wenn die so aussehen wie in deinem Bild würde ich versuchen die Ränder zu finden und abzufahren,
und dabei Eckpunkte zu erkennen (Tangenten machen einen größeren Sprung). Gibt es 4 Ecken = Rechteck Gibt es 3 Ecken = Dreieck Gibt es 0 Ecken = Kreis Ist aber ein sehr vager Algorithmus, zugegeben :stupid: Jegliche Abweichung von der Norm wird Probleme bereiten. |
AW: Erkennung von einfachen Formen
Zitat:
Ein wirklich gut erklärtes Beispiel das fast genau auf dein Problem passt - allerdings in Python - findest Du in ![]() Gute OpenCV Bindings für Delphi sind mir allerdings nur bis zur OpenCV Version 2.4.13 bekannt (aktuell ist OpenCV 4.0) ![]() für dein Problem sollte die 2.4.13 aber reichen hth Hans-Joerg |
AW: Erkennung von einfachen Formen
Vielen Dank auch allen!
Ich werd mir jetzt mal die diversen Ideen ansehen und schauen, was davon verwendbar wäre. Kann etwas dauern... :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz