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();
}
}
當我讀到這個時覺得很愚蠢,當我花了大約十分鐘時間來弄清楚我應該怎樣修復它時,感覺到了笨拙。顯然只是將權重相加並將權重除以該和。 – Tim
@Tim對不起,我可以在那裏多一點幫助。沒有必要打敗自己,我認爲這是一個經常被忽視的問題。附:如果有任何「<0.0' or '> 1.0」的重量,那麼您還需要增加夾緊。 –