Im Internet gibt es eine Menge Bilder, auf denen sogenannte typografische Porträts dargestellt sind. Die Ausführung bzw. Qualität der einzelnen Bilder weicht jedoch stark voneinander ab. In einigen Fällen ist lediglich ein Foto mit Text überlagert worden, in anderen wiederum passt sich der Text fast organisch genau an Gesichtszüge oder andere Formen an. Als ich begann, selber ein solches Bild zu erstellen, verließ mich jedoch nach kurzer Zeit die Geduld. Es ist wie ein Puzzle, von dem man nicht weiß, ob die Teile überhaupt zueinander passen. Am Besten es würde automatisch gehen; das war die Idee.
Anfangs hatte ich noch keine Ahnung wohin mich meine Idee führen sollte. Heute kann ich jedoch behaupten, dass ich einen guten Weg gefunden habe solche Bilder zu generieren. OK, ein gewisses Maß an Vorarbeit vorausgesetzt und noch lange nicht so perfekt wie von einem Designer oder so mathematisch ausgefeilt wie der Algorithmus für digital micrography, aber dennoch mit einem anständigen Ergebnis.
Die Arbeitsweise meines Algorithmus ist dabei recht einfach. Er sucht eine möglichst große Fläche in einem Bild und schreibt auf sie ein Wort. Anschließend beginnt er seine Suche erneut, bis ihn ein Abbruchkriterium zwingt aufzuhören. Reine Rekursion – mehr nicht. So einfach es auch klingt, so lange rechnete der Algorithmus anfangs auch. Schafft er heute ein hochauflösendes Bild (z.B. 2048×2048 Pixel) in einer Minute, so brauchte er dafür anfangs gut einen Tag.
Anfangs untersuchte er auch nur schwarzweiß Bilder. Heute verarbeitet er mehrere Farbabstufungen, verschiedene Wörter pro Farbe, manuelle Wortplatzierung und noch einige andere Möglichkeiten. Mein aktuelles Problem ist, diese Möglichkeiten in eine grafische Benutzeroberfläche zu integrieren, die eine fein granulare Anpassung des Algorithmus ermöglicht.
Der Algorithmus arbeitet übrigens zu 100% in Java. Ich muss zugeben, ich habe dahingehend auch mit C++, OpenCL und CUDA experimentiert. Als die Ergebnisse meiner Tests bzgl. der Arbeitsdauer jedoch immer stärker verschwammen, bin ich bei Java geblieben. Wahrscheinlich kann der ein oder andere C Crack da noch einiges an Leistung herauskitzeln, ich für meinen Teil bin mit dem Ergebnis jedoch (vorerst) zufrieden.