Convolução 2D por convolução 1D usando propriedades separáveis

Estou escrevendo um programa no qual estou fazendo muita convolução 2D. Então eu pensei que uma abordagem mais eficiente pode ser usar convolução 1D. Mas parece que estou preso a isso.

Até agora, referi-me a esses links:

verifique isso 1)http://blogs.mathworks.com/steve/2006/10/04/separable-convolution/

verifique isso 2)http://blogs.mathworks.com/steve/2006/11/28/separable-convolution-part-2/

Eu tenho um kernel gaussiano (K) de tamanho 5X5. Eu preciso convencer esta função do kernel com a imagem. O tamanho da minha imagem é forçado a ser 4000X4000. Eu estou dando o programa abaixo:

clc;clear all;close all;
imgID = 5;
Img = imread([num2str(imgID),'.bmp']);
Img = double(Img(:,:,1));
Img = imresize(Img,[4000 4000]);

sigma=3.0;   
K=fspecial('gaussian',round(2*sigma)*2+1,sigma);     % the Gaussian kernel

%%
%//Trying to use 1D convolution instead of using 2D convolution
[U,S,V] = svd(K);
K1 = U(:,1) * sqrt(S(1,1));
K2 = V(:,1)' * sqrt(S(1,1));

%%
tic
KI=conv2(Img,K,'same');
toc

tic
KI1 = imfilter(Img,K1,'conv');                            
KI1 = imfilter(KI1,K2,'conv');
toc


tic
KI2 = imfilter(Img,K,'conv');
toc

tic
KI3 = conv2(K1,K2,Img,'same');
toc

Eu verifiquei a classificação da matriz K. Ela vem 1 então é de fato um vetor separável que pode ser expresso como o produto externo de dois vetores 1D. Os vetores 1 D aqui são denominados como K1 e K2. Então, calculei para saber qual método é mais rápido? Os resultados são mostrados abaixo :

%//1st method

Elapsed time is 0.375002 seconds.

%//2nd method

Elapsed time is 1.601285 seconds.

%//3rd method

Elapsed time is 1.884165 seconds.

%//4th method

Elapsed time is 0.315134 seconds.

Como vocês podem ver, o primeiro método é o mais rápido, enquanto o terceiro método também é bastante rápido. O terceiro e segundo método também tem um erro muito baixo na ordem de e-14, mas ambos os métodos são extremamente lentos em comparação com o primeiro usando conv2.

Vocês podem me dizer por que o método envolvendo a convolução 1D é o mais lento?

Agradecemos antecipadamente a todos vocês !!

Edit: Por favor, veja o meu método 4 !!

questionAnswers(1)

yourAnswerToTheQuestion