Mustererkenung
-
Hallo,
Jeder kennt sicherlich Programme die Gesichter und Fingerabdrücke vergleichen
oder Zeichenprogramme, die durch Kontrastunterschiede Objekte einrahmen.
u.s.w.
Ich interessiere mich dafür wie solche "Mustererkennungsalgorithmen"
(oder wie auch immer man sowas nennt) Funktionieren und wie man damit arbeitet.
Wenn jemand eine Internetseiten kennt die sich mit solchen Dingen befassen, oder einen Buchtip hat, dann wäre es nett das hier zu posten. Besonder interessiere ich mich für Quellen, die die Logik erklären, die da hinter steckt.Hier mal etwas genauer um was es mir geht und was ich machen will:
ich möchte mittels stereoskopischer aufnahmen zweier Kameras eine Entfernungsmessung vornehmen.
Eine Gleichung zu finden, die aus der Positionsdifferenf eines bestimmten objektes auf dem einen b.z.w. anderen bild eine Entfernung berechnet, ist nicht weiter problematisch. (winkelfunktionen, trigonometrie)
Aber zu erst brauche ich eine Funktion die zwei Bitmaps nach Mustern durchsucht, die auf beiden Bildern forhanden sind und die dann die Pixelpositionen an das Programm zurück gibt.Ich freue mich über jeden der Tips hat oder sich einfach nur über dieses Thema austauschen möchte
-
http://www5.informatik.uni-erlangen.de/MEDIA/nm/klassifikation-von-mustern/m00links.html
Da gibt es ein Buch zur Klassifikation. Ich weiss nicht genau, ob es Mustererkennung vollständig abdeckt (wohl er nicht), aber auf Klassifikation wird sehr genau eingegangen, wie der titel verrät
Nur ich denke, du stellst dir das evtl. etwas zu einfach vor. Ging mir genauso und nun sitz ich seit 2 Tagen dran, DFT zu verstehen und da geht irgendwie nichts bei mir
-
hehe
Der prozess is ziemlich komplex: erst werden mit verschiedenen mathematischen verfahren merkmale aus dem zu klassifizierenden objekt extrahiert. (in dem fall fingerabdruck wahrscheinlich per pca, siehe projekteforum: schrifterkennung). anschliessend wird dieser daraus entstehende vektor klassifziert. dafür gibts wieder verschiedene methoden. du wirst sicher schon mal etwas von einem bayes klassifikator gehört haben. das ist der, der dem idealen klassifikator am naechsten ist. dieser versucht anhand von wahrscheinlichkeitsverteilung eine aussage über den vektor zu machen, und ihn der wahrscheinlichsten klasse (also z.b. "richtiger fingerabdruck") zuzuordnen
-
Hallo,
erstmal möchte ich mich für die Antworten bedanken.
Beim schmöckern in dem oben genannten Buch ist mir der Gedanke gekommen, dass es für meinen Fall vieleicht eine relativ einfache Lösung gibt.Zwei stereoskopisch aufgenommene Bilder sind relativ ähnlich. es ist halt nur alles horizontal verschoben (abhängig davon, wie weit ein Objekt entfernt ist).
Ich könnte ein Bild in ein Raster aus kleinen Einzelbildern zerlegen.
Diese kleinen Bilder Schiebe ich dann Pixel für Pixel über das andere Bild und berechen bei jedem verschiebungsschritt die Abweichungen der RGB werte von dem kleinen Bild Gegenüber dem anderen.(Durchschnittswert)
Wurde ein kleines Bild so Weit verschoben, dass es sich über der Stelle befindet wo auf dem anderem Bild das gleiche zu sehen ist dürften die Abweichungen zwischen den RGB-Werten wahrscheinlich am niedrigsten sein.
Das mit dem verschieben dient nur zur veranschaulichung. Für den Algorithmus heist es nur, welche Pixel er mit Welchen vergleicht.
das Prog sucht also nach der Pixelzahl, um die man verschieben muss um die geringste abweichung zu erhalten und aus der kann man dann die entfernung berechnen.
Ich weiss, dass diese vorgehensweise einige Nachteile hat:
- wahrscheinlich viele Störquellen
- begrenzte genauigkeit/auflösung da ich das Raster nicht zu klein wählen kann
u.s.w.ich will aber trotzdem mal probieren ob man mit so nem Algorithmus zu halbwegs brauchbaren ergebnissen kommt.
Und vieleicht kann man das ja noch irgendwie verfeinern.
z.b. dadurch das der algorithmus die rastergröße dynamisch wählt, b.z.w. rasterelemente zert oder staucht --> darauf ausgerichtet die geringste Abweichung zu erreichen.ich hoffe ich hab meine Idee halbwegs verständlich erklärt.
wenn jemand was dazu schreiben will ist er herzlich eingeladen.
-
Mart0ck schrieb:
Ich könnte ein Bild in ein Raster aus kleinen Einzelbildern zerlegen.
Diese kleinen Bilder Schiebe ich dann Pixel für Pixel über das andere Bild und berechen bei jedem verschiebungsschritt die Abweichungen der RGB werte von dem kleinen Bild Gegenüber dem anderen.(Durchschnittswert)In der Tat ist das der Weg, wie solche Aufgaben gelöst werden!
Stichwort: Kreuzkorrelation (kann angeben wie ähnlich ein Bildauschnitt einem anderen ist)Du hast weiter oben festgestellt, daß die Bilder nur horizontal verschoben sind. Das stimmt so nicht ganz:
Du machst also zwei Aufnahmen mit der Kamera. Klar, Du kannst nur dort 3-D sehen, wo auch beide Kamera's hinschauen. Um so näher die beiden zusammen sind, um so mehr siehst Du. Andererseits ist es aber so, daß die Genauigkeit der Tiefenmessung mit wachsendem Abstand der Kameras immer besser wird. Also möchte man die Kameras eigentlich möglichst weiter auseinander positionieren. Blöderweise überlappen sich die beiden Sichtkegel der Kameras dann nur noch in einem kleinen Bereich der interessanten Szene. Die Lösung ist: man neigt die Kameras leicht nach innen, sodaß sie einen besseren Blick auf die Szene bekommen. Und dann ist es leider vorbei mit dem nur horizontal verschoben. Dennoch kann man die Punkt wo man nach dem "best-match" suchen muß noch auf eine Gerade im jeweils anderen Bild einschränken. Stichwort dazu: epipolare Geometrie.Ich hoffe Du kannst was damit anfangen.
MfG Jester
-
wenn die Kamera achsen Z in Blickrichtung und X/Y wie bei Rasterbildern üblich gewählt werde und die Kameras nur um die Y achse verdreht werden ist die epipolargrade horizontal.
die Transformation zwischen den beiden Modelkoordinaten der Cams ist
Cam1 Bilded das Koordinatensystem und Cam2 ist verschoben um X0 und verdreht um phi| cos(phi) 0 -sin(phi) X0 | | Xb| | 0 1 0 Y0 | * | Yb| | sin(phi) 0 cos(phi) Z0 | | Zb| | 0 0 0 1 | | 1|
somit hat Yb maximal ein offset von Y0
-
Nun... vielleicht ist es mit Kanonen auf Spatzen schiessen, aber... naja...
Ich würde beide Bilder mittels einer diskreten Wavelet-Transformation transformieren, das darausentstehende Bild nach Werten quantisieren, einen Grenzwert setzen für den alle Werte unterhalb Null gesetzt werden, und anschließend die Differenz-Methode durchführen, wie ihr es gesagt habt...
Der Vorteil: Bei einer Wavelet-Transformation wird das Bild auf horizontale Kanten untersucht, ebenso auf vertikale und diagonale Kanten, dazu noch eine Art Mittelwert-Zone. Mit Deinem Algorithmus für die Entfernung-Berechnung kannst dann Entfernung problemloser ansetzen für alle horizontalen und vertikalen Kanten... Ein Beispiel -> http://nt.eit.uni-kl.de/wavelet/dwt_2d.html betrachtet man als Mensch die Kanten von oben nach unten erkennt man im Wavelet-Transformierten Bild die Kanten im links-unten Bild, betrachtet man die Kanten von links nach rechts erkennt man im wavelet-transformiertem Bild die Kanten im rechts-oben Bild, die Diagonal-Kanten sind im Bild rechts-unten. der Mittelwert-Anteil (links-oben) wird nochmals transformiert, dürfte aber für Deine Anforderungen nicht nötig sein...
Winn
-
der Aufwand ist recht gross.
wenn er zwei Kameras hat muss er die eh irgendwann mal kalibrieren.
bei einer festen Basis ist das dann alles nicht so hart zu rechnen.
aus den epipolaren Beziehungen bekommt nan die Lage eines Punktes in Kamera1 als Grade in Kamera2.
wenn die epipolargrade dann noch horizontal verläuft, ist es noch simpler.
man matcht die pattern noch in einer Laplace pyramide über die zeile.
da is das registrieren nur noch nlogn.
aufwändig wird nur die Kaliebrierung der zei kameras nach dieser Methoded.
-
vielen Dank für die qualifizierten Antworten.
Daran die Kameras nach innen zu drehen habe ich auch schon gedacht. Aber der Einwand das die Verschiebung nicht einfach nur entlang der X-Achse stattfindet ist ziemlich nützlich (Wenn ich drüber nachdenke erscheint das auch logisch)@ b7f7: Danke für den Term (auch wenn ich mich erstmal reindenken muss, wie ich das Benutze)
@winn: ich kann mir vorstellen das deine Methode einen merklichen Genauigkeitsvorteil bringt, weil ich damit die Entfernung zu einem konkreten objekt ermitteln kann. (eben einer Kannte)
Bei meiner methode kann ich nur die entfernung zu einem rastersegment bestimmen
(Großer fehler, wenn das Segment über die Grenze von zwei unterschiedlich weit entfernten objekten reicht)
Trotzdem werde ich erstmal versuchen die einfachere Methode umzusetzenBeim googeln nach epipolar-geometrie habe ich ein paar sehr interessante sachen gefunden.
http://www-i8.informatik.rwth-aachen.de/teaching/ws02/seminar/downloads/16-Image-Based-Methods.pdf
Algorithmen die aus Bildern die aus unterschiedlichen Perspektiven aufgenommen wurden 3D-Modelle errechnen, bzw neue Perspektiven interpolieren.
----- EXTREM COOLE SACHE -------
Hat jemand eine Ahnung wo man solche Algorithmen herbekommt. b.z.w. wie man sie in seinen Programmen verwendet.man matcht die pattern noch in einer Laplace pyramide über die zeile.
da is das registrieren nur noch nlogn.hab zwa grad mein ABI gemacht (Physik/Info) Aber da versteh ich nur noch Bahnhof lol
-