Die Bilineare interpolation

Ich habe diesen code für die Skalierung Bild durch eine Bilineare interpolation.Ich weiß, das funktioniert, aber ich kann nicht herausfinden, eine Sache, was ist, wenn die angenähert pixel-Wert ist eine Kante(von Kante meine ich, es ist in der letzten Zeile bzw. letzten Spalte) pixel im Eingabe-Bild, dann kann ich i gt einen pixel mit der Koordinate (x+1,y+1) ,dies sollte dazu führen, dass ein array-index out of range Fehler, aber kein solcher Fehler tritt auf, warum?
Der code ist:

public int[] resizeBilinearGray(int[] pixels, int w, int h, int w2, int h2) {
    int[] temp = new int[w2*h2] ;
    int A, B, C, D, x, y, index, gray ;
    float x_ratio = ((float)(w-1))/w2 ;
    float y_ratio = ((float)(h-1))/h2 ;
    float x_diff, y_diff, ya, yb ;
    int offset = 0 ;
    for (int i=0;i<h2;i++) {
        for (int j=0;j<w2;j++) {
            x = (int)(x_ratio * j) ;
            y = (int)(y_ratio * i) ;
            x_diff = (x_ratio * j) - x ;
            y_diff = (y_ratio * i) - y ;
            index = y*w+x ;

            //range is 0 to 255 thus bitwise AND with 0xff
            A = pixels[index] & 0xff ;
            B = pixels[index+1] & 0xff ;
            C = pixels[index+w] & 0xff ;
            D = pixels[index+w+1] & 0xff ;

            //Y = A(1-w)(1-h) + B(w)(1-h) + C(h)(1-w) + Dwh
            gray = (int)(
                    A*(1-x_diff)*(1-y_diff) +  B*(x_diff)*(1-y_diff) +
                    C*(y_diff)*(1-x_diff)   +  D*(x_diff*y_diff)
                    ) ;

            temp[offset++] = gray ;                                   
        }
    }
    return temp ;
}
  • Haben Sie versucht, dies mit w=w2 h=h2 ?
  • Nein, ich wusste nicht warum?
  • Sollte es geben, die dasselbe Bild, wenn der Algorithmus korrekt waren. BTW, dieser ist Java ? Tag mit der Sprache, bitte
InformationsquelleAutor Alex_ban | 2013-05-02
Schreibe einen Kommentar