Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Objekterkennung...Sobel...und wie weiter? (https://www.delphipraxis.net/182186-objekterkennung-sobel-und-wie-weiter.html)

noisy_master 8. Okt 2014 06:48

Objekterkennung...Sobel...und wie weiter?
 
Hallo Gemeinde,

ich habe mal wieder ein Problem bei dem ich mir gerne von euch helfen lassen würde:

ich muss in einem Image einige Seitenmarker(z.B. Kreuze, Ecken oder ähnliches) finden. Das Bild habe ich in ein schwarz-weiss Bild gewandelt, einen Sobel drüberlaufen lassen, und bekomme ein hervorragendes Kantenbild. Soweit, sogut. Nun müsste ich darin die besagten Marker finden.

Allerdings kann das Bild auch leicht gedreht sein. Das heisst, ich bräuchte sowas wie z.B. SIFT. Ich weiss auch, dass es ein Delphi-Port von OpenCV gibt, aber ich wollte nicht gleich mit Kanonen auf Spatzen schiessen(wobei SIFT/SURF aber auch ungünstig sind da nicht patentfrei).

Ausserdem sind diese Algorithmen "unendlich langsam"...

Hat jemand eine Idee für pattern-matching-"light", da die Objekte, die zu finden sind "bekannt" sind und die Positionen auch nicht allzu stark variieren.

Danke euch allen jetzt schonmal für eure Anregungen und Ideen!

P.S.: Die Marker müssen nicht immer unbedingt an den "äussersten Ecken" liegen. Es können auch andere Elemente der Seite näher an den Ecken liegen

Dejan Vu 8. Okt 2014 06:59

AW: Objekterkennung...Sobel...und wie weiter?
 
Sind es (weitgehend) linienförmige Marker? Dann versuche es mal mit einem Zeilen/Spalten Scan, d.h. Du schaust Dir immer nur eine Pixelzeile an und vergleichst diese mit der vorherigen (also der darüber z.B.). Über entsprechende Vergleiche kannst Du die Steigung einer Linie ausrechnen bzw. zunächst einmal eine Linie erkennen, da die Änderung, also der Versatz der Pixel an der Stelle für einen bestimmten Bereich immer 'konstant' ist.

Durch einen Sweep über die ersten z.B. 100 pixel sollte man die Kandidaten schon ziemlich eingrenzen können (sofern es Linien sind). Kreuze kann man dadurch auch finden, indem man aus dem Zeilen-Sweep einen Spalten-Sweep macht, und die erkannten Linien dann vergleicht. Ein Kreuz sind dann vielleicht zwei Linien mit reziproken Steigungen an so ziemlich der gleichen Stelle.

Klingt vielleicht ein wenig wirr, aber das liegt dann an mir. :stupid:

noisy_master 8. Okt 2014 07:11

AW: Objekterkennung...Sobel...und wie weiter?
 
Liste der Anhänge anzeigen (Anzahl: 3)
[QUOTE=Dejan Vu;1275204]Sind es (weitgehend) linienförmige Marker? /QUOTE]

Nein, leider nicht. Ich habe mal 2 Beispiele für die Marker angehängt(corner.png und cross.png) leider können auch solche Genossen wie edit.png auftauchen. Die will ich aber gar nicht finden(zumindest derzeit nicht). Diese sollten aber auch nicht das Problem sein, da sie deutlich weiter "innen liegen"

Medium 8. Okt 2014 07:30

AW: Objekterkennung...Sobel...und wie weiter?
 
Nimm mal den Betrag vom Sobel-Ergebnis, dann werden die Strukturen schon mal noch etwas deutlicher. Und zum finden von Linien könnte sich eine Hough-Transformation anbieten. Selber gemacht habe ich das noch nicht, aber ich meine hier in der DP schon mal öfter darüber gelesen zu haben. Da sollte sich also etwas finden lassen. (Es gibt imho sogar eine Abwandlung davon, die kreisförmige Strukturerkennung ermöglicht.)

noisy_master 8. Okt 2014 07:55

AW: Objekterkennung...Sobel...und wie weiter?
 
Zitat:

Zitat von Medium (Beitrag 1275209)
Und zum finden von Linien könnte sich eine Hough-Transformation anbieten. .....(Es gibt imho sogar eine Abwandlung davon, die kreisförmige Strukturerkennung ermöglicht.)

Ich hoffte eigentlich um Hough herumzukommen, da auch dieser recht zeitaufwendig ist....Mit den Kreisen hast du übrigens recht: geht definitiv mit Hough!


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 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