我需要在 Java 中为 3x3、5x5 和 7x7 矩阵实现高斯模糊。如果我错了,你能纠正我吗:
我有一个矩阵(M)3x3(中间值为 M(0, 0)):
1 2 1 2 4 2 1 2 1
我从图像和每个最近的像素中获取一个像素(P):
s = M(-1, -1) * P(-1, -1) + M(-1, 0) * P(-1, 0) + ... + M(1, 1) * P(1, 1)
然后除以它的矩阵总值:
P'(i, j) = s / M(-1, -1) + M(-1, 0) + ... + M(1, 1)
这就是我的程序所做的一切。我没有改变极端像素。
我的程序:
for(int i = 1; i < height - 1; i++){
for(int j = 1; j < width - 1; j++){
int sum = 0, l = 0;
for(int m = -1; m <= 1; m++){
for(int n = -1; n <= 1; n++){
try{
System.out.print(l + " ");
sum += mask3[l++] * Byte.toUnsignedInt((byte) source[(i + m) * height + j + n]);
} catch(ArrayIndexOutOfBoundsException e){
int ii = (i + m) * height, jj = j + n;
System.out.println("Pixels[" + ii + "][" + jj + "] " + i + ", " + j);
System.exit(0);
}
}
System.out.println();
}
System.out.println();
output[i * width + j] = sum / maskSum[0];
}
}
我source
从BufferedImage
这样的:
int[] source = image.getRGB(0, 0, width, height, null, 0, width);
你能描述一下我的程序有什么问题吗?