2011-03-26 91 views
1

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

你想用这段代码实现什么? – 2011-03-26 12:06:49

+0

@Jordaan Mylonas:平均模糊一个正常的图像 – 2011-03-26 12:08:19

+0

“平均模糊”,据我所知,不是一个标准的,明确定义的术语。你能否详细说明或说明你的意思,因为可能有很多这个词的解释 – 2011-03-26 12:17:03

回答

2

目前,你不是在申请的平均过滤器,你只用1/9的因素,这将使它更暗缩放图像。你的术语是好的,你正在尝试应用3x3移动平均值(或邻域平均值),也被称为boxcar过滤器。对于每个像素i,j,需要取(i-1,j-1),(i-1,j),(i-1,j + 1),(i,j (i + 1,j + 1),(i + 1,j + 1),(i + 1,j-1) (对于3x3的平均值)。为此,您不需要考虑图像边缘上没有9个邻居的像素(例如,以像素(1,1)为开始)。输出图像将成为每边较小的像素。或者,您可以镜像数值以在输入图像中添加额外的线条,从而使输出图像与原始图像具有相同的大小。

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

+0

你好,你提出的想法给了我一些图案的图片,模糊不起作用 – 2011-03-26 19:03:56

+0

@bnjamin,在你的边缘将不好,你可以提供示例代码 – AMH 2012-01-31 08:39:46

+0

正如我所提到的,你需要用常量,镜像或扩展边缘来填充图像。否则,内核中的“零”将影响边缘窗口的平均值。 – Benjamin 2012-01-31 15:37:58