2D-Grafik Bilinear interpolation

Meeresgott

Bekanntes Mitglied
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:

12378

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
 

Meeresgott

Bekanntes Mitglied
Manchmal sieht man den Wald vor lauter Bäumen nicht..

Habe jetzt erst gesehen, dass das Beispielbild bei Wikipedia zwischen den Wert 0 - 1 mappt.
Nachdem ich das auch so umgesetzt habe und mit HSB-Farben arbeite komme ich auf ein ähnliches Bild..
 

Ähnliche Java Themen

Neue Themen


Oben