Arrays 在Matlab中使用带蒙太奇拼贴的滤波器阵列保存三通道图像输出

Arrays 在Matlab中使用带蒙太奇拼贴的滤波器阵列保存三通道图像输出,arrays,image,matlab,montage,Arrays,Image,Matlab,Montage,我们希望通过将图像中的每个过滤器与 图像并将所有响应串联为每个像素的向量。在中使用imfilter命令 一个循环来做这个。由于彩色图像有3个通道,我们将有一个3F滤波器响应每个通道 如果滤波器组的大小为F,则为像素。N 然后将结果输出为3F通道图像 final = []; for i = 1: length(filterBank) x = imfilter(img, cell2mat(filterBank(i))); imshow(x); final(i)= [x] en

我们希望通过将图像中的每个过滤器与 图像并将所有响应串联为每个像素的向量。在中使用imfilter命令 一个循环来做这个。由于彩色图像有3个通道,我们将有一个3F滤波器响应每个通道 如果滤波器组的大小为F,则为像素。N 然后将结果输出为3F通道图像

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

过滤器组是一个20X1单元;过滤器组(i)为5X5双精度

img是一个230X307X3 uint8

期末考试只是[]

这是一个错误 下标分配维度不匹配。

然后我试着:

final(1:1:1) = x
这会产生一个错误: 在赋值A(:)=B中,A和B中的元素数必须相同 相同。


我是一个MatlabNoob,但基本上想保存所有3d矩阵,将每个过滤器应用到单个数组时的结果,然后应用蒙太奇命令,您试图将单个元素(
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