2011-03-26 69 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

相關問題