Я использую текстурный фильтр для изображения, и на выходе получаются артефакты, изображения высокого качества производят меньше артефактов, а изображения низкого качества - больше артефактов, а изображения в оттенках серого также дают меньше артефактов.
Что может быть причиной этого?
Все изображения должны выводиться так же, как цветное изображение высокого разрешения.
Изображение в градациях серого (высокое разрешение)
https://imgur.com/6v9Earj
Цветное изображение (низкое разрешение)
https://imgur.com/NIeB3QP
Цветное изображение (высокое разрешение)
https://imgur.com/7jvYwtX
//filter
var X = [
[-1,0,1],
[-2,0,2],
[-1,0,1]
];
var Y = [
[-1,-2,-1],
[0,0,0],
[1,2,1]
];
for (y = 0; y < height; y++) {
for (x = 0; x < width; x++) {
blueX = 0 , blueY = 0;
redX= 0, redY= 0;
greenX= 0, greenY= 0;
for (offsety = 0; offsety <= 2; offsety++) {
for (offsetx = 0; offsetx <= 2; offsetx++) {
redY += Y[offsetx][offsety] * pixelAt(x + offsetx, y + offsety, 0);
redX += X[offsetx][offsety] * pixelAt(x + offsetx, y + offsety, 0);
greenY += Y[offsetx][offsety] * pixelAt(x + offsetx, y + offsety, 1);
greenX += X[offsetx][offsety] * pixelAt(x + offsetx, y + offsety, 1);
blueY += Y[offsetx][offsety] * pixelAt(x + offsetx, y + offsety, 2);
blueX += X[offsetx][offsety] * pixelAt(x + offsetx, y + offsety, 2);
}
}
redTotal = Math.sqrt((redX * redX) + (redY * redY ));
blueTotal = Math.sqrt((blueX * blueX) + (blueY * blueY));
greenTotal = Math.sqrt((greenX * greenX) + (greenY * greenY));
data.push(redTotal,greenTotal, blueTotal, 255);
}
}