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

我完全同意 Jonas 的观点,但我会向您推荐 FEX 的另一个选项:Fast 2-D convolution是一个 2D conv,用于svd在某些条件下使其更快(您需要从代码中挖掘出来)。

于 2013-02-13T23:29:55.577 回答
1

这里有一些不做卷积的想法conv2

  • 用于im2col将滑动窗口转换为列,然后在每一列上并行执行卷积。

  • 使用傅里叶变换:ifft(fft(A).*fft(B))- 你必须先填充内核。

于 2013-02-13T23:32:53.597 回答