2D свертка 1D свертки с использованием разделяемых свойств

Я пишу программу, в которой я делаю много 2D сверток. Поэтому я подумал, что более эффективным подходом может быть использование 1D свертки. Но я, кажется, застрял на этом.

До сих пор я ссылался на эти ссылки:

проверьте это 1)http://blogs.mathworks.com/steve/2006/10/04/separable-convolution/

проверьте это 2)http://blogs.mathworks.com/steve/2006/11/28/separable-convolution-part-2/

У меня есть гауссово ядро (K) размером 5X5. Мне нужно свернуть эту функцию ядра с изображением. Размер моего изображения должен быть 4000X4000. Я даю программу ниже:

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

Я проверил ранг матрицы K. Это действительно 1, так что это действительно сепарабельный вектор, который можно выразить как внешнее произведение двух 1 D векторов. Векторы 1 D здесь обозначаются как K1 и K2. Затем я рассчитал, чтобы почувствовать, какой метод быстрее? Результаты показаны ниже :

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

Как вы, ребята, видите, первый метод самый быстрый, в то время как третий тоже довольно быстрый. Третий и второй метод также имеют очень низкую ошибку порядка e-14, но оба эти метода чрезвычайно медленны по сравнению с первым, использующим conv2.

Ребята, скажите, почему метод с 1D-сверткой самый медленный?

Спасибо заранее всем вам !!

Изменить: Пожалуйста, смотрите мой 4-й метод!

Ответы на вопрос(1)

Ваш ответ на вопрос