は、だから私は、この書いた:畳み込み関数を書きましたが、matlabのconv2()より200倍以上遅いです。
function y = convolution(u,v)
[m,n] = size(u);
[w,z] = size(v);
y = zeros(m-w+1,n-z+1);
for i = 1:m-w+1
for j = 1:n-z+1
y(i,j) = sum(sum(u(i:i+w-1,j:j+z-1).*v));
end
end
end
をそして私はこれで、MATLABで)(CONV2にそれを比較した:
function timedConv
a = im2double(rgb2gray(imread('picture.png')));
tic
convolution(a,[4 5 6;0 0 0;3 2 1]);
toc
tic
conv2(a,[4 5 6; 0 0 0; 3 2 1]);
toc
end
とMATLABのCONV2がとりながら鉱山は、実行に4秒以上を要することがわかりました約0.01秒。さらに、私の出力はm + w-1 x n + z-1であるので、m-w + 1 x n-z + 1の行列を出力しているので、画像の外側にゼロの畳み込みを行うと仮定しています画像の端に私は結果を表示するとき、彼らは同じように見えるので、私の機能が動作している必要があります。それはずっと遅いですし、なぜ私は考えていません。何とかforループを取り除くことはできますか?
'"何とかforループを取り除くことはできますか? " - http://stackoverflow.com/questions/25449279/efficient-implementation-of-im2col-and-col2im – Divakar
これはおそらく、実行するには私はかなり確信しているが、感謝!前にim2colについて知らなかった – DZD