Gauß'scher Weichzeichner

java2000

Mitglied
Hallöchen :)
Ich würde gerne ein "Bildbearbeitungsprogramm" schreiben wollen. Also ich wollte das zunächst einmal ganz schlicht halten und auch keine Bilder in dem Sinne einlesen, sondern als "Bild" erstmal ein zweidimensionales Array nehmen, in dem die Bildpunkte mit unterschiedlichen Werten gespeichert werden. Hierzu wollte ich einige Methoden schreiben, die dann die "Bearbeitung" durchführen. Unter anderem auch eine zum "Gauß'schen Weichzeichner", weil das -meiner Meinung nach- einer der Klassiker ist. Nur leider fehlt mir dazu irgendwie so die Idee. ???:L Ich habe auch schon im Internet recherchiert und bin auch teilweise auf gute Code gestossen, aber die wurden dann Befehle benutzt, die mir gänzlich unbekannt waren. Ist das nicht irgendwie einfacher möglich? Ich dachte evtl an einige verschachtelte Schleifen, aber ich weiß nicht genau wie ich es umsetzen könnte. Würde das überhaupt klappen? ???:L
Ich danke Euch für Eure Hilfe :)
 

Thallius

Top Contributor
Ich Versuch mal einen Weg zu beschreiben wie du ohne großartige Mathe Kenntnisse einen Weichzeichner programmieren kannst der dem gauschen recht nahe kommt.

Der einfachste Weg einen weichzeichner zu implementieren ist über eine 2D Matrix.

Je größer man die Matrix wählt umso unschärfer wird das Bild und umso länger dauert die Berechnung.
Die Matrix sollte immer eine ungerade Größe haben. Die einfachste Matrix wäre z.b.

1 2 1
2 3 2
1 2 1

Was du nun machst ist ganz einfach. Du berechnest die Summe aller Zahlen in der Matrix. Das wären in diesem fall 15. Jetzt nimmst du das erste Pixel und multiplizierst seinen farbwert (natürlich für R,G,B, getrennt) mit 3. dann addierst du den farbwert des Pixels das diagonal Links darüber liegt den du vorher mit 1 multiplizierst. Dann das Pixel genau über dem ersten Pixel multipliziert mit 2. so addierst du alle diese farbwerte und teilst sie zum Schluss durch 15. das ist dein neuer farbwert für diesen Pixel.

Dabei gibt es natürlich ein paar Dinge zu beachten.

1) du darfst während der Berechnung nicht das Quellbild ändern indem du die alten farbwerte durch die neuen ersetzt ,sondern Must das Ergebnisbild in einen neuen buffer schreiben, da das Original alte Pixel ja noch benötigt wird um die folgenden Pixel zu berechnen.

2) an den rändern gibt es nicht alle umgebungspixel. Für das erste Pixel links oben Must du also nur die vier Werte aus der Matrix nehmen die rechts unten sind. Dann darfst du das Ergebnis der farbwert Addition natürlich auch nur durch 8 teilen.

3) das erstellen der Matrix kann man dann programmatisch machen. Im Prinzip Must du dir die Matrix nur als einen Kreis vorstellen wobei alle Pixel auf dem Radius den Wert 1 haben und der Pixel in der Mitte den Wert X. Alle anderen Werte ergeben sich aus deren Abstand zum Mittelpunkt des Kreises.

Viel Spaß beim rumprobieren.

Gruß

Claus

P.S. Sorry für die vielen Tippfehler aber auf der Couch auf dem iPad ist es recht mühsam zu tippen.
 

Ähnliche Java Themen

Neue Themen


Oben