2012-09-17 75 views
3

編輯:我對盒子過濾器的描述是非常錯誤的(所有權重應該在盒子過濾器中相同),但提供的答案確實解決了圖片中的問題。即不確定權重的總和等於1的錯誤。圖像處理 - 盒子過濾器平滑

我正在參加計算機圖形學課程,並且遇到了一些問題需要平滑過濾器才能正常工作。對於我的嘗試,我使用3x3掩碼並將其與源圖像進行卷積處理。 在我的書中給出的公式給出的離散和1/2r連續的權重爲1 /(2r + 1),其中r是從中心像素的半徑。所以我在做什麼被分配的3×3掩碼的每個值,如

b a b 
a 1 a 
b a b 

其中a爲1/3,b是1 /((2 * SQRT(2))1)

然後將其與源圖像進行卷積。

我正在使用的特定庫是CImg,可以在這裏找到:http://cimg.sourceforge.net/ 我不妨包括我的源代碼和結果。

#include "CImg.h" 
#include <cmath> 

using namespace cimg_library; 
int main() 
{ 
    CImg<unsigned char> image("zhbackground.bmp"), image2("zhbackground.bmp"); 
    double a = 1.0/3.0; 
    double b = 1.0/((2.0*sqrt(2.0))+1.0); 
    CImg<> mask = CImg<>(3,3).fill(b,a,b,a,1,a,b,a,b); 
    image2.convolve(mask); 
    CImgDisplay main_disp(image,"original"), main_disp2(image2, "second"); 
    while(1) 
    { 
     main_disp.wait();main_disp2.wait(); 
    } 
} 

original second

回答

3

濾波器權重的總和應爲1.0。你的不。

+0

當我讀到這個時覺得很愚蠢,當我花了大約十分鐘時間來弄清楚我應該怎樣修復它時,感覺到了笨拙。顯然只是將權重相加並將權重除以該和。 – Tim

+0

@Tim對不起,我可以在那裏多一點幫助。沒有必要打敗自己,我認爲這是一個經常被忽視的問題。附:如果有任何「<0.0' or '> 1.0」的重量,那麼您還需要增加夾緊。 –