Input/Output Bild in Java einlesen und analysieren!

AintLarry

Mitglied
Hey,
es ist ja sicherlich möglich, ein Bild in ein JavaProgramm einzulesen (Input)
Aber wie kann ich nun dieses Bild Analysieren?
es soll nach einem weißen kleinen Kreis inerhalb eines schwarzen Kreises gesucht werden, und dessen Position inerhalb des Kreises bestimmt werden...
Also den Input bekomme ich hin, nur vom analysieren der Datei habe ich keine Ahnung, und finde leider auch nichts im Internet dazu....

Könntet ihr mir einen anstoß finden wie das geht?

LG Henrik
 

AintLarry

Mitglied
Der Analysevorgang muss so genau wie möglich sein, da ich ein Programm plane,welches abfotografierte Scheiben von Sportschützen analysiert....
Da es bei meinem Programm wichtig ist, dass man die Scheibe nicht scannen muss oder irgendwo einlesen, sondern dass ein foto reicht... ist der Radius nicht bekannt, da das foto ja von dichter dran oder weiter weg gemacht werden kann
 
N

New_Escaflowne

Gast
Hab mir den verlinkten Thread nicht durchgelesen, mir ist aber noch folgender Algorithmus eingefallen:

Annahme:
Dein Bild besteht nur aus den Farben schwarz und weiß (falls es außerhalb des schwarzen Kreises noch andere Farben gibt, brauchst du noch einen zusätzlichen Zustand) und du weißt, dass innerhalb des schwarzen Kreises nur ein weißer Kreis sein kann und sonst nichts.
Dein Foto müsste vorher also am besten mit einem schwarz/weiß-Filter bearbeitet werden oder weiß und schwarz eben als Bandbreite definiert werden.

Vorgehen:
Du hast eine leere Liste (LinkedList benutzen)
Du gehst alle Pixel des Bildes durch (am besten zeilenweise) und prüfst jedes Pixel auf seine Farbe:

Am Anfang bist du im Zustand "schwarz".
Ist das Pixel schwarz gehst du einfach ein Pixel weiter.
Ist das Pixel weiß, speicherst du seine Koordinaten in der Liste, setzt deinen Zustand auf "weiß" und gehst ein Pixel weiter.

Ist jetzt ein Pixel weiß, gehst du einfach ein Pixel weiter.
Ist das Pixel schwarz, speicherst du die Koordinanten des vorherigen Pixels in der Liste, setzt den Zustand auf "schwarz" und fängst in der nächsten Zeile von vorne an.

Ist das Bild abgearbeitet, hast du in der Liste die Koordinaten aller Randpixel des weißen Kreises.
Jetzt bildest du das arithmetische Mittel aller x und y Koordinaten und hast so deinen Mittelpunkt des Kreises. Durch die Berechnung der Entfernung zwischen diesem Mittelpunkt und einem beliebigen Randpunkt aus der Liste erhälst du einen Radius. Damit ist dein Kreis beschrieben.


Erläuterungen:
In jeder Zeile gibt es ein oder zwei Randpixel des weißen Kreises, deshalb kannst du nach dem zweiten Zustandwechsel mit der nächsten Zeile weitermachen. Gibt es in einer Zeile nur einen weißen Pixel, kannst du diese Pixel trotzdem doppelt speichern; am Ergebnis sollte sich eigentlich nichts ändern und das Prüfen, ob der Pixel schon in der Liste ist, kostet zu viel Zeit.
Die Ergebnisse sind eventuell nicht ganz exakt, da du Integer-Arithmetik verwendest (da Pixelkoordinaten eben diskret sind).


Das ganze lässt sich aber zur Beschleunigung wohl auch gut Parallelisieren:

Dafür kannst du z. B. sagen, dass jeder Thread eine Zeile bearbeitet. Du machst ein Array mit 2*Thread-Anzahl einträgen (jeder Thread findet zwei weiße Pixel). Jeder Thread schreibt nur an seine eigenen Array-Positionen (z. B. 2*ThreadID und 2*ThreadID+1), damit keine Locks nötig sind.
 

AintLarry

Mitglied
Danke, das ist eine gute Idee...
Super
Dann muss ich das bild aber bearbeiten und..
1. dafür sorgen, dass es schwarz weiß ist
2. dafür sorgen, dass die beigen abgrenzungen zwischen den Ringen auch zu schwarz werden, ausserdem der weiße außenbereich einer jeden scheibe,,
 
N

New_Escaflowne

Gast
bei der abfolge weißer Hintergrund, schwarzer Kreis, weißer Kreis müsstest du nichts bearbeiten (außer der weiße Kreis kann sich nahtlos an den weißen Hintegrund anschließen), man bräcute nur einen zusätzlichen Zustand, so dass man mit z.B. mit "andere Farbe" anfängt und sobald man auf schwarz trifft auf "schwarz" umschaltet und dann weitermacht wie von mir beschrieben.

