# Ballerkennung aus einer Bilddatei



## Gast2 (15. Feb 2011)

_*Hallo an alle!
*_
Bin zum ersten Mal auf so einer Forumseite und entschuldige mich gleich im vorhinein wenn ich Fehler mache.

In meinem Projekt geht es darum eine Torlinie eines Fussballtores zu überwachen. Wenn also ein Ball über die Torlinie geschossen oder gerollt wird, möchte ich das die Kamera ein Bild gemacht und gespeichert wird. Dieser Teil des Projekts Funktioniert schon.
Nun zu jenem Teil welcher nicht funktioniert.
Aus diesem Bild sollte das Java Programm den Baall erkennen, somit kann ich dann erkennen ob der sBall im Tor ist oder nicht ?

Gibt es dazu eine Klasse bzw. Methode um das zu realisieren ?

Hoffe auf positive und baldige Antwort 

Lg Michi


----------



## Runtime (15. Feb 2011)

Nein, weil das einfach nicht alltäglich ist. Kannst du mal ein Fotobeispiel posten?
edit: Wie funktioniert die Erkennung, dass die Kamera ein Foto schiessen muss?


----------



## XHelp (15. Feb 2011)

Hast du auf das Spiel Einfluss? Kannst ja einfach einen Ball nehmen, der eine unübliche Farbe hat
(mit unüblich meine ich eine Farbe, die nicht im Hintergrund vorkommen kann)


----------



## Gast2 (15. Feb 2011)

Im anhang befindet sich ein Bild wie es ungefähr aussehen sollte . Es ist jenes Bild welches die Kamera macht wenn ein Ball vorbeifliegt.

@Runtime: Ich hab ein Programm wo die Kamera sobald eine Bewegung vor ihr passiert ein foto macht.

@Xhelp: Ja ich hab Einfluss drauf, ich werde es auch so machen, dass der Hintergrund Weiss ist und der Ball eine gewisse Farbe.

Doch ich habe ein Problem mit Java da ich diesen Ball inn diesem Bild gerne  mit Java erkennen möchte ?
Habt Ihr eine Idee ?

Lg


----------



## XHelp (15. Feb 2011)

Lainer hat gesagt.:


> @Runtime: Ich hab ein Programm wo die Kamera sobald eine Bewegung vor ihr passiert ein foto macht.


Und was hat das mit überqueren der Torlinie zu tun? Bau dir einfach eine Lichtschranke.


----------



## Marco13 (15. Feb 2011)

Wenn der Ball eine bestimmte, leicht zu erkennende Farbe hat, kann man 
- das Bild als BufferedImage laden
- in dem Bild mit image.getRGB(x,y) die Farben der einzelnen Pixel auslesen
- Sich alle Pixel merken, die die Farbe des Balles haben
- Von diesen Pixeln den Mittelpunkt bestimmen.


----------



## Runtime (15. Feb 2011)

Jo, hab ich. Wenn der Hintergrund sich nicht verändert, dann kannst du ein Bild schiessen ohne Ball und dann wenn du ein Bild mit Ball hast, kannst du so den Ball hinauslösen (siehe im Bild).
Aus dem ersten Bild kannst du dann noch die schwarze Torlinie heraussuchen und überprüfen, ob und wie stark sich Ball überschneidet. Falls nicht, prüfst du noch, ob der Ball links oder rechts ist. Mit Java geht das recht langsam, ist aber mit JOGL/JOCL möglich.
Edit: Ein wenig zu spät, hat aber trotzdem noch nützliches dabei.
@XHelp
Wenn es eine Lichtschranke ist, kann man eine 2. hinmontieren, dann muss man nur noch prüfen, welche Lichtschranke zuletzt berührt wurde


----------



## Runtime (15. Feb 2011)

Hab nicht gewusst, wie man einen 2. Anhang hinzufügt,  da ist noch das Bild für die Lichtschranken.
Edit: Im Bild sollte es nicht Ballbreite, sondern Balldurchmesser heissen.


----------



## Gast2 (15. Feb 2011)

XHelp hat gesagt.:


