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
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:
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
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.
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?