Raster returnere forkert værdi?
Hej eksperterJeg sidder og rodder med en java opgave, hvor jeg skal lave convolution på et farvebillede. Det virker da også ok indtil videre bortset fra at min raster hentes forkerte værdier som resultere i at billedet bliver mørkere og mørkere hver gang jeg bruger min convolution kode. Min kode ser ud som følger:
//Method which performs convolution using a mean-kernel
public static void ConvMean(BufferedImage image)
{
//kernel size
int m = 3; //horz
int n = 3;//vert
//creating kernel-array and assigning values
double[][] kernel = new double[m][n];
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
kernel[i][j] = (1.0 / 9.0); //normalized value in kernel
}
}
//m2 and n2 contain the distances from the center to the edge of the kernel(half-kernel).
int m2 = (m - 1) / 2;
int n2 = (n - 1) / 2;
WritableRaster raster = image.getRaster();
for(int x = 0; x < image.getWidth(); x++)
{
for(int y = 0; y < image.getHeight(); y++)
{
int sum_r = 0; //setting red pixelvalue to start from
int sum_g = 0; //setting green pixelvalue to start from
int sum_b = 0; //setting blue pixelvalue to start from
//System.out.println("x: "+x+" y: "+y);
//check if pixel is a border pixel
if(x - m2 < 0 || y - n2 < 0 || x + m2 > image.getWidth()-1 || y + n2 > image.getHeight()-1)
{
raster.setSample(x,y,0,raster.getSample(x, y, 0));
raster.setSample(x,y,1,raster.getSample(x, y, 1));
raster.setSample(x,y,2,raster.getSample(x, y, 2));
}
else
{
for(int i = -m2; i <= m2; i++)
{
for(int j = -n2; j <= n2; j++)
{
if(i == -m2)
{
System.out.println(raster.getSample(x + i, y + j, 0));
}
sum_r += kernel[i+m2][j+n2] * raster.getSample(x - i, y - j, 0);
sum_g += kernel[i+m2][j+n2] * raster.getSample(x - i, y - j, 1);
sum_b += kernel[i+m2][j+n2] * raster.getSample(x - i, y - j, 2);
}
}
raster.setSample(x,y,0,Math.round(sum_r));
raster.setSample(x,y,1,Math.round(sum_g));
raster.setSample(x,y,2,Math.round(sum_b));
}
//System.out.println(sum_r);
}
}
image.setData(raster);
}
Som I kan se så udskriver jeg denne værdi:
if(i == -m2)
{
System.out.println(raster.getSample(x + i, y + j, 0));
}
og ved at ændre 0'et til henholdsvis 1 og 2 kan jeg se at kanalerne her returnere en forkert værdi når min kernel er sat til -m2 (-1) og det kan jeg slet ikke få til at hænge sammen... pixelværdier er vel pixelværdier!! :( Er der nogen som har et godt bud på hvorfor mine billeder bliver mørkere og mørkere hver gang jeg bruger denne metode?