[Java] Welche ist die beste Methode aus einem Bild Regionen auslesen zu lassen?

 - (Computer, PC, Internet)

4 Antworten

Wie wärs mit nem "modifizierten Floodfill"?

  1. Dazu wird zunächst die Farbe definiert, die ersetzt werden soll (in diesem Fall Weiß).
  2. Dann gehst du das Bild Pixel für Pixel durch und überprüfst, ob der Pixel [X,Y] die in Punkt 1 erwähnte Farbe hat. Wenn nicht, dann gehts direkt mit dem nächsten Pixel weiter, sonst zu Punkt 3.
  3. Jetzt haben wir einen Pixel, der innerhalb einer Region liegt gefunden. Das "Region"-Objekt ist jetzt erstmal einfach nur eine ArrayList (o.ä.), für Punkte (Zweidimensionale Koordinatensätze). Jetzt kommt der FloodFill, nur dass nicht nur die bearbeiteten Pixel umgefärbt werden, sondern auch deren Koordinaten in die Liste eingetragen werden.
  4. Jetzt haben wir alle Punkte der Region in einer Liste. Diese kann jetzt nach belieben weiterverarbeitet werden, oder einfach nur so belassen werden...
  5. Sofern wir noch nicht den letzen Pixel erreicht haben, gehts bei Punkt 2 weiter.

Könnte z.B. so aussehen: https://pastebin.com/b50rZKXv

1
@Isendrak

Du hast Dir sogar die Mühe gemacht und es in Java mal umgesetzt. Vielen Dank für die Mühe! Das ist echt selten, dass das jemand macht...

Ich habe heute erstmal 2 Stunden alles umgefärbt, morgen werde ich wahrscheinlich nochmal 2 Stunden brauchen und dann direkt deinen Vorschlag umsetzen. Ab dann geht's sehr schnell voran.

0

Was genau willst du denn machen mit dem bild?

Soll der algorithmus auch noch andere bilder dieser art erkennen also dynamisch sein oder geht es nur um dieses bild?

Hast du einfluss darauf welche bilder du zum "einscannen" nehmen kannst?

Ich würde dafür sorgen das jede region eine idividuelle farbe bekommt. (Farbwert reicht aus. Muss für den user nicht unbedingt unterscheibar sein)

Und dann einfach die regionen darüber definieren. (Über jedes pixel laufen und dieses anhand der farbwerte einer bestimmten region zuordnen) Die zeile/Spalte des Pixels gibt dabei die koordinate an.

Wenn du es ganz dynamisch brauchst nur mit den 3 Farben dann solltest du lieber nach was fertigem im netz suchen. Strukturen auf bildern zu erkennen ist eine aufgabe die selbst für Profis ernsthaft fordernt ist. Rechner sind nämlich unglaublich schlecht darin.

Erstmal vielen Dank!

Ich möchte das Bild als Grundlage zur Erstellung von einer interaktiven Kampagnenkarte benutzen, theoretisch sollte das Bild die Grundlage für die Standardkarte sein, aber ich möchte auch die Möglichkeit bieten, dass diese einfach erweitert werden kann.

Mit den Farben ist ein guter Ansatz, es ist zwar vielleicht mühsam, aber dennoch die beste Möglichkeit.

0
@Felix193

Mein erster Gedanke waren auch die Farben. Das man die Flächen füllt und nach dem Farbcode separiert, so weiss man welcher Farbcode welche Farbe ist.
Alternativ dachte ich an einem Algorithmus, der Pixel für Pixel durchgeht, und erkennt, wann die Zone startet und Endet (horizontal) Beim Ende springt es in der 2ten Zeile usw. So kann man auch genau die Koordinaten Abspeichern - wäre mir aber bissl zu kompliziert und mühseelig und ich glaube effizient wäre das nicht.

0
@Felix193

Ja. Aber du musst es dann ja blos einmal machen.

Vorteil ist auch das z.b. man dann einfach programmieren kann das die user die das erweitern möchten bestimmten farbwerten etc. gleich namen zuordnen können und somit komplett ihre iegenen länder machen können.

Blau ist halt wasser und schwarz ist grenze.

Mit der karte wie sie jetzt ist liegt die arbeit halt im algorhytmus. Mit unterschiedlichen farben darin die karte vernünftig auszufüllen.

0
@NameVergeben26

Den gedanken hatte ich zuererst auch. Aber das wird ganz schnell sehr komplex.

Allein schon die frage wo man denn hinspringt wenn die zone zuende ist um die nächste zeile zu lesen macht das deutlich.

0

Das Bild einlesen, dann einen Algorithmus entwickeln der die weißen Flächen von den Schwarzen Linien separiert, und das wars schon. Viel mehr kann ich dir auch nicht helfen, viel vergnügen beim Programmieren :D

Vielen Dank erstmal! Hast du schon Erfahrungen damit? Weißt du, wie ich beim Algorithmus erkennen könnte, ob ich schon an eine neue Region stoße? Theoretisch müsste ich ja herausfinden, wie weit die Region von Oben nach unten geht bzw. wie weit von links nach rechts, sowie dann, dass ich jede Ecke mitnehme.

0
@Felix193

Du musst das Bild in seine Pixel zerlegen, und dann die Farbwerte der Pixel vergleichen. Das zu machen ist noch recht simpel, der ganze Rest hängt dann von deinem Algorithmus ab ;) Such am besten bei Google nach Wegfindungs-Algorithmen, die werden oft benutzt um zB Labyrinthe zu lösen (und da hat man ja auch unterschiedliche Farben wie den Hintergrund und die Wände)

0

Was möchtest Du wissen?