AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Erkennung von einfachen Formen

Ein Thema von ULIK · begonnen am 29. Nov 2018 · letzter Beitrag vom 30. Nov 2018
Antwort Antwort
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#1

Erkennung von einfachen Formen

  Alt 29. Nov 2018, 13:59
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
Miniaturansicht angehängter Grafiken
sample_smooth.jpg  
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#2

AW: Erkennung von einfachen Formen

  Alt 29. Nov 2018, 14:06
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
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Erkennung von einfachen Formen

  Alt 29. Nov 2018, 14:25
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?
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#4

AW: Erkennung von einfachen Formen

  Alt 29. Nov 2018, 14:32
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..
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Erkennung von einfachen Formen

  Alt 29. Nov 2018, 15:14
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.
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Erkennung von einfachen Formen

  Alt 30. Nov 2018, 07:06
Können sich die Formen überlappen? Kannst du die einzelne gezeichnete Form schon identifizieren?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#7

AW: Erkennung von einfachen Formen

  Alt 30. Nov 2018, 07:18
Vielleicht kannst du den TGestureRecognizer oder die TGestureEngine aus Vcl.Touch.Gestures irgendwie verwenden. Die sind in der Lage, anhand einer Punktliste eine vorher registrierte CustomGesture zu erkennen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#8

AW: Erkennung von einfachen Formen

  Alt 30. Nov 2018, 08:56
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
Jegliche Abweichung von der Norm wird Probleme bereiten.
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
157 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Erkennung von einfachen Formen

  Alt 30. Nov 2018, 09:29
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.

[...]

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?

Uli
Mit OpenCV geht das ganz gut.

Ein wirklich gut erklärtes Beispiel das fast genau auf dein Problem passt - allerdings in Python - findest Du in

https://www.pyimagesearch.com/2016/0...ape-detection/

Gute OpenCV Bindings für Delphi sind mir allerdings nur bis zur OpenCV Version 2.4.13 bekannt (aktuell ist OpenCV 4.0)

https://github.com/Laex/Delphi-OpenCV

für dein Problem sollte die 2.4.13 aber reichen

hth Hans-Joerg
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Erkennung von einfachen Formen

  Alt 30. Nov 2018, 10:27
Vielen Dank auch allen!

Ich werd mir jetzt mal die diversen Ideen ansehen und schauen, was davon verwendbar wäre. Kann etwas dauern...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz