編集: ボックス フィルターの説明は非常に間違っています (ボックス フィルターではすべての重みが同じである必要があります)。つまり、重みの合計が 1 に等しいことを確認しないことによるエラーです。
私はコンピューター グラフィックスのクラスを受講していますが、スムージング ボックス フィルターを機能させるのに問題があります。私の試みでは、3x3 マスクを使用し、それをソース イメージと畳み込みます。私の本で与えられた式は、重みを離散の場合は 1/(2r+1)、連続の場合は 1/2r として与えます。ここで、r は中心ピクセルからの半径です。私がしているのは、3x3 マスクの各値を次のように割り当てることです。
b a b
a 1 a
b a b
ここで、a は 1/3、b は 1/( ( 2 * sqrt(2) ) +1) です。
それをソース画像と畳み込みます。
私が使用している特定のライブラリは、http://cimg.sourceforge.net/ にある CImg で、ソース コードと結果を含めることもできます 。
#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();
}
}