Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Bildverarbeitung - welche Algorithmen um Markierung zu verfolgen

Diskussion: Bildverarbeitung - welche Algorithmen um Markierung zu verfolgen im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hi, für ein Projekt werde ich mich in das Thema Bildverarbeitung einarbeiten müssen. Der erste Schritt wird sein, mit ...

Antwort
Alt 16.03.09, 23:34   #1 (permalink)
Moderator
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 51
Standard Bildverarbeitung - welche Algorithmen um Markierung zu verfolgen

Anzeige

Hi,

für ein Projekt werde ich mich in das Thema Bildverarbeitung einarbeiten müssen. Der erste Schritt wird sein, mit einem Roboter, welcher mit einer Cam ausgestattet ist, einer Markierungslinie am Boden zu folgen. Also im Prinzip wird mit Klebeband eine Strecke am Boden markiert und der Roboter soll dieser Linie folgen. Die Verarbeitung und auch Steuerung wird dabei auf einem Rechner gemacht und nicht auf dem Roboter. Das ist ja doch auch wegen der Rechenleistung und dem Speicher ein wichtiges Kriterium.

Die Cam gibt uns Farbbilder, für den Fall, dass es verschiedene Algorithmen für Schwarz-Weiß- und Farbbilder gibt.

Da das Thema Bildverarbeitung doch sehr komplex ist, würde ich auf diesem Weg mal erstmal einige (für diese Aufgabenstellung) sinnvolle Algorithmen sammeln, damit ich mich dann näher mit diesen beschäftigen kann.
Ein erster, den ich gefunden habe, ist die Hough-Transformation, allerdings bin ich mir noch nicht so ganz sicher, ob dies für diesen speziellen Fall überhaupt sinnvoll ist, da dieses Verfahren probleme mit Linien hat, die parallel zu y-Achse laufen, was hier ja der Fall wäre

lightsaver ist offline   Mit Zitat antworten
Alt 17.03.09, 07:18   #2 (permalink)
 
Registriert seit: 30.03.07
ByteSurfer Leistung: Facit NTK
Likes: 17
Standard

Moin,
1. was für ein Roboter ist das denn?
2. Ein 6-Achser oder ein einfacher Scara.
3. Welches Camerasystem nutzt Ihr?
4. Wertet Ihr die Bilder alleine aus, C# oder VB etc., Oder liefert die Camera die komplettinformationen?

Wenn ich das selber handeln müsste, wüsste jetzt aber auch nicht warum das so ist, auch wenn das Argument die Rechenleistung ist, da die Roboter sowas eigentlich leisten können "siehe auch Schweiztechnik bei den Autohersteller"

Also ich würde wie folgt das Versuchen zu lösen.
Aus dem Bild was die Camera liefert musst du ein Koordinatensystem erstellen bzw.
wissen welcher Pixelbereich welche Position hat. Kommt natürlich darauf an wie genau du fahren musst. Die Abstände in den du das Bild machst bzw. auswertets würde ich in abhängigkeit von der Roboter Geschwindigkeit machen.
Beim Scara bleibt denke ich die Z-Achse ja immer auf einen festen wert bzw 3-4mm über den Klebestreifen. X-Achse | Y-Achse kannst du dann selbts definieren z.B. oben links X null | Y null, oder wo es für dich am besten ist.
Das World Koordinatensystem hilft dir hier glaube ich nicht wirklich weiter.
Um Störungen oder falsche Daten der Kamera zu vermeiden solltest Du viele Farbinformationen vermeiden. heller untergrund (vielleicht weiß und der Klebestreifen).
Jetzt das Bitmap auswerten und prüfen wo sich der Streifen befindet. Zeile für Zeile auswerten und dann den Roboter die Koordinaten übergeben.
Wenn du eine gute ausleuchtung hast kannst du ja prüfen ist die Farbe dunkler als wert A und ist die breite der Farbe größer als B. Ich denke wenn Du mehrere farben hast wird es schwer die information aus dem Bild zu holen!!??

Das Auswerten kannst du auch auf den Bereich beschränken wo ein Muster entdeckt wurde +/- 100 Pixel oder so.
Oder arbeitest hier ein paar schritte vorraus und legst die daten in einem array ab...

Hoffe das hilft Dir etwas weiter...
Halt mich mal hier weiter auf dem laufenden, da ich aus dem Bereich kommen (Automationstechnik) würde mich das sehr interressieren!!!

MFG