> Und was hat das mit überqueren der Torlinie zu tun? Bau dir einfach eine Lichtschranke.



Der Teil mit der Lichtschranke ist im Gesammmtprojekt inbehalten, doch i habe eine vertiefende Aufgabenstellung und diese muss ich mit Kamera bewältigen. Die Torlinie sollte die Torlinie in einem Tischfussballtisch darstellen.

Der Hintergrund bleibt immer gleich und ja so hab ich mir das vorgestellt mit den Bildern.
Funktioniert es mit Java langsam oder garnicht ?
Hast du Java - COde für mich ?

@Marco : ich kann mir das schon sehr gut vorstellen aber habe leider keinen plan wie ich es in Java umsetzten könnte 

Lg


----------



## XHelp (15. Feb 2011)

Naja, aber wieviele Bilder schießt denn deine Kamera? Denn so ein Kickerball ist nicht unbedingt langsam, du musst ja dann natürlich auch den richtigen Zeitpunkt abwarten, wenn sich der Ball bereits HINTER der Linie befindet.
Außerdem:


> wo die Kamera sobald eine Bewegung vor ihr passiert ein foto macht


Vor dem Tor sollte sich öfters was bewegen, nämlich der Torwart.


----------



## Runtime (15. Feb 2011)

Mit meiner Methode kann man überprüfen, ob der Torwart oder der Ball auf dem Bild ist, aber wenn beide darauf sind wirds schwierig...


----------



## Gast2 (15. Feb 2011)

XHelp hat gesagt.:


> Naja, aber wieviele Bilder schießt denn deine Kamera? Denn so ein Kickerball ist nicht unbedingt langsam, du musst ja dann natürlich auch den richtigen Zeitpunkt abwarten, wenn sich der Ball bereits HINTER der Linie befindet.
> Außerdem:
> 
> Vor dem Tor sollte sich öfters was bewegen, nämlich der Torwart.



Die Kamera zeigt nur auf die Linie und sieht den Torwart nicht.
Sobald eine Bewegung ( sprich der Ball fliegt vorbei) passiert wird von der KAmera ein Foto gemacht. 

Derzeitiger Stand des Java Programms:
Ich lese die gespeicherten Bilder ein und Zeige sie in einem Panel an. Das geht bereits. Doch ich kann den Ball nicht erkennen also ich weiss nicht wie man soetwas macht ?

Lg


----------



## Gast2 (15. Feb 2011)

Runtime hat gesagt.:


> Mit meiner Methode kann man überprüfen, ob der Torwart oder der Ball auf dem Bild ist, aber wenn beide darauf sind wirds schwierig...



Es ist nur der Ball zu sehen  Kannst du mir diese Methode geben ?


----------



## Marco13 (15. Feb 2011)

"Methode" heißt hier wohl "Verfahren" und nicht "Codestück"...


----------



## Gast2 (15. Feb 2011)

Marco13 hat gesagt.:


> "Methode" heißt hier wohl "Verfahren" und nicht "Codestück"...



Ja im Grunde brauch ich ein großes Codestück


----------



## Runtime (15. Feb 2011)

Hilfe beim schreiben bekommst du gratis, aber Komplettlösungen kosten.


----------



## Gast2 (15. Feb 2011)

Runtime hat gesagt.:


> Hilfe beim schreiben bekommst du gratis, aber Komplettlösungen kosten.



Das ist mir schon klar das du nicht das ganze programm schreiben kannst, jedoch ich brauch einen Ansatz und eine Idee wie ich es umsetzen könnte , sprich Java - Ansätze ?


----------



## Runtime (15. Feb 2011)

Wie lange programmierst du schon Java? Wenn du nicht min 1.5 - 2 Jahre programmiert hast, dann schaffst du das nicht.


----------



## Tomate_Salat (15. Feb 2011)

XHelp hat gesagt.:


> Naja, aber wieviele Bilder schießt denn deine Kamera? Denn so ein Kickerball ist nicht unbedingt langsam



