3x3、5x5、および 7x7 マトリックス用に Java で Gaussian Blur を実装する必要があります。間違っていたら訂正してもらえますか:
私はマトリックス(M)3x3を持っています(中間値はM(0、0)です):
1 2 1 2 4 2 1 2 1
画像から 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);
私のプログラムの何が問題なのか説明してもらえますか?