0

これをもっと速くする方法はありますか?O(N ^ 2)の複雑さをもっと低くしたいと思います。注:フィルターカーネルは、N/2を中心に回転対称です。

for(unsigned int k=N/2;k<source.getHeight()-N/2;k++)
    {
    for(unsigned int l=N/2;l<source.getWidth()-N/2;l++)
        {

        for(unsigned int m=0;m<N;m++)
            {
            for(unsigned int n=0;n<N;n++)
                {
                dest(l,k).red  +=p_kernel[m][n]*source(l+n-N/2,k+m-N/2).red;
                dest(l,k).green+=p_kernel[m][n]*source(l+n-N/2,k+m-N/2).green;
                dest(l,k).blue +=p_kernel[m][n]*source(l+n-N/2,k+m-N/2).blue;
                }
            }

        }
    }
4

1 に答える 1

1

畳み込み定理について学ぶ必要があります。基本的に、画像とカーネルのフーリエ変換が乗算され、結果が逆変換されます。それを検索してください。サンプルコードを含むサイトがたくさんあります。

于 2012-01-07T14:16:32.567 に答える