首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一维FFT与二维FFT的可分离卷积

一维FFT与二维FFT的可分离卷积
EN

Stack Overflow用户
提问于 2014-04-06 22:02:11
回答 1查看 1.1K关注 0票数 0

我试图用MATLAB用两种方法将图像与高斯滤波器进行卷积:采用一维FFT的可分卷积法和使用二维FFT的不可分卷积法。我预计可分卷积会更快。然而,它并不适用于小图像,而是用于2D速度更快的大图像。我不确定这是我的实现中的问题,还是因为我没有完全正确的概念。

这是我的代码:

代码语言:javascript
复制
img1 = randi([1,256],128,128);    

% Create a Gaassian filter
rf1 = fspecial('gaussian', [1 128], 1.0);
cf1 = transpose(rf1);
gf1 = cf1 * rf1;    

rc1 = round(conv2(img1, gf1, 'same'));
rc1 = fft2dconv(img1, gf1);
rc2 = fft1dconv(img1, rf1, cf1);


function o = fft1dconv(img, rowf, colf)

% Zero-Pad
imgsize = size(img);
rsize = size(rowf);
csize = size(colf);

img = padarray(img, [imgsize(1)/2, imgsize(2)/2]);
rowf = padarray(rowf, [2*imgsize(1)-rsize(1), 2*imgsize(2)-rsize(2)], 'post');
colf = padarray(colf, [2*imgsize(1)-csize(1), 2*imgsize(2)-csize(2)], 'post');


% Seperable convolution using 1D FFT
tic;
result = fft(transpose(fft(img))) .* fft(transpose(fft(colf)));
result = result .* fft(transpose(fft(rowf)));
o = transpose(round(real(ifft2(result))));
toc;


% Remove Pad
o = o(imgsize(1)+1:2*imgsize(1),imgsize(2)+1:2*imgsize(2));

end


function o = fft2dconv(img, filter)

%zero-pad
imgsize = size(img);
fsize = size(filter);

img = padarray(img, [imgsize(1)/2, imgsize(2)/2]);
filter = padarray(filter, [2*imgsize(1)-fsize(1), 2*imgsize(2)-fsize(2)], 'post');

% Non-Seperable convolution using 2D FFT
tic;
o = round(real(ifft2(fft2(img) .* fft2(filter))));
toc;

% Remove Pad
o = o(imgsize(1)+1:2*imgsize(1),imgsize(2)+1:2*imgsize(2));

end

时间安排的结果如下:

代码语言:javascript
复制
Elapsed time is 0.003315 seconds.
Elapsed time is 0.004369 seconds.

对于4x4图像,可分离的方法要快得多,但对于较大的图像则是如此。事实并非如此,我也不知道为什么。任何帮助都会很感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-07 03:38:07

我建议您使用配置文件代码来查看正在发生的事情。这可能是你正在做的一些其他操作,而不是核心FFT计算本身。

进入MATLAB并输入profile viewer。一旦您这样做,运行您的命令在该窗口并让它完成。一旦它完成,它将识别您的代码的密集部分,您可以从中找出如何优化它。你说得对,可分离的过滤器更快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22900575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档