ByteSurfer
ByteSurfer ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 17.03.09, 11:15   #3 (permalink)
Moderator
Themenstarter
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 51
Standard

Hi,

welcher Roboter es ist, sollte erstmal nicht ganz so wichtig sein, da alle Arbeiten, die in den Bereich Bildverarbeitung gehen, auf einem externen Rechner gemacht werden müssen. Es ist aber eher ein Spielzeug und nichts in Richtung Industrieroboter. Es gibt derzeit keine Möglichkeit, direkt auf dem Gerät zu programmieren. Gesteuert wird das Gerät sowieso über einen externen Rechner (über http), so dass schon einige grundlegende Teile der Steuerung in .Net umgesetzt sind.

Was für eine Cam das genau ist, kann ich nicht sagen, es soll wohl aber etwas einfaches sein, wie man es in Handys findet. Aber auch das sollte erstmal nicht ganz so wichtig sein, da ich im Programm bereits ein Bild von der Cam als JPG (BMP wird wohl auch möglich sein) bekommen kann, mit dem ich dann weiterarbeiten will.

Was meinst du mit
Zitat:
4. Wertet Ihr die Bilder alleine aus, C# oder VB etc., Oder liefert die Camera die komplettinformationen?
?
Also wir bekommen hier erstmal nur das Bild, alles andere wird dann in .Net umgesetzt, wobei die Sprache letztendlich auch wieder relativ egal sein müsste, da sich entsprechende Algorithmen ja in verschiedenen Sprachen umsetzen lassen.

Die Idee mit dem Koordinatensystem finde ich schonmal nicht schlecht. Wenn ich dich richtig verstehe, wird es aber auf eine Auswertung in schwarz-weiß hinauslaufen.
lightsaver ist offline   Mit Zitat antworten
Alt 17.03.09, 12:11   #4 (permalink)
 
Registriert seit: 21.08.03
nebula Leistung: Facit NTK
Likes: 0
Standard

Wie siehts denn mit dem Kontrastverhältniss zwischen Boden und Klebeband aus ?
Ein schwarz-weisz Bild macht das ganze letztendlich natürlich am leichtestn.
Mein Vorschlag wäre mit einer Scanline das ganze Bild durchlaufen und Anfangs- sowie Endpunkt der Linie rausfinden. Als nächstes den Winkel der Linie zu einer Vertikalen berechnen und fertig.
Als Grafikbibliothek würde ich dir Boost empfehlen.
LG
nebula ist offline   Mit Zitat antworten
Alt 17.03.09, 12:26   #5 (permalink)
Moderator
Themenstarter
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 51
Standard

Da es derzeit noch unter "Laborbedingungen" laufen wird, können die Kontraste ideal gewählt werden. An komplizierteren Bedingungen wird erst gearbeitet, wenn es unter idealen schonmal funktioniert.

Die Bibliothek werde ich mir mal ansehen, wobei ich bei der Aktion natürlich auch was lernen möchte und somit schon auch das ein oder andere Verfahren verstehen möchte.
lightsaver ist offline   Mit Zitat antworten
Alt 17.03.09, 14:18   #6 (permalink)
 
Benutzerbild von _fux_
 
Registriert seit: 13.09.05
_fux_ Leistung: Abacus
Likes: 5
Standard

was theoretisches dazu:
in der Bildverarbeitung kann man doch "einfach" das Bild als matrix darstellen, d.h. jedes Pixel ist ein matrixpunkt... je nach auflösung is das natürlich ne große matrix... aber die kann man dann splitten um schnelle algorithmen zu finden.
so kann man nun die farbinformationen rauslesen und die bestimmte farbe erkennen lassen.

ein kumpel aus dem höheren semester, die machen das gerade... um ein Bild zu invertieren, wird das bild als matrix dargestellt und davon wird dann einfach die transponierte matrix berechnet -> zack, bild invertiert.
genauso kann man dann auch RGB und son kram aulesen und analysieren.

da ich das noch nicht selber hatte, kann ich nur das wiedergeben was ich gehört habe, ich hoffe es hat irgendwas gebracht
__________________
und?
_fux_ ist offline   Mit Zitat antworten
Alt 17.03.09, 14:34   #7 (permalink)
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard

Vielleicht hilft Dir der folgende Link weiter: Line Detection Using a Digital Camera
__________________
Mfg Basic Avid
- Use it or be used! -
BasicAvid ist offline   Mit Zitat antworten
Alt 17.03.09, 21:59   #8 (permalink)
 
