我正在玩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
答案 0 :(得分:1)
我完全赞同Jonas,但我会将您推荐给FEX的另一个选项:Fast 2-D convolution
是一个使用svd
的2D转化,以便在某些条件下使其更快(你需要从代码中挖掘出来。)
答案 1 :(得分:1)
以下是一些没有conv2
使用im2col
将滑动窗口转换为列,然后在每列上并行执行卷积。
使用傅立叶变换:ifft(fft(A).*fft(B))
- 你必须先填充内核。