Что создает эти артефакты в текстурированных отфильтрованных изображениях - PullRequest
0 голосов
/ 06 июля 2019

Я использую текстурный фильтр для изображения, и на выходе получаются артефакты, изображения высокого качества производят меньше артефактов, а изображения низкого качества - больше артефактов, а изображения в оттенках серого также дают меньше артефактов. Что может быть причиной этого?

Все изображения должны выводиться так же, как цветное изображение высокого разрешения.

Изображение в градациях серого (высокое разрешение) 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);
  }
}
...