将每个像素乘以平均模糊蒙版*(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;
}
答案 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的卷积;这些方法更快,因为它们不需要循环。