Pixelmatrix

Sunderfisch

Grünschnabel
Guten Morgen,

Bräuchte ein wenig Starthilfe für ein Programm, welches Affine Transformationen darstellt und berechnet. Wichtig: Die von Java mitgelieferte Klasse AffineTransform soll nicht verwendet werden, da der mathematische Hintergrund dieser Sache beleuchtet werden soll.

Ich habe jetzt ein kleines Programm geschrieben, mit welchem ich per filechooser ein Bild einlesen kann und welches anschließend gezeichnet wird. Doch jetzt stehe ich auf dem Schlauch. Habe mich tagelang durch irgendwelche Java-Dokumentationen und Bücher gefressen, doch irgendwie sehe ich den Wald vor lauter Bäumen nicht mehr.

Ich brauche jetzt eine Matrix, welche mir passend zu den x und y Koordinaten meines Bildes den entsprechenden Farbwert liefert. In der 1. Spalte an der 1. Stelle soll dann der Farbwert von dem Pixel mit den Koordinaten (1|1) stehen.

Anschließend soll diese Matrix dann mit anderen Matrizen multipliziert werden um eine Translation, Rotation oder Skalierung zu demonstrieren.

Gruß
 
Danke für die Links!

Die mathematischen Aspekte habe ich alle mühsam hergeleitet, Rotationsmatrix, etc.

Jetzt soll ein Programm zur Veranschaulichung dienen. Ein eingelesen Bild soll mit Hilfe der Rotationsmatrix gedreht werden, sprich, die Bildmatrix soll mit der Rotationsmatrix multipliziert werden.

Leider fehlt mir aktuell der richtige ansatz, wie man diese Bildmatrix so einliest.
Habe das ganze mit BufferedImage.getRaster probiert, oder auch mit dem Pixelgrabber, aber irgendwie ist das noch nicht das gesuchte Ergebnis.

lg!
 
Ich habe das selber auch noch nicht gemacht, aber ich würde mir das mal so vorstellen.
Das Bild besteht aus Pixeln (sprich: 255, 255, 255 [ein Farbpixel]). Wenn du diese Werte einließt, dann müsste der erste Farbpixel x=1 und y=1 sein. Dafür musst du das Bild als ByteArray einlesen. Das machst du am besten über die Klasse ImageIO.
Und wenn du soweit bist, dann musst du diesen Farbpixel (meines erachtens nach) nur noch mithilfe deiner Rotationsmatrix drehen.

Ich kann aber auch falsch liegen.

Gruß

Fabio
 
Und wenn du soweit bist, dann musst du diesen Farbpixel (meines erachtens nach) nur noch mithilfe deiner Rotationsmatrix drehen.

Ich kann aber auch falsch liegen.
Nö, das klingt gut. So kompliziert ist das eigentlich nicht. Wenn du deine Datenstruktur kennst, deine Rotationsmatrix hast und weißt wie man zwei Matrizen miteinander multipliziert, dürfte das kein Problem mehr sein.

Hat es denn geklappt?
 
Zuletzt bearbeitet:
Ich habe es weiter versucht, stehe nun aber vor einem neuartigen Problem:

Mein Ziel ist es eine Drehung der Bilder Mittels der Rotationsmatrix zu veranschaulichen.
Zuerst verändere ich die x- und y-Werte durch Multiplikation mit der Zeiler der Matrix:
Code:
double a = Math.cos(winkel*Math.PI / 180);
          double b = -Math.sin(winkel*Math.PI / 180);
          double c = Math.sin(winkel*Math.PI / 180);
          double d = Math.cos(winkel*Math.PI / 180);

for (int i=0;i<Bild.getWidth();i++){
              xwerteneuneu[i] =   xwerteneu[i] * a + ywerteneu[i] *b;}
           
 for (int i=0;i<Bild.getHeight();i++){
              ywerteneu[i] = xwerteneu[i] *c + ywerteneu[i]*d;}
Anschließend soll nun in ein neu angelegtes BufferedImage die Farbe von den Koordinaten des alten Bildes an die neuen Koordinaten gesetzt werden:
Code:
for (int i = 0;i<Bild.getWidth();i++){
    for(int k=0;k<Bild.getHeight();k++){
img.setRGB((int)xwerteneuneu[i],(int)ywerteneu[k], farbe);

Folgendes Problem ergibt sich hierbei:
Ein Pixel wird mehrfach beschrieben, da es durch Rundungen öfter zum gleichen Wert führt, sprich die Drehung sieht hinterher nicht so aus, wie sie sein soll.
Hat jemand eine Ahnung, wie man dieses Problem umgehen kann?
Via geeigneter Interpolation oder so?

Gruß
 

Neue Beiträge

Zurück