Hallo, ich bearbeite zu Hause zur Zeit ein Projekt mit dem Thema Bildverarbeitung. Mein Ziel ist es mit einer Kamera, ein Objekt (in meinem Fall ein Ball) mit einem Roboter zu verfolgen. Ich bin jetzt so weit, dass mir die Kamera ein Schwarz-Weiß Bild liefert, wo der Ball gut zu erkennen ist. So jetzt zu meinem Problem: Wie bekomm ich die Koordinaten vom Mittelpunkt meines Balls? Irgendwie lässt da meine Kreativität nach. Ich benutze C# mit Aforge als zusätzlicher Bildverarbeitungsbibliothek. Leider habe ich auch keine Bildverarbeitungsvorlesung genossen. Im Internet finde ich auch nichts, was mein Problem beheben würde. Mit freundlichen Grüßen
:
Verschoben durch Admin
Reicht da keine einfache Mittelwertbildung? Such doch das Bild nach dem minimalen und maximalen Koordinaten in x- und y-Richtung ab, anschließend den Mittelwert bilden:
Ansonsten wirst Du mit schlimmeren drauf schießen müssen, wie den Hough-Algo (https://secure.wikimedia.org/wikipedia/de/wiki/Hough-Transformation). Vielleicht hilft auch das Paper weiter: http://yoda.fim.uni-passau.de/lehrstuehle/donner/lehrveranstaltungen/seminarWS05/nitschke.pdf Ohne Garantie, ich hab auch keine Vorlesung in Sachen Bild-Algorithmen besucht. Grüße
Danke für die Schnelle Antwort. Die Mittelwertbildung geht nicht so einfach, da der Ball ja nicht unbedingt in der Bildmitte sein soll. Außerdem hab ich nicht nur den Ball, sondern auch andere Objekte im Bild enthalten. Was mir jetzt fehlt ist ein Algorithmus mit dem ich die Ballmitte finde und diese Ballmittel will ich dann verfolgen. Aber das Paper schaut interessant aus. Vielen Dank schonmal.
Da hab ich mich wohl etwas missverständlich ausgedrückt. So sorry. Was ich meinte (siehe Bild im Anhang) war eigentlich folgendes: Suche für die Figur den minimale und maximale X/Y-Position durch eine Iteration über das gesamte Bild. Zugegeben, meine Formel war falsch, wenn die absolute Position im Bild gefragt ist, dann muss noch der Minimalwert aufaddiert werden. Das Prinzip zerschlägt sich aber, wenn noch andere Objekte im Bild sind, welche dann bei der Iteration fälschlicherweise für einen Kreis gehalten werden. Ich kenne die Funktionen dieser C#-Bibliothek nicht, vielleicht ist da etwas zur Objekt- und Lageerkennung enthalten. Wenn du mehrere Bilder zur Verfügung hast, kann man eventuell noch mit Bewegungserkennung ("motion estimation") etwas tricksen (https://secure.wikimedia.org/wikipedia/en/wiki/Motion_estimation). Damit könnte man versuchen herauszufinden, welcher Teil im Bild sich wohin bewegt hat. Allerdings setzt das wieder voraus, dass die Kamera still steht. Schlussendlich bleibt wohl nur noch die Möglichkeit, sich in Maschinelles Sehen ("Computer Vision") einzuarbeiten. Eine andere Möglichkeit kenne ich leider auch nicht. Grüße
die OpenCV Lib enthält Routinen um Objekte im Bild zu finden, z.B. 'FindContours'. Vorher das Bild binarisieren (über Schwellwert in Schwarz/Weiss umwandeln). Mit weiteren Routinen aus der Lib kann dann auch der Schwerpunkt von Objekten gefunden werden.
und direkt auf der AForge Homepage aforgenet.com wird man auf einen Artikel zur Formenerkennung hingewiesen: http://www.aforgenet.com/articles/shape_checker/ Die Funktion FindeDenBall(Bild) sollte damit kein Problem sein.
DINISO schrieb: > Was ich meinte (siehe Bild im Anhang) war eigentlich folgendes: Suche > für die Figur und hier liegt dein Denkfehler. Du hast die Figur noch gar nicht. Du hast nur einen Haufen Pixel Wenns nur 1 Objekt wäre und man das am Bild so herausarbeiten könnte, dass der Ball weiß und alles andere schwarz ist (oder umgekehrt), dann könnte man einfach in jeder Zeile/Spalte die Anzahl weißer/schwarzer Pixel zählen. Diese 'Kennzahlen' verändern sich 'beim Ball' signifikant.
Karl heinz Buchegger schrieb: > Wenns nur 1 Objekt wäre und man das am Bild so herausarbeiten könnte, > dass der Ball weiß und alles andere schwarz ist (oder umgekehrt), dann > könnte man einfach in jeder Zeile/Spalte die Anzahl weißer/schwarzer > Pixel zählen. Diese 'Kennzahlen' verändern sich 'beim Ball' signifikant. Hä? Das hat der Thread-Ersteller doch geschrieben, dass er das hat: > Ich bin jetzt so weit, dass mir die Kamera ein Schwarz-Weiß Bild liefert, > wo der Ball gut zu erkennen ist. Oder ist jetzt mein Hirn eingefroren? Grüße
Guck dir doch mal Touchless an! Die machen sogar Echtzeit (naja, fast) Bilderkennung! Mit freundlichen Grüßen, Valentin Buck
DINISO schrieb: > Oder ist jetzt mein Hirn eingefroren? Die Frage ist, wass er mit einem schwarz&weiß Bild meint. * es gibt nur schwarz und weiß * es gibt auch Grauwerte Ausserdem hat er späte relativiert, dass auf dem Bild nicht nur der Ball zu sehen ist.
Kann sein dass ich mich unglücklich ausgedrückt habe. Ich hab mir aus einem Webcam Bild ein Graustufenbild und durch Threshold und Kantenfiltern ein Schwarz-Weiß Bild erstellt ( keine Graustufen :)). Wenn ich jetzt z.B einen Raum betrachte, hab ich nicht nur meinen Ball sondern auch andere Objekte (Tische, Lampe, Schrank usw). Aus diesen verschiedenen Umrissen in meinem Bild will ich den Ball erkennen. Das war bzw ist ein Problem. Danke für den Tipp zu Touchless und den Artikel auf Aforge, den hab ich tatsächlich übersehen.
Versuch`doch mal einen anderen Ansatz: Was geben denn die drei Farbbilder her? Wenn du einen Ball in einer Farbe nimmst, die in der gesamten Umgebung nicht nochmal vorkommt, z.B. knallneonpink, suchst du über die 3 Farbbilder nach genau dieser Kombination. Wenn du den Ball gefunden hast, kann der Roboter ihn durch den Raum kicken und mit Differenzbildern verfolgen. Der Roboter muß natürlich in diesem Moment stehen bleiben. Also kicken - gucken - hinterherlaufen. Und wenn der Ball still liegenbleibt, beginnt das Ganze wieder von vorne. Das schafft auch ein alter P4 in Echtzeit. mfg.
Der Robo kann sich auch bewegen, wenn er sich anderweitig noch orientiert und die Winkeländerung zum Ball verfolgt. Umgekehrt verfolgen so die Raketen ihre Zielobjekte.
Du könntest Dich auch mal bei den Teams vom Robocup umsehen. Einige veröffentlichen auch ihre Software, z.B.: http://robocup.informatik.uni-stuttgart.de/rfc/www/
willkommen in der Welt der Bildverarbeitung und dem dem Unterschied des maschinellen und menschlichen Sehens. openCV bietet sich für deine Zwecke an. Es gibt auch viele Beispiele dazu, siehe hier: http://opencv.willowgarage.com/documentation/cpp/index.html Die Schwierigkeit besteht nicht darin, die Objekte zu finden (das erledigt ein Algorithmus für dich, z.B. FindContour), sondern in der Bewertung/Klassifizierung der Objekte. Ein Ball hat bestimmte Eigenschaften, z.B. eine bestimmte Fläche, oder die Breite und Höhe sind gleich usw. Du mußt dir eine geeignete Merkmalsmatrix ausdenken.
hallo leider ist der autor des threads als gast hier drin, also ohne e-mail-adresse. ich habe ein ähnliches problem und mich würde brennend interessieren, ob er zu einer lösung gekommen ist?
Ist nicht die Antwort auf die Frage aber Kreiserkennung geht wunderbar mit Hough. Beitrag "Re: Bilderkennung mit DSP" Cheers Detlef
Bei gutem Kontrast reicht es bestimmt, das Bild als Binär-Bild umzuwandeln (Schwellwert) und dann den Flächenschwerpunkt zu berechnen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.