Jump to content

Bilinear Interpolation Scaling help

- - - - -

  • Please log in to reply
No replies to this topic

#1
Xpectro

Xpectro

    Newbie

  • Members
  • Pip
  • 1 posts
Hi,

I'm trying to program a class for a project, that reads a picture as BufferedImage, and resize it using Bilinear Interpolation (Using the mathematical formulas, not the methods included in java). I almost sure that the Bilinear Interpolation part of the method is done, but after many thinking, searching and losing hope, I just can't figure out how to apply the scaling part to the method.

Here's the method:


public static BufferedImage resize(BufferedImage image, int w2, int h2)

{

 

BufferedImage outputImage = new BufferedImage( w2, h2, BufferedImage.TYPE_INT_RGB );

 

// Ratio between original picture and resized picture 

float x_ratio = ((float) (image.getWidth()-1))/w2 ; 

float y_ratio = ((float) (image.getHeight()-1))/h2;

 

// Four pixels a,b,c,d int a, b, c, d, i, j, color; 

float alpha, beta, xabRed, xabGreen, xabBlue, xcdRed, xcdGreen, xcdBlue, xfinalRed, xfinalGreen, xfinalBlue; 



for (int x = 0; x < image.getHeight()-1; x++) 

   for( int y = 0; y < image.getWidth()-1; y++){ 


//Find the color values of the 4 pixels around the desired point to interpolate 

   a = image.getRGB(x, y); 

   b = image.getRGB(x, y + 1); 

   c = image.getRGB(x + 1, y); 

   d = image.getRGB(x + 1, y + 1); 


   i = (int) (x_ratio * x); 

   j = (int) (y_ratio * y); 


   alpha = (x_ratio * x) - i; 

   beta = (y_ratio * y) - j; 


// a,b represents 2 of the 4 points for interpolation 

   xabRed = alpha * ((b >> 16)&0xff) + (1 - alpha) * ((a >> 16)&0xff); 

   xabGreen = alpha * ((b >> 8)&0xff) + (1 - alpha) * ((a >> 8)&0xff); 

   xabBlue = alpha * (b &0xff) + (1 - alpha) * (a &0xff); 


// c,d represents 2 of the 4 points for interpolation 

   xcdRed = alpha * ((d >> 16)&0xff) + (1 - alpha) * ((c >> 16)&0xff); 

   xcdGreen = alpha * ((d >> 8)&0xff) + (1 - alpha) * ((c >> 8)&0xff); 

   xcdBlue = alpha * (d &0xff) + (1 - alpha) * (c &0xff); 


// Desired point 

   xfinalRed = beta * xcdRed + (1 - beta) * xabRed; 

   xfinalGreen = beta * xcdGreen + (1 - beta) * xabGreen;      xfinalBlue = beta * xcdBlue + (1 - beta) * xabBlue; 


// Prints the RGB values, for bound confirmation    System.out.println((int) xfinalRed + " " + (int) xfinalGreen + " " + (int) xfinalBlue); 


// Sets the new color value for the pixel 

   color = new Color((int)xfinalRed, (int)xfinalGreen, (int)xfinalBlue).getRGB(); 


// Set the pixel 

   outputImage.setRGB(x, y, color); 

}

 return outputImage; 

}




Thanks in advance




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users