PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kein Roboter aber doch irgendwie artverwandt ( hoffe ich )



Nebirosh
02.05.2005, 12:55
Grundlegend geht es bei diesem Projekt um high speed Bildsequenzen ( alle 5 ms ein Bild ).

Das gesammte Projekt ist im medizinisch - technischen Bereich angesiedlt hat aber viel mit Objekterkennung und Auswertung von 3D Koordinaten auf einem Linuxsystem zu tun.

Leider haben weder mein " Auftraggeber " noch ich das Geld uns die entsprechenden CMOS BIldsensoren als Massenwahre in den Keller zu legen, daher der Gedanke die Hauptoberflächen Algorithmen etc zunächst mit Hilfe von Webcams zu erstellen und zu testen.

Da die "erkennenden Algorithmen " auf maschinenbasis implementiert sind bleiben leider nur wenige Bildformate übrig die im sog. lossless Format vorliegen und einigermaßen dokumentiert sind. Ich habe mich zunächst auf das .PNG Format eingeschossen.
Leider sind alle angebotenen libs oder sourcecodes für die Darstellung auf dem Monitor ausgelegt, lassen sich auch nicht derart umschreiben, so das eine Ausgabe in einer Datei erfolgt.
Die Grundstrukturen einer PNG Datei sowie die Verwendung findenden Kompriemierungsalgorithmen ( Huffman Code etc. ) sind mir hinlänglich bekannt.

Mein derzeit größtes Problem besteht in der Wiederherstellung des Binärbaumes um dann bitweise über das von Huffman beschriebene Verfahren die einzelnen Werte darstellen zu können.

Wenn jemand hierzu Informationen oder bereits Kenntnisse hat, bitte lasst mich nicht dumm sterben.

Nun aber noch etwas zur Objekterkennung. Da die Kameras fest montiert sind wird der Hintergrund auf jedem Bild der Sequenz annähernd gleich sein ( Tests haben ergeben das bei einem Graustufenbild mit 255 Abstufungen die Abweichung bei gleicher Beleuchtung maximal 3 beträgt ) Der erste Schritt besteht nun darin zwei aufeinanderfolgende Bilder in zwei Puffer zu laden. Der Puffer ist nichts anderes als ein zweidimensionales Array in der Form [640]*[480] bei einem Bild mit den Dimensionen 640*480. Da sich beide Werte schlecht bis garnicht durch 3 teilen lassen wird eine 4*4 Matrix beutzt und die Pixelwerte hineingeschrieben. Somit besteht jedes Bild aus 160 * 120, 4*4 Feldern. ( die Gründe warum das Bild nochmal in die 4*4 Felder zerlegt wird führe ich später aus ) Nun wird aus jedem 4*4 Feld der Mittelwert gebildet und in einem 160*120 großen Feld hinterlegt. Dies geschieht analog zum nachfolgen Bild der Sequenz. Ein einfacher Verglech ( hierbei wird natürlich die Abweichung berücksichtigt ) ob es sich um ein statisches oder dynamisches Feld handelt folgt. Ist der Inhalt statisch werden die Werte auf 0 gesetzt, andernfalls behält das Feld seine ursprünglichen Werte. Das grobe Umfeld um das bewegte Objekt wird somit schwarz. Sollte sich dies mehr als 3 mal in drei aufeinanderfolgenden Bildern wiederholen wird in den nächsten 3 Bildern sofort dieser Bereich auf 0 gesetzt, und erst beim 4 und 5 Bild erneut überprüft ( daher der Umweg über die 4*4 Matrix, da eine Sequenz aus bis zu 60000 einzelnen Bildern bestehen kann ). Die Felder != 0 werden in einem weiteren Schritt genauer geprüft in dem aus der 4*4 Matrix 4 2*2 Felder erstellt werden die nach dem gleichen Prinzip geprüft werden. Durch diese sozusagen iterative Annäherung wird, da nicht jedes Feld in jedem Bild grundsätzlich geprüft werden muss der doch erhebliche Aufwand an Rechenleistung doch um ein vielfaches reduziert.

Theoretisch ließe sich dieses Verfahren auch auf Microprozessorbasis aufbauen ( allerdings dürfte bei einer Kameraleistung von 200 fps die Latenz mit der das System reagieren kann erheblich sein )

Hessibaby
03.05.2005, 10:37
Hallo Nebirosh,
das von Dir beschriebene Verfahren kommt mir sehr bekannt vor. Bei den Pick- and Place Leiterplattenbestückungsautomaten wird ähnlich gearbeitet. Als Hardware wird üblicherweise eine Panasonic High-Speed-Kamera eingesetzt welche an eine Matrox-Karte angeschlossen ist.
Auf www.matrox.com kannst Du dir viele wertvolle Informationen dazu holen.

Gruß Hartmut

Nebirosh
03.05.2005, 11:11
Die Page kenne ich schon aber trotzdem vielen dank für den Link .
Das Problem mit den Bilddateien hat sich derweil erübrigt. Ich greife vorerst auf .bmp Dateien zurück da das ganze noch nicht zeitkritisch ist.
Aber um auf die industrielle Anwendung zurückzukommen, die beschriebenen Kameratypen sind allesamt sehr teuer, was eine Anwendung für kleinere medezinisch technische Firmen nicht unbedingt verinfacht. Mitlerweile habe ich aber einen Hersteller gefunden der high speed CMOS Bildsensoren zu einem relativ kleinen Preis verkauft. Für einen 640*480 Pixel auflösenden Chip der obendrein bei Vollauflösung 200 fps liefer etwas unter 200 Euro. Die Perepherie kann sehr einfach gestaltet werden. Für Laufanalysen oder allgemeiner für menschliche Bewegungsabläufe ist ein Zeitinterval <= 5 ms also durchaus ausreichend. Ich hoffe ein System erstellen zu können das bei 4 Kameras plus Software ( auf einem relativ modernen PC mit Linux Betriebssystem ) für unter 3000 Euro zu haben ist.

Hessibaby
03.05.2005, 11:20
Hi Nebirosh,

wer liefert das Teil zu dem Preis ?

Gruß Hartmut

Nebirosh
04.05.2005, 00:56
Nur damit es hinterher keine Missverständnisse gibt, das ist nur der CMOS Bildsensor, damit alleine kann man wenig anfangen, das ist keine komplette Kamera oder ähnliches. Hergestellt werden die Chips von "Micron" allerdings als Privatmann kann man dort nichts erwerben. Mitte diesen Jahres soll wohl ein neuer Chip auf den Markt kommen mit einer Auflösung von 1280*1024. Beide sowohl der neue wie auch der alte arbeiten mit 66Mhz Masterclock ( also da muss schon wenn es komplexere Steuerungen sein müssen ein hochgezüchteter Microprozessor herhalten ).

http://www.micron.com/products/imaging/products/megapixel.html

Der highspeedsensor ist ganz unten auf der page. Allerdings habe ich für den noch keinen Preis erhalten. Aber das Datenblatt habe ich vorliegen.