替代matlab中的conv2

时间:2013-02-13 22:20:06

标签: matlab

我正在玩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

2 个答案:

答案 0 :(得分:1)

我完全赞同Jonas,但我会将您推荐给FEX的另一个选项:Fast 2-D convolution是一个使用svd的2D转化,以便在某些条件下使其更快(你需要从代码中挖掘出来。)

答案 1 :(得分:1)

以下是一些没有conv2

进行卷积的想法
  • 使用im2col将滑动窗口转换为列,然后在每列上并行执行卷积。

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