AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia FreePascal Grafiken erkennen. Library ?
Thema durchsuchen
Ansicht
Themen-Optionen

Grafiken erkennen. Library ?

Ein Thema von stiftII · begonnen am 4. Mai 2012 · letzter Beitrag vom 10. Mai 2012
Antwort Antwort
Seite 1 von 2  1 2      
freeway

Registriert seit: 11. Jul 2009
57 Beiträge
 
Delphi XE Professional
 
#1

AW: Grafiken erkennen. Library ?

  Alt 4. Mai 2012, 16:18
man kann jedes Pixel auslesen, man kann aber auch scanline verwenden (schneller)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

AW: Grafiken erkennen. Library ?

  Alt 4. Mai 2012, 16:29
man kann jedes Pixel auslesen, man kann aber auch scanline verwenden (schneller)
Kommt drauf an, ob der Algorithmus es erlaubt sich im Bitmap horizontal zu bewegen.

Auf jeden Fall ist Pattern Matching sehr anspruchsvoll und übersteigt die Fähigkeiten eines "normalen Programmierers".
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Grafiken erkennen. Library ?

  Alt 4. Mai 2012, 17:22
Es muss nicht direkt pattern matching sein, es reicht ja eine Ähnlichkeitssuche. Das Schlagwort hier wäre "Korrelationsfunktion" (nicht die aus der Statistik, sondern die Umkehrung zur Convolution/Faltung in der Bildverarbeitung).
Leichte Kost ist das auch nicht gerade. Man sollte in der Lage sein, ein Bild per Fourier-Transformation (FFT) in den Frequenzraum zu transformieren (und wieder zurück) und auch komplexe Zahlen sollte einem nicht fremd sein. Zur Belohnung kann man dann ein kleineres Bild in einem größeren suchen und bekommt X- und Y-Koordinaten am Ende raus (als Maxima der Funktion, die die Ähnlichkeit der Bilder darstellt).
Zum schnellen Testen, kann man MatLab hernehmen:
Code:
functiong = dftcorr(f,w)
[M,N] = size(f);
F = fft2(f);
G = conj(fft2(w,M,N));
g = real(ifft2(G.*F));
gs= im2uint8(mat2gray(g));
figure; imtool(gs);
[I,J]= find(g == max(g(:)))
wobei hier w das gesuchte Muster und f das Gesamtbild ist. In I und J stehen dann nachher die Koordinaten (I=Y, J=X, weil Matlab spaltenweise arbeitet).
Das ganze in fertiger Form für Delphi kenne ich leider nicht, aber wenn dich das bisher nicht abgeschreckt hat: Zumindest zur Theorie dahinter hab ich noch ein wenig rumfliegen.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#4

AW: Grafiken erkennen. Library ?

  Alt 4. Mai 2012, 18:29
Hi,

die eierlegende Wollmilchsau zum Thema Bilderkennung etc. dürft vermutlich Bei Google suchenOpenCV sein...

LG, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#5

AW: Grafiken erkennen. Library ?

  Alt 4. Mai 2012, 18:46
Hi,

die eierlegende Wollmilchsau zum Thema Bilderkennung etc. dürft vermutlich Bei Google suchenOpenCV sein...

LG, Frederic
Das klingt auch klasse.. Aber so wie ich das sehe gibt es keine fpc implementation.

Würde das ganze gerne in Lazarus umsetzen.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: Grafiken erkennen. Library ?

  Alt 4. Mai 2012, 19:42
Wie performant muss das ganze sein, wo willst du es genau einsetzen?
Darf das gesuchte Bild Abweichungen haben oder ist es exakt so im Bild enthalten?
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#7

AW: Grafiken erkennen. Library ?

  Alt 10. Mai 2012, 17:46
Wie performant muss das ganze sein, wo willst du es genau einsetzen?
Darf das gesuchte Bild Abweichungen haben oder ist es exakt so im Bild enthalten?
Es darf minimale abweichungen haben. Und muss vorallem in jeder Größe gefunden werden.

Was macht die Funktion, die du gepostet hast genau ?

