Archiv verlassen und diese Seite im Standarddesign anzeigen : Entfernungsbestimmung anhand 2er Cams
millemim
14.12.2004, 00:37
Erstmal Hallo an alle, bin ganz neu hier und finde das Forum echt klasse !!!
Mein wunsch ( oder traum ) ist es einen robo zu basteln, der mithilfe von 2 cams gegenstände erkennt und die entfernung zu ihnen berechnet. Dabei sollen gegenstände unterschiedlicher größe, entfernung (bis 50 cm) und farbe erkannt werden.
Haben im bio-lk gerade besprochen wie das in der biologie funzt. 2 bilder und durch die unterschiedlichen winkel erscheint das fixierte objekt an untschiedlichen stellen auf den 2 bildern. das mit dem fixieren klappt natürlich nicht mit 2 fest installierten cams. aber wenn diese ca. 10 bis 15 cm auseinander stehen, dann erscheinen nähere objekt doch wenn man die beiden bilder nebeneinander sieht weiter zur mitte hin gerichtet als objekte, welche weiter weg sind... man muss das doch irgendwie berechnen können...
wenn es keine algorithmische lösung gibt, oder diese zu schwer ist, hatte ich mir auch überlegt das mit nem Neuronalen Netz zu lösen, wobei dieses dann doch schon etwas größer und komplexer werden würde...
Für hilfen und anregungen wäre ich euch sehr dankbar!
Der robo "lebt" noch nicht, habe diverse teile auf meinen diesjährigen wunschzetteln gebracht O:)
Hi, hab ich schon versucht, allerdings mit einer Kamera, und mit zwei Spiegeln auf stereo gemacht. Wirklich schielen brauchst du nicht, rechnen genügt, ( du hast ja nicht wie im Aug nur eine scharfe Stelle)
Ich hatte (bei schlechter Beleuchtung ) einige Probleme mit dem Bildrauschen, aber vernünftige Kontraste gehen ganz gut, gehört halt konfektioniert. (Laboraufbau)
Ich hab EINE Kamera genommen, um Farbe, Kontrast etc. gleich zu haben
Vorsicht: das Analysieren ist eine Schweinerei, braucht einges Hirn vom Rechner.
mfg robert
millemim
14.12.2004, 15:35
dass das ganze verfahren ziemlich zu lasten der cpu geht ist schon klar...
aber wie hast du das problem der abstandsbestimmung denn gelöst ?
könntest du mir evtl eine prinzipielle anregung/idee geben, wie man aus den bildern entfernungen von objekten berechnen kann?
Hatte mir schon überlegt ein feed-forward-netz zu basteln, welches als eingabe-werte beide bilder vorgestellt bekommt und 3 ausgabe-neuronen. 1 welches für die relative entfernung von 0 bis 1 verantwortlich ist und 2 zur angabe auf welcher seite sich das objekt befindet... Das ganze dann auf dem pc trainieren und in nem java-prog auf nem kleinen pc (diese 17x17 cm mainboards ) mit ca. 500 mhz laufen lassen.
Habe das ganze mal getestet wegen der laufzeit. keinerlei probleme. 500-600 mhz müssten ausreichen um die netzausgabe 10 mal pro sec berechnen zu können....
Hat jemand erfahrungen mit neuronalen netzen zur bilderkennung ?
Freiheitspirat
14.12.2004, 17:17
Es gibt grundsätzlich bei diesem Ansatz ein Problem:
Die Genauigkeit der Entfernung eines Objektes ist vom Winkel zu den Kameras abhängig.
Die Genauigkeit des Winkels ist von der Bildauflösung abhängig.
Der Rechenaufwand ist von Bildauflösung * Bildwiederholungsfrequenz abhängig.
Je nach verwendetem Rechner ergibt sich dann die mögliche Genauigkeit der Entfernungsbestimmung.
Also 10 mal pro Sekunde halte ich für nicht realisierbar.
Und Entfernungen ab einem Meter (bei 10-15cm Kameraabstand) sind auch maximal im Dezimeterbereich möglich.
Kannst ja mal ein bischen genauer rechnen, würde mich auch interessieren...
Die Idee mit dem Neuronalen Netzwerk sollte besser nochmal durchdacht werden :)
Ein Neuronales Netz ist kein universaler Problemloeser, dem ich einfach zwei Bilder reinstopfe und dann kommt hinten die Entfernung raus ... :)
Hauptproblem des ganzen Stereosehens ist doch immer, die zusammengehoerigen Punkte in den beiden Bildern zu finden. Sprich: Ein Punkt aus der 3D-Welt erscheint einmal im linken und einmal im rechten Bild. Unter bestimmten (normalerweise gegebenen) Umstaenden (beide Bildebenen liegen in einer Ebene, kein vertikaler Versatz, ...) sind die beiden y-Koordinaten in beiden Bildern in etwa gleich. Nur die x-Koordinaten unterscheiden sich. Anhand der Differenz der x-Koordinaten kann man per Triangulation die Entfernung des Punktes berechnen (Abstand der Kameras zueinander ist bekannt, ...)
Natuerlich werden die y-Werte nicht wirklich gleich sein (das ist der Idealfall) sondern einige wenige Pixel auseinander liegen.
Hauptproblem ist also die zusammengehoerigen Punkte zu finden.
Uebrigens gibt es kommerzielle Software, die bei Bildern der Groesse 160x120 Frameraten von 100 Hz und mehr erreichen. Allerdings verwenden die dann auch patentierte Algorithmen :) Obige Zahlen sind vom SRI Small Vision System, auf einem Pentium III 500 MHz.
wusste garnicht, daß man Algorithmen überhaupt patentieren lassen kann.
aber ob patentiert oder nicht ist eh völlig egal...
jeder kann Patente kopieren, solange er damit kein Geld verdient.
millemim
14.12.2004, 21:43
habe mir zu dem NN schon ein bischen mehr gedanken gemacht, wollte nur nicht den gesamten samon posten...
aber wer sagt, dass das nicht mit einem NN klappt ? du kannst ja auch in etwas sagen, wie weit der monitor von deiner nase entfernt ist. dafür ist ja schließlich auch ein NN verantwortlich... zwar "etwas" komplexer O:) aber ebenfalls ein NN...
werde das einfach mal ausprobieren... wird allerdings noch etwas dauern, erstmal muss der "grund-robo" gebaut werden.
wenn wer erfahrung mit NN zur bilderkennung hat, bitte mal seine erfahrung kundtun =P~
gruß mille
@Millemim: Also mit den Neuronen laß ich euch allein.
Zu der Stereo-Sache:
Ich hatte, wie gesagt, durch Spiegel zwei Bilder in einem Bild.
Mit zwei Pointer bin ich nun parallel durch EINE mittlere y-Zeile durchgefahren und hab den linken x-Positionen aus RBG eine Helligkeit zugeordnet. Ergab sich am rechten Pointer der gleiche Wert, erhöhte ich das offset des rechten Pointers, bis gleiche Werte erkennbar waren.
Bei kontrastreichen Kanten ging das recht gut, aus dem Offset konnte man die Entfernung errechnen. (Da der Augenabstand im Verhältnis zum Objektabstand sehr klein war, konnte ich beim Rechnen sin = tg = x gelten lassen, diese Rechnung war also nicht so schlimm für den Computer).
Gab es kein erkennbares Offset, änderte ich beim nächsten Durchlauf die Position der y-Zeile
Wie schon gesagt, die Bastlerei beginnt beim Detail: Die reine Helligkeit reicht natürlich nicht, das ist eine Beschäftigung für den Herrn Fourier und das Bildrauschen ist ausgesprochen lästig.
Die Absicht war aber die, durch grobe Wertunteschied den "aufmerksamkeitbereich" einzuschränken und dann aber immer mehr ins Detail zu gehen (ähnlich wie beim Auge) und erst dann tatsächlich in die Objekt-Erkennung einzusteigen,
Ich wollt euch nicht langweilen, ich wollt nur darstellen, daß der Stereoaufbau auch mit einfachen Mittel immerhin verwertbare Ergebnisse liefert, die man nach Geschick verbessern kann, also ein gutes Experimentierfeld, find' ich. mfg Robert
ich tüftele derzeit an praktisch demselben problem herum, allerdings soll der Algorithmus nach einer Benutzereingabe (der user klickt mittels Maus auf einen Punkt auf einem Bildschirm) die Entfernung des Objekts ermitteln (dem user sollte das herumgefummel mit 2 Bildern erspart bleiben und der PC sollte später auch alleine in der Lage sein interessante Objekte zu lokalisieren).
Allerdings werde ich vermutlich nur 128x128 Pixel pro Frame haben (2 Gameboy-Kamera-Chips).
Das sollte allerdings ersten Versuchen zu Folge für meine anforderungen reichen. Mein unoptimierter Algorithmusprototyp läuft jetzt schon mal recht flott und spuckt schonmal ganz akzeptable Vorschläge aus bezüglich welche Punkte er nehmen soll.
Meines erachtens Nach ist die Differenz zwischen zwei nebeneinanderliegenden Pixeln ein guter Ausgangspunkt.
>> wenn wer erfahrung mit NN zur bilderkennung hat, bitte mal seine erfahrung kundtun
So einfach ist das nicht. Das erste Problem ist es die Bildpunkte der Bilder ins NN zu bekommen. Du kannst nicht einfach ein 240x120 Pixelbild direkt in ein NN einspeisen, das wären dann 28800 Input Neuronen. Dieses Netzwerk wäre enorm groß und langsam. Zudem steigt mit jedem Inputneuron die "Untrainierbarkeit" eines NN's.
Bei der Schrifterkennung benutzt man meistens eine 3'er Matrix, man berechnet die Summen über die Spalten,Zeilen und Diagonalen und kommt so auf eine Input-Neuronen-Schicht mit 120+240+240 = 600 Neuronen für ein 240*120 Bild. Das ist immer noch sehr viel und deshalb wird das Bild vorher bearbeitet. Man reduziert die Farbanzahl auf Monochrom und verkleinert das Bild sehr stark. Meistens kommt man dann auf einen Inputneuronen Layer mit ca. <= 128 Neuronen.
Normalerweise zerlegt man successive zB. ein 240x120 Bild in kleinere Blöcke. Diese Zerlegung ist rekursiv und man fängt mit 4 Teilbilder an. Zu jedem Teilbild wird eine "Summe" gebildet und so die beiden Bilder verglichen oder eben nach Kanten gesucht. Das erfolgversprechenste dürfte die Suche nach Kanten sein, man vektorisiert also die Bilder. Übrig bleiben dann nur wenige und eindeutige Vektoren die dann zwischen den beiden vektorisierten Bildern verglichen werden können.
Falls man aber schon so weit die Bilder verarbeitet hat lohnt sich ein NN garnicht mehr. Ein normaler mathematischer Algorithmus würde jedes Netzwerk in der Performance und auch Genauigkeit übertreffen.
Das NN könnte aber zur frühzeitigen Fehlererkennung herangezogen werden. D.h. die normalen math. Algorithmen die aus den Vektroren die Entfernung ermitteln sollen sind sehr schwer fehlertolerant zu bekommen. Wenn sie also auf nicht auswertbare Bilder treffen funktionieren sie überhaupt nicht und verbrauchen zuviel Rechenpower um diese Fehler zu erkennen. Das NN kann durch das Training solche Aufgaben viel schneller und mit besseren Wahrscheinlichkeiten erkennen.
Gruß Hagen
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.