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;
}
}
}
}
所以fftw会做到这一点。但是接下来我需要将我的内核填充到与我的图像相同的尺寸,或者? – user877329 2012-01-10 13:26:43
根据对称性计算FFT可能是必要的,但最终它会自行分摊。如果不测量,你无法确定。对于小尺寸的内核,可以利用SIMD硬件并回退到FFT。 – artificialidiot 2012-01-12 12:34:10
我会试试看 – user877329 2012-01-13 20:32:48