Warum wird meine Bildqualität nach dem Maskieren x schlechter?Sobel Operator MaskX
public void doMaskX() {
int[][] maskX = { { -1, -2, -1 }, { 0, 0, 0 }, { 1, 2, 1 } };
int rgb, alpha = 0;
int[][] square = new int[3][3];
for (int y = 0; y < width - 3; y++) {
for (int x = 0; x < height - 3; x++) {
int sum = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
rgb = imgx.getRGB(y + i, x + j);
alpha = (rgb >> 24) & 0xff;
int red = (rgb >> 16) & 0xff;
int green = (rgb >> 8) & 0xff;
int blue = rgb & 0xff;
square[i][j] = (red + green + blue)/3;
sum += square[i][j] * maskX[i][j];
}
}
rgb = (alpha << 24) | (sum << 16) | (sum << 8) | sum;
imgx.setRGB(y, x, rgb);
}
}
writeImg();
}
die Qualität des zweiten Bildes besser sein sollte und warum ist gelbe Farbe erscheint?
Soweit ich weiß, der Sobel-Operator zur Kantendetektion und nicht zur Verbesserung des Bildqualität, wie auch immer Sie das definieren. Die gelben Pixel werden wahrscheinlich durch Überläufe verursacht. Sind Sie sicher, dass "Summe" immer <256 ist? –
Übrigens: Dies ist eine etwas merkwürdige Art, es zu implementieren. Sie könnten auch in Erwägung ziehen, [das Rad nicht neu zu erfinden] (https://docs.oracle.com/javase/8/docs/technotes/guides/2d/spec/j2d-image.html#wp63208) – Marco13