Алгоритм 2D-фильтра - PullRequest
       39

Алгоритм 2D-фильтра

0 голосов
/ 07 января 2012

Есть ли способ сделать это быстрее?Я хочу уменьшить сложность 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;
                }
            }

        }
    }

1 Ответ

1 голос
/ 07 января 2012

Вам нужно узнать о теореме о свертке. Это в основном фурье-преобразование вашего изображения и умноженное ядро, а затем результат обратного преобразования. Ищите его, есть множество сайтов с примером кода.

...