mach dir erstmal darüber Gedanken. Wenn das wirklich sich auf einen Kickertisch bezieht, wäre ich mir nicht sicher, ob deine Kamera es schafft, das komplett zu überwachen. Und falls doch, wird er u.U. sehr verschwommen sein.

Ich würde die Bilder auf Änderungen vergleichen (vor/nachher) das ganze in Prozent umwandeln und ab einem bestimmten Prozentsatz sagen: jz kam ein Ball vorbei.

Und wäre es nicht einfacher, die Kamera den Bereich *hinter* der linie prüfen zu lassen?


----------



## XHelp (15. Feb 2011)

Auch ohne großartige Programmiererfahrung kann man es schaffen, aber nicht ohne Eigeninitiative.

Dir wurde ja schon der Ansatz über BufferedImage genannt. Versuch ihn umzusetzen.


----------



## Gast2 (15. Feb 2011)

Tomate_Salat hat gesagt.:


> mach dir erstmal darüber Gedanken. Wenn das wirklich sich auf einen Kickertisch bezieht, wäre ich mir nicht sicher, ob deine Kamera es schafft, das komplett zu überwachen. Und falls doch, wird er u.U. sehr verschwommen sein.
> 
> Ich würde die Bilder auf Änderungen vergleichen (vor/nachher) das ganze in Prozent umwandeln und ab einem bestimmten Prozentsatz sagen: jz kam ein Ball vorbei.
> 
> Und wäre es nicht einfacher, die Kamera den Bereich *hinter* der linie prüfen zu lassen?



Die Kamera bezieht sich auf den Torraum hinter der Torlinie. 
Die Änderung der Bilder ist auch eine gute Idee, wie könnte man mit dem Beginnen? also Code ?



> Wie lange programmierst du schon Java? Wenn du nicht min 1.5 - 2 Jahre programmiert hast, dann schaffst du das nicht.



Ich habe in der Schule schon 2 Jahre Informatikunterricht gehabt jedoch haben wir so sochen nie durchgenommen ?


----------



## XHelp (15. Feb 2011)

Lainer hat gesagt.:


> Ich habe in der Schule schon 2 Jahre Informatikunterricht gehabt jedoch haben wir so sochen nie durchgenommen ?



So Sachen wie mitdenken, googlen und api lesen? :bahnhof:


----------



## Tomate_Salat (15. Feb 2011)

Lainer hat gesagt.:


> Die Kamera bezieht sich auf den Torraum hinter der Torlinie.
> Die Änderung der Bilder ist auch eine gute Idee, wie könnte man mit dem Beginnen? also Code ?



Codemäßig habe ich keinen fertigen Ansatz ... ich habe nichtmal einen Ansatz. Nimm ein ausgangs BufferedImage und vergleiche es mit dem Aufgenommen. Du kannst dir ein Raster ausgeben lassen, indem du alle Pixel einzeln checken kannst. Diese setzt du in relation und hast die Änderung.
Ich würde vllt schwarz-weis-bilder machen, da in (meiner) Therorie es am einfachsten ist, notfalls Helligkeits-differenzen zu erkennen.


----------



## Runtime (15. Feb 2011)

Ok, hab noch meine Meinung geändert, Java SE alleine sollte schon schnell genug sein, aus mir haben die armseligen Grafikmöglichkeiten von Java gesprochen.


----------



## Gast2 (15. Feb 2011)

Tomate_Salat hat gesagt.:


> Codemäßig habe ich keinen fertigen Ansatz ... ich habe nichtmal einen Ansatz. Nimm ein ausgangs BufferedImage und vergleiche es mit dem Aufgenommen. Du kannst dir ein Raster ausgeben lassen, indem du alle Pixel einzeln checken kannst. Diese setzt du in relation und hast die Änderung.
> Ich würde vllt schwarz-weis-bilder machen, da in (meiner) Therorie es am einfachsten ist, notfalls Helligkeits-differenzen zu erkennen.



Ich danke dir für deine Ideen und probier es umzusetzten!



> So Sachen wie mitdenken, googlen und api lesen?



Auch dir möchte ich für deine Einfälle danken.


----------

