-1

我们希望通过将组中的每个滤波器与图像进行卷积并将所有响应连接成每个像素的向量来在图像上运行我们的滤波器组。在循环中使用 imfilter 命令来执行此操作。由于彩色图像有 3 个通道,如果滤波器组的大小为 F,我们每个像素总共将有 3F 个滤波器响应。N 然后将结果输出为 3F 通道图像

final = [];
for i = 1: length(filterBank)
    x = imfilter(img, cell2mat(filterBank(i)));
    imshow(x);
    final(i)= [x]
end

在哪里 :

filterBank 是一个 20X1 的单元格;filterBank(i) 是 5X5 双

img 是 230X307X3 uint8

最终只是 []

这会给出错误 下标分配维度不匹配。

然后我尝试了:

final(1:1:1) = x

这给出了一个错误: 在赋值 A(:) = B 中,A 和 B 中的元素数必须相同。

我是一个 matlab 菜鸟,但基本上想保存所有 3d 矩阵结果,将每个过滤器应用于单个数组,然后应用蒙太奇命令

4

1 回答 1

1

您正在尝试将单个元素 ( final(i)) 设置为矩阵的值。请改用元胞数组。

% pre-allocate for memory friendliness
final = cell(size(filterBank));
% Loop using ii not i, as i=sqrt(-1) by default in MATLAB
% Also using numel, as length is only the size in the largest direction
for ii = 1:numel(filterBank)
    % You say filterBank is a cell, so use {}, then shouldn't need cell2mat()
    x = imfilter(img, filterBank{ii});
    imshow(x);
    % Curly braces because we're indexing a cell now
    final{ii} = x;
end

或者,您可以使用 4D 矩阵(3D 表示x,1D 表示循环变量),

final = zeros([size(img), numel(filterBank)]); % pre-allocation instead of cell
for ii = 1:numel(filterBank)
    x = imfilter(img, filterBank{ii});
    imshow(x);
    % assign to ii-th layer of 3D matrix
    final(:,:,:,ii) = x;
end   
于 2017-09-18T16:15:12.027 回答