我试图找出执行一种卷积的最佳方式。我有一个3D矩阵I = [N×M×P]和一个2D矩阵S = [1×1×K×P]。对于我3D矩阵的每个第p帧(第三维),我想返回I(:,:,p-K/2:p + K/2)和S(1,1,:,p)之间的有效卷积。你有没有办法做到这一点?为每个图像执行新矢量卷积的最佳方法?
事实上,在计算操作的非常接近一个标准卷积数量来看,所不同的是,我需要改变每一帧的第二矩阵...
这是我的方法目前使用方法:
% I = 3D matrix [N x M x P]
% S = Filter [1 x 1 x K x P] (K is an odd number)
% OUT = Result
[N, M, P] = size(I); % Data size
K = size(S, 3); % Filter length
win = (K-1)/2 ; % Window
OUT = zeros(size(I)); % Pre-allocation
for p = win+1:P-win
OUT(:, :, p) = convn(I(:, :, p-win:p+win), S(1, 1, :, p), 'valid'); % Perform convolution
end
在我们有相同数量比标准卷积运算结束,唯一的区别是,过滤器是针对每帧不同...
任何想法?
感谢;)