3

私はMatlabで遊んでいて、さまざまなことを試し、組み込み関数を使用せずに物事を達成する方法を見つけています。どうやらMatlab(グーグルと彼らのウェブサイトによると)は「conv2」関数のソースコードをリリースしていません。。

「conv2(h1、h2、A)」の代替関数、またはMatlabsを使用せずに独自のバージョンをコーディングする方法はありますかconv2

Matlabのhelpオプション/キーワードは本当に役に立ちませんでした

- - 編集 - -

これは、の代替となるコードですconv2(A,B)。しかし、私はを扱う同様の何かを探していますconv2(h1,h2,A)

    function B = convolve(A, k);
    [r c] = size(A);
    [m n] = size(k);
    h = rot90(k, 2);
    center = floor((size(h)+1)/2);
    left = center(2) - 1;
    right = n - center(2);
    top = center(1) - 1;
    bottom = m - center(1);
    Rep = zeros(r + top + bottom, c + left + right);
    for x = 1 + top : r + top
        for y = 1 + left : c + left
            Rep(x,y) = A(x - top, y - left);
        end
    end
    B = zeros(r , c);
    for x = 1 : r
        for y = 1 : c
            for i = 1 : m
                for j = 1 : n
                    q = x - 1;
                    w = y -1;
                    B(x, y) = B(x, y) + (Rep(i + q, j + w) * h(i, j));
                end
            end
        end
    end
4

2 に答える 2

1

なしで畳み込みを行うためのいくつかのアイデアがありますconv2

  • を使用im2colしてスライディングウィンドウを列に変換してから、各列で並列に畳み込みを実行します。

  • フーリエ変換を使用しifft(fft(A).*fft(B))ます。-前にカーネルをパディングする必要があります。

于 2013-02-13T23:32:53.597 に答える
1

私は Jonas に完全に同意しますが、FEX の別のオプションを紹介します。ある条件下で高速化するためにFast 2-D convolution使用する 2D conv です(コードから掘り下げる必要があります)。svd

于 2013-02-13T23:29:55.577 に答える