Registriert seit: 12.01.09
lone.wolf Leistung: Z3
lone.wolf eine Nachricht über AIM schicken
Likes: 1
Standard

Ich würde wie folgt vorgehen:
- Kanten im Bild rausfiltern (Sobel Operator)
- Schwarz / Weiß -> je nach MittelWert aller RGB Werte des Bildes
- einfache Linienverfolgung ( Schwarzen Punkt (unten im Bild) finden, anschließend 10 Pixel drüber den nächsten schwarzen Punkt suchen und die Steigung kx ausrechnen; zum smoothen einfach n*10 nach oben gehen und durch Mittelwert durchdividieren ..(blöd ausgedrückt) )

MfG
lone.wolf ist offline   Mit Zitat antworten
Alt 18.03.09, 07:08   #9 (permalink)
 
Registriert seit: 30.03.07
ByteSurfer Leistung: Facit NTK
Likes: 17
Standard

Zitat:
Zitat:
Zitat:
4. Wertet Ihr die Bilder alleine aus, C# oder VB etc., Oder liefert die Camera die komplettinformationen?
Einfach ob Dir die Kamera die Bildinformationen liefert, oder ob du ein photografiertes bild bekommst.
Hast Du ja schon beantwortet. Darauf bezogen sich dann auch die Programmsprachen...

Vorteil von Schwarz weiss ist eine klarere abgrenzung, und somit weniger Fehlverhalten. Sollte aber mit guten Rahmenbedingungen auch gut mit Farbauswertung funktionieren.

Also wenn du optimale Lichtverhältnisse hast:
1. sehr gute Ausleuchtung
2. klare hell dunkel bereiche (Kontrastverhältnisse)
kannst du den klebestreifen schon mal gut auslesen.

JPG würde ich nicht nehmen, da BMP Dir ("korrigiere mich jemand wenn ich falsch liege") die Bildinformationen genauer und detailieter liefert.

Ansonsten hier ein, zwei Stichworte :
Grayscale, Contrast Stretching unter google mal eingeben...
Hier könnt Ihr ein Farbbild in schwarz weis wandeln und den Contrast hervorheben...

Einen Winkel oder sowas brauchst du in meinen Augen nicht ausrechnen, da Du mit Koordinaten arbeitest und der roboter selbst den direkten Weg zur nächsten Position fährt.

Wo ich nur drüber nachdenke ist das Bildasuwerten ansich!?

Wertest Du immer
Bsp: ein Din4 Photo aus, läst den Roboter fahren, und dann das nächste A4 Photo usw. usw.
Oder wertest du immer die Erste Pixel Reihe vom Bild in Vertikalrichtung aus und wiederholst das ganze nach jeder Bewegung des Roboters!?

Ich selber würde mir einen Bereich festlegen den ich überwache.
z.B.Beginn des Suchmusters, und dann alle 3 mm oder so, da ich denke keine Genauigkeit von 1/100 oder 1/10 benötigt ist.
Um den ganzen mehr fluss zu geben und den Roboter Bremsfrei laufen lassen zu können merkst du dir vielleicht drei 4 positionen mehr.
z.B. immer die Mitte des Klebestreifen (9 Pixel breit = Pixel 5 die mitte) um auch Bahnen fahren zu können.

Oder Der Roboter fährt immer von beginn nach links und auf einmal kommt das Suchmuster (Klebestreifen im Bild) und nach finden dieser fährt der Robi in Position.
Kann dan auch ein Bereich in der Mitte des Bildes sein in Vertikalrichtung...

MFG

P.S. Hoffe ich konnte mich einigermaßen verständlich ausdrücken, sonst frag nochmal nach... ;-D

P.P.S.anmerkung von lone.wolf kannst du mir einfliesen lassen, nur ohne Winkel
ByteSurfer ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Bildverarbeitung - welche Algorithmen um Markierung zu verfolgen
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Bildverarbeitung - Kantendetektion [gelöst] benediktibk Code Kitchen 4 09.03.09 20:56
Algorithmen cr4ven Code Kitchen 4 28.10.08 20:35
Algorithmen für die SAM subzeroo Cryptography & Encryption 20 24.10.05 18:17
Net Send Ziele verfolgen powvorti (In)security allgemein 11 12.03.04 19:11
IP zurrück verfolgen !?! kklaus1 (In)security allgemein 17 19.08.03 15:50


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61