平均模糊遮罩会产生不同的结果

时间:2011-03-26 12:02:17

标签: image-processing processing

将每个像素乘以平均模糊蒙版*(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 个答案:

答案 0 :(得分:2)

目前,您没有应用平均滤镜,只是将图像缩放1/9,这会使图像更暗。你的术语很好,你试图应用3x3移动平均线(或邻域平均值),也称为boxcar滤波器。

对于每个像素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(平均3x3)。为此,您需要不考虑图像边缘上没有9个邻居的像素(例如,从像素(1,1)开始)。输出图像将是每侧较小的像素。或者,您可以镜像值以在输入图像中添加额外的行,这将使输出图像与原始图像的大小相同。

有更有效的方法可以做到这一点,例如使用基于FFT的卷积;这些方法更快,因为它们不需要循环。