Средняя маска размытия дает разные результаты - PullRequest
1 голос
/ 26 марта 2011

умножение каждого пикселя на среднюю маску размытия * (1/9), но результат совершенно другой.

PImage toAverageBlur(PImage a)
{
   PImage aBlur = new PImage(a.width, a.height);

   aBlur.loadPixels();

   for(int i = 0; i < a.width; i++)
   {
      for(int j = 0; j < a.height; j++)
      {
        int pixelPosition = i*a.width + j;
        int aPixel = ((a.pixels[pixelPosition] /9));

        aBlur.pixels[pixelPosition] = color(aPixel);
      }
   }
   aBlur.updatePixels();

   return aBlur;
}

1 Ответ

2 голосов
/ 26 марта 2011

В настоящее время вы не применяете средний фильтр, вы только масштабируете изображение с коэффициентом 1/9, что сделает его темнее.У вас хорошая терминология, вы пытаетесь применить скользящее среднее значение 3х3 (или среднее по окрестности), также известное как фильтр вагон-автобуса.

Для каждого пикселя i, j необходимо взять сумму (i-1, j-1), (i-1, j), (i-1, j + 1), (i, j-1), (i, j), (i, j + 1), (i + 1, j-1), (i + 1, j), (i + 1, j + 1), затем разделитена 9 (для среднего 3х3).Чтобы это работало, вам не нужно учитывать пиксели на краю изображения, у которых нет 9 соседей (например, вы начинаете с пикселя (1,1)).Выходное изображение будет на пиксель меньше с каждой стороны.Кроме того, вы можете зеркально отразить значения, чтобы добавить дополнительную строку к вашему входному изображению, что сделает выходное изображение того же размера, что и исходный.;эти методы быстрее, потому что они не требуют зацикливания.

...