Splot 2D przez splot 1D przy użyciu rozdzielnych właściwości

Piszę program, w którym wykonuję wiele zwojów 2D. Pomyślałem więc, że bardziej efektywnym podejściem może być użycie splotu 1D. Ale wydaje mi się, że utknąłem na tym.

Do tej pory nawiązałem do tego linku:

sprawdź to 1)http://blogs.mathworks.com/steve/2006/10/04/separable-convolution/

sprawdź to 2)http://blogs.mathworks.com/steve/2006/11/28/separable-convolution-part-2/

Mam jądro gaussowskie (K) o rozmiarze 5X5. Muszę połączyć tę funkcję jądra z obrazem. Mój rozmiar zdjęcia musi wynosić 4000X4000. Poniżej przedstawiam program:

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

Sprawdziłem rangę macierzy K. Przychodzi 1, więc jest to rzeczywiście wektor rozdzielny, który można wyrazić jako zewnętrzny produkt dwóch wektorów 1 D. Wektory 1 D tutaj nazywane są K1 i K2. Następnie ustawiłem czas, aby poczuć, która metoda jest szybsza? Wyniki przedstawiono poniżej :

%//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.

Jak widzicie, pierwsza metoda jest najszybsza, podczas gdy trzecia metoda jest dość szybka. Trzecia i druga metoda ma również bardzo niski błąd rzędu e-14, ale obie te metody są wyjątkowo powolne w porównaniu z pierwszą metodą konw2.

Czy możecie mi powiedzieć, dlaczego metoda splotu 1D jest najwolniejsza?

Z góry dziękuję wszystkim!

Edytuj: Proszę zobaczyć moją czwartą metodę !!

questionAnswers(1)

yourAnswerToTheQuestion