Ich hab hier mal eine Quick und Dirty Lösung in Mathematica geschrieben. Quick und Dirty, da die Lösung alles andere als effizient ist. Aber wenn man es bei der Punktanzahl nicht übertreibt, läuft es in wenigen Sekunden durch.
So, nun zum Code:
Für das Bild mit zwei Farben musste ich ein wenig tricksen, da ich gerade keines zur Hand habe. Ich habe daher einfach irgendein Bild genommen und es in ein Binärbild umgerechnet. Der Code sieht wie folgt aus:
Code:
Bild = Import[...];
AnzahlPunkteInBreite = 100;
Farbe = Blue;
im = ImageResize[Bild, AnzahlPunkteInBreite];
bin = Binarize[im];
Farbwerte = ImageData[bin];
dimensionen = ImageDimensions[bin];
Liste = {};
For[i = 1, i < dimensionen[[1]],i++,For[j = 1, j < dimensionen[[2]], j++,If[Farbwerte[[j, i]] == 0,AppendTo[Liste, {Farbe, Disk[{i, dimensionen[[2]] - j},1/2]}]];]];
Ergebnis = Graphics[Liste]
So, kurz zur Erläuterung. Die ersten drei Zeilen muss der Benutzer vorher anpassen. In der Variable "Bild" muss das Ausgangsbild gespeichert sein, das man beispielsweise über den Import-Befehl laden kann. "AnzahlPunkteInBreite" gibt an, wie viele Punkte das Ergebnisse in der Breite haben soll, die Anzahl in der Höhe ergibt sich dann aus dem Seitenverhältnis des Bildes. Und "Farbe" beinhaltet die Farbe, die die Punkte am Ende haben sollen, hier also Blue = Blau. Wem die vordefinierten Farben nicht zusagen, kann gerne über Funktionen wie RGBColor eine Farbe seiner Wahl definieren. Wichtig noch, sollte das ganze mit einem echten Zweifarbenbild durchgeführt werden, muss bei der Binarize-Funktion darauf geachtet werden (durch Angabe eines Thresholds), dass die zwei Farben nicht beide auf Weiß oder Schwarz abgebildet werden. Das Ergebnis wäre sonst recht langweilig.
Der Code läuft dann durch (bei den hier gewählten Werten braucht er wenige Sekunden) und "Ergebnis" enthält dann das Endergebnis. Das Endergebnis enthält nur farbige Bälle, keine weißen Bälle (könnte man aber simpel anpassen). Das Ergebnis ist eine Vektorgraphik, kann also beliebige skaliert werden. Für die Weiterverwendung kann man "Ergebnis" beispielsweise als pdf exportieren (Funktion Export lässt grüßen).
Will man generell in Bildern Pixelgruppen durch entsprechend gefärbte Punkte ersetzen, geht das mit folgendem Code:
Code:
Bild = Import[...];
AnzahlPunkteInBreite = 100;
im = ImageResize[Bild, AnzahlPunkteInBreite];
bin = Binarize[im];
Farbwerte = ImageData[bin];
dimensionen = ImageDimensions[bin];
Liste = {};
For[i = 1, i < dimensionen[[1]],i++,For[j = 1, j < dimensionen[[2]], j++,If[Farbwerte[[j, i]] == 0,AppendTo[Liste, {Farbe, Disk[{i, dimensionen[[2]] - j},1/2]}]];]];
Ergebnis = Graphics[Liste]
Die Anwendung ist wie oben, nur dass man keine Farbe mehr angeben muss.
PS: Das Schreiben dieses Beitrags hat übrigens länger gedauert als das Schreiben des Codes.