3

編集: ボックス フィルターの説明は非常に間違っています (ボックス フィルターではすべての重みが同じである必要があります)。つまり、重みの合計が 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();
     }
}

オリジナル 2番目

4

1 に答える 1

3

フィルターの重みの合計は 1.0 になります。あなたのものはしません。

于 2012-09-17T01:24:59.220 に答える