Hallo,
ich möchte mich etwas mehr vertraut machen mit der Bilinear Interpolation. Im Rahmen dessen dachte ich mir, dass ich den Algorithmus von Wikipedia stibitze und selber implementiere.
Wikipedia selbst stellt ein Beispielbild mit 4 Ecken und drei Farben bereit: https://en.wikipedia.org/wiki/File:Bilininterp.png
Ich schaue jetzt schon mehr als zwei Stunden diese paar Zeilen Code an und Frage mich wieso mein Ergebnis sagen wir mal so außergewöhnlich ist:

Ich habe eigentlich schon gefühlte 100 mal über die Implementierung geschaut finde den Fehler nicht. Da dachte ich, dass mehr Augen auch mehr sehen. Vielleicht könnt ihr den Fehler sehen:
Viele Grüße,
Meeresgott
ich möchte mich etwas mehr vertraut machen mit der Bilinear Interpolation. Im Rahmen dessen dachte ich mir, dass ich den Algorithmus von Wikipedia stibitze und selber implementiere.
Wikipedia selbst stellt ein Beispielbild mit 4 Ecken und drei Farben bereit: https://en.wikipedia.org/wiki/File:Bilininterp.png
Ich schaue jetzt schon mehr als zwei Stunden diese paar Zeilen Code an und Frage mich wieso mein Ergebnis sagen wir mal so außergewöhnlich ist:

Ich habe eigentlich schon gefühlte 100 mal über die Implementierung geschaut finde den Fehler nicht. Da dachte ich, dass mehr Augen auch mehr sehen. Vielleicht könnt ihr den Fehler sehen:
Java:
double x1 = 0;
double y1 = 0;
double x2 = 255;
double y2 = 255;
double fq11 = Color.RED.getRGB();
double fq12 = Color.BLUE.getRGB();
double fq21 = Color.GREEN.getRGB();
double fq22 = Color.RED.getRGB();
double a0 = (fq11 * x2 * y2) / ((x1 - x2) * (y1 - y2))
+ (fq12 * x2 * y1) / ((x1 - x2) * (y2 - y1))
+ (fq21 * x1 * y2) / ((x1 - x2) * (y2 - y1))
+ (fq22 * x1 * y1) / ((x1 - x2) * (y1 - y2));
double a1 = (fq11 * y2) / ((x1 - x2) * (y2 - y1))
+ (fq12 * y1) / ((x1 - x2) * (y1 - y2))
+ (fq21 * y2) / ((x1 - x2) * (y1 - y2))
+ (fq22 * y1) / ((x1 - x2) * (y2 - y1));
double a2 = (fq11 * x2 ) / ((x1 - x2) * (y2 - y1))
+ (fq12 * x2 ) / ((x1 - x2) * (y1 - y2))
+ (fq21 * x1 ) / ((x1 - x2) * (y1 - y2))
+ (fq22 * x1 ) / ((x1 - x2) * (y2 - y1));
double a3 = (fq11 ) / ((x1 - x2) * (y1 - y2))
+ (fq12 ) / ((x1 - x2) * (y2 - y1))
+ (fq21 ) / ((x1 - x2) * (y2 - y1))
+ (fq22 ) / ((x1 - x2) * (y1 - y2));
BufferedImage bufferedImage = new BufferedImage(256,256, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < 256; x++) {
for (int y = 0; y< 256; y++){
double result = a0 + a1 * x + a2 * y + a3 *x*y;
bufferedImage.setRGB(x,y,(int) result);
}
}
JFrame frame = new JFrame();
frame.getContentPane().add(new JLabel(new ImageIcon(bufferedImage)));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
Viele Grüße,
Meeresgott