wie man ein Bild mit Java zu einem schwarz-weiß-Bild macht, ist z. B. hier beschrieben:
Java Image Processing Cookbook
(runterscrollen zu CreateBWImageNoJAIRender.java)

die beigen Bereiche könnte man auch schwärzen (falls es nicht der verlinkte Code automatisch macht), indem man zuerst das gesamte Bild einmal durchläuft und dabei beige Pixel zu schwarzen Pixeln macht.
Das ganze geht natürlich zur Lasten der Laufzeit, wenn man mehrmals über das Bild iterieren muss...

Somit wäre aber das einzige Problem die weißen Außenbereiche.
Dafür fällt mir spontan allerdings keine Lösung ein :-(

EDIT:
hab noch das hier gefunden:
[VB 2008] Software zur Auswertung von Luftpistolen-Zielscheiben - Seite 2 - Hauptforum - Visual-Basic-Forum VB-Paradise.de

Beim 30. Post ist eine Software, die wohl genau das macht, was du möchtest.
Um sie zu nutzen, musst du noch das hier runterladen und in den gleichen Ordner packen:
[Beta] FastGraphicsLib 1.0.0.5 - Libraries / Controls - Visual-Basic-Forum VB-Paradise.de

Wenn du es selbst programmieren willst, kannst du ja mal den Autor anschreiben und fragen, ob er dir den Quelltext gibt. Ist zwar Visual Basic aber die Algorithmen sollte man daraus bestimmen können.
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java- Bild gewissen Anzahl von Sekunden anzeigen?! Allgemeine Java-Themen 4
D Java Thread, Bild wird nur am Ende gezeichnet Allgemeine Java-Themen 5
R Bild flackert nach Java-Install - nur bei Laufschriften. Allgemeine Java-Themen 2
P Mit Java ein Bild bearbeiten Allgemeine Java-Themen 3
T ^Wenn Java startet wird das Bild unscharf Allgemeine Java-Themen 8
berserkerdq2 Habe ein svg bild, kann ich das zu svg koordinaten umrechnen, damit ich den Umriss zeichnen kann? Wenn ja wie? Allgemeine Java-Themen 1
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
OnDemand Prüfen ob Bild defekt ist Allgemeine Java-Themen 4
Y Bild in JPanel setzen Allgemeine Java-Themen 2
Kirby.exe Bild im Zentrum spiegeln Allgemeine Java-Themen 14
I Apache POI Bild in Word ersetzen Allgemeine Java-Themen 15
OnDemand Bild prüfen ob defekt Allgemeine Java-Themen 3
L Input/Output Kassenzettel lesen aus einem Bild Allgemeine Java-Themen 2
K Bild in einem anderen Bild suchen Allgemeine Java-Themen 12
R Compiler-Fehler Bild per E-Mail versenden Allgemeine Java-Themen 3
RalleYTN 2D-Grafik Bild mit bilinearer Interpolation skalieren Allgemeine Java-Themen 31
RalleYTN 2D-Grafik Bild ohne AWT, Swing und JavaFX rotieren Allgemeine Java-Themen 12
S Telefonbuch mit Bild Allgemeine Java-Themen 4
A 2D-Grafik Text in ein Bild schreiben Allgemeine Java-Themen 11
Tacofan GIF-Bild wird "zerstört" Allgemeine Java-Themen 3
B Bild aus Jar kann nach Export nicht mehr gefunden werden Allgemeine Java-Themen 13
T Neuen Kanal in Bild (TIFF) einfügen à la Photoshop Allgemeine Java-Themen 2
Z Zahlen aus Bild auslesen Allgemeine Java-Themen 1
X Bild -> lokale Variable -> DB -> lokale Variable Allgemeine Java-Themen 3
E 3D Objekte in 2D Bild finden Allgemeine Java-Themen 5
R HtmlUnit: Canvas als Bild speichern Allgemeine Java-Themen 0
E am häufigsten vorkommenden Farben aus einem Bild Allgemeine Java-Themen 5
S Bild in Raster Allgemeine Java-Themen 1
S Bild in Frame Allgemeine Java-Themen 0
F Punkte in einem Bild finden Allgemeine Java-Themen 10
A Bild aufteilen für getData Allgemeine Java-Themen 3
P Wie füge ich ein Bild in die GUI ein? Allgemeine Java-Themen 7
F ImageJ: Linien und Schnittpunkte in Bild Allgemeine Java-Themen 1
A mit getClassLoader Bild laden Allgemeine Java-Themen 8
E Bild abspeichern Allgemeine Java-Themen 5
D Face.com - Gesicht im Bild finden Allgemeine Java-Themen 3
N Input/Output Bild von WebSite laden? Allgemeine Java-Themen 3
S programm um bild auszulesen Allgemeine Java-Themen 2
R Bild offenbar zu groß um geladen zu werden? Allgemeine Java-Themen 12
K Quadrat in einem Bild erkennen Allgemeine Java-Themen 33
B Bild verschieben Allgemeine Java-Themen 6
T Bild in jar Paket einbinden Allgemeine Java-Themen 9
D Bild Typ bestimmen Allgemeine Java-Themen 9
0 2D-Grafik Bild einfärben Allgemeine Java-Themen 8
A Bild zusammenbauen! Allgemeine Java-Themen 5
A Bild von Webcam aufzeichnen Allgemeine Java-Themen 14
V 2D-Grafik Bild transparent machen. Allgemeine Java-Themen 4
H Bild einscannen und speichern Allgemeine Java-Themen 29
E Bild mit Listener einfügen Allgemeine Java-Themen 3
B Bild in String einbauen? Allgemeine Java-Themen 3
C Bild auf HDD speichern Allgemeine Java-Themen 4
X Bild aus dem Netz von URL runterladen und in GUI einbinden. Allgemeine Java-Themen 3
F Bild (Point) mit scrollen lassen Allgemeine Java-Themen 5
R Texterkennung - Text aus einem/r Bild/Grafik auslesen Allgemeine Java-Themen 2
B Bild- und Texterkennung Allgemeine Java-Themen 4
S Tracing eines Bildes (a.ka. Bild vektorisieren)..? Allgemeine Java-Themen 2
destroflyer *.dds-Bild anzeigen Allgemeine Java-Themen 12
F Bild aus externer Quelle laden und Skalieren? Allgemeine Java-Themen 11
X Bild im Memory zwischen speichern Allgemeine Java-Themen 11
R JAI - RGB Bild in 3 Einzelbilder zerlegen Allgemeine Java-Themen 4
P Ascii Bild aus einem input file nur kommt nix im outputfile an?????? Allgemeine Java-Themen 5
A Möglichkeiten, ein Bild schnell auszuwerten Allgemeine Java-Themen 56
K Zeichnen auf ein Bild und Scrollen Allgemeine Java-Themen 7
data89 Barcodes in Bild erkennen Allgemeine Java-Themen 17
S Bild anhand von Koordinaten einteilen Allgemeine Java-Themen 7
K Transparente Bilder in Bild positionieren und speichern. Allgemeine Java-Themen 5
W Bild Spiegeln, aber Originalbild ausblenden Allgemeine Java-Themen 2
B Bild wird nicht angezeigt. Allgemeine Java-Themen 10
Developer_X Avatar/Bild ins Profil einbinden Allgemeine Java-Themen 10
C Bild in .txt speichern und wieder als Bild speichern Allgemeine Java-Themen 2
D Bild in text tabelle umwandeln Allgemeine Java-Themen 2
G bild in package Allgemeine Java-Themen 6
MQue bild zoomen Allgemeine Java-Themen 2
R Farbe im Bild ersetzen Allgemeine Java-Themen 11
R PDF einlesen und als Bild abspeichern Allgemeine Java-Themen 8
P Bild aus dem Internet speichern Allgemeine Java-Themen 4
K Schreiben von Bildern: Bild bleibt leer Allgemeine Java-Themen 7
ARadauer Bild verkleinern. Allgemeine Java-Themen 9
F Bild (File) komplett serialisieren Allgemeine Java-Themen 9
H Wie erstelle ich ein Bild ( GeoTIFF ) ? Allgemeine Java-Themen 2
Ark Bild immer als ARGB laden Allgemeine Java-Themen 2
N Hochgeladenes Bild verkleinern und speichern Allgemeine Java-Themen 2
N Graphics2D als Bild abspeichern Allgemeine Java-Themen 6
M bild verkleinern Allgemeine Java-Themen 9
MQue svg- Bild Allgemeine Java-Themen 34
S JPEG Bild übertragen mit RMI ? Allgemeine Java-Themen 4
V Wie kann ich ein Bild in einem Zip Archiv abspeichern? Allgemeine Java-Themen 3
ToNyXXL Als Mauszeiger eigenes Bild verwenden! Allgemeine Java-Themen 3
M bild erkennung Allgemeine Java-Themen 2
S Bild durchs Label laufen Allgemeine Java-Themen 14
T Bild verliert Inhalt. Allgemeine Java-Themen 6
T Icon -> Bild einladen Allgemeine Java-Themen 18
G Bild neu zeichnen Allgemeine Java-Themen 13
S Bild Größe verändern Allgemeine Java-Themen 2
H Bild base64encode als String Allgemeine Java-Themen 9
S Bild aus Zwischenablage in Applet einfügen Allgemeine Java-Themen 2
T Ich bin unfähig ein Bild relativ zu addressieren ... Allgemeine Java-Themen 12
D JPEGEncoder -> Schwarz Weiß Bild Allgemeine Java-Themen 2
M Eingelesene Bild wird automatisch skaliert Allgemeine Java-Themen 4
R Bild wird trotz allem einfach nicht angezeigt. - AHHHHH!!!!! Allgemeine Java-Themen 30

Ähnliche Java Themen

Neue Themen


Oben