PS: Wenn ich die ausprobieren möchte bekomme ich ein "PRGBTriple not found"
  Mit Zitat antworten Zitat
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#8

AW: Grafiken erkennen. Library ?

  Alt 4. Mai 2012, 18:37
Es muss nicht direkt pattern matching sein, es reicht ja eine Ähnlichkeitssuche. Das Schlagwort hier wäre "Korrelationsfunktion" (nicht die aus der Statistik, sondern die Umkehrung zur Convolution/Faltung in der Bildverarbeitung).
Leichte Kost ist das auch nicht gerade. Man sollte in der Lage sein, ein Bild per Fourier-Transformation (FFT) in den Frequenzraum zu transformieren (und wieder zurück) und auch komplexe Zahlen sollte einem nicht fremd sein. Zur Belohnung kann man dann ein kleineres Bild in einem größeren suchen und bekommt X- und Y-Koordinaten am Ende raus (als Maxima der Funktion, die die Ähnlichkeit der Bilder darstellt).
Zum schnellen Testen, kann man MatLab hernehmen:
Code:
functiong = dftcorr(f,w)
[M,N] = size(f);
F = fft2(f);
G = conj(fft2(w,M,N));
g = real(ifft2(G.*F));
gs= im2uint8(mat2gray(g));
figure; imtool(gs);
[I,J]= find(g == max(g(:)))
wobei hier w das gesuchte Muster und f das Gesamtbild ist. In I und J stehen dann nachher die Koordinaten (I=Y, J=X, weil Matlab spaltenweise arbeitet).
Das ganze in fertiger Form für Delphi kenne ich leider nicht, aber wenn dich das bisher nicht abgeschreckt hat: Zumindest zur Theorie dahinter hab ich noch ein wenig rumfliegen.
Das klingt ja schonmal genial ...

Würde mich interessieren, was du noch so zum Thema hast. Und vllt kannste ja sogar eine Beispielfunktion in FPC basteln ??

Und was macht diese "Ähnlichkeitssuche" genau ?. Wandelt sie das Bild in ein verainfachtes Format um, und vergleicht gefundene Muster und formen ? Oder geht die im Endeffekte jeden Pixel durch und vergleicht ?

Danke schonmal.

~stiftII
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.689 Beiträge
 
Delphi 2007 Enterprise
 
#9

AW: Grafiken erkennen. Library ?

  Alt 5. Mai 2012, 01:08
Wandelt sie das Bild in ein verainfachtes Format um, und vergleicht gefundene Muster und formen ? Oder geht die im Endeffekte jeden Pixel durch und vergleicht ?
An der Art und Weise wie du fragst, lässt sich zumindest schon mal gut erkennen, dass du eher nach einer fertigen Lib schauen solltest, als es zu versuchen selbst zu implementieren.
Nein, diese Suche transformiert die Bilder vom Ortsraum in den Frequenzraum, führt eine skaleninvariante Minimabestimmung einer Differenz der Faltung durch, und transformiert das gefundene Minimum zurück in den Ortsraum. Edit: Oder ist das das Maximum im Sinne einer Autokorrelation im Frequenzraum? Der Wein... Was mich brennend interessieren würde: Gibt es dafür auch eine skalen- und rotationsinvariante Version in ähnlicher Einfachheit?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium ( 5. Mai 2012 um 01:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.552 Beiträge
 
Delphi 12 Athens
 
#10

AW: Grafiken erkennen. Library ?

  Alt 4. Mai 2012, 21:40
man kann jedes Pixel auslesen, man kann aber auch scanline verwenden (schneller)
Kommt drauf an, ob der Algorithmus es erlaubt sich im Bitmap horizontal zu bewegen.
Auch bei Scanline kann man ist man nicht auf eine horizontale Bearbeitung beschränkt.

- vorher in einem Pointer-Array alle Scanlines zwischenspeichern und schon hat man eine Art zweidimensionales Array

- sich den Zeiger auf die letzte Scanline holen (diese Bitmaps werden von unten nach oben gespeichert) und schon kann man über eine Art eindimensionales Array drauf zugreifen (alle Zeilen hintereinander)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:08 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-2025 by Thomas Breitkreuz