在 Matlab 中使用带有蒙太奇拼贴的滤波器阵列后保存 3 通道图像的输出
Saving output of 3 channel image after using a filter array with montage collage in Matlab
我们想 运行 通过将库中的每个过滤器与
图像并将所有响应连接到每个像素的向量中。在中使用 imfilter 命令
一个循环来做到这一点。由于彩色图像有 3 个通道,因此每个通道总共有 3F 个滤波器响应
像素,如果滤波器组的大小为 F 。否
然后将结果输出为3F通道图像
final = [];
for i = 1: length(filterBank)
x = imfilter(img, cell2mat(filterBank(i)));
imshow(x);
final(i)= [x]
end
其中:
filterBank is a 20X1 cell ; filterBank(i) is 5X5 double
img is a 230X307X3 uint8
final is just []
这给出了一个错误
下标赋值维度不匹配。
然后我尝试了:
final(1:1:1) = x
这给出了一个错误:
在赋值A(:) = B中,A和B中的元素个数必须是
一样。
我是一个 matlab 新手,但基本上想保存所有 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
我们想 运行 通过将库中的每个过滤器与 图像并将所有响应连接到每个像素的向量中。在中使用 imfilter 命令 一个循环来做到这一点。由于彩色图像有 3 个通道,因此每个通道总共有 3F 个滤波器响应 像素,如果滤波器组的大小为 F 。否 然后将结果输出为3F通道图像
final = [];
for i = 1: length(filterBank)
x = imfilter(img, cell2mat(filterBank(i)));
imshow(x);
final(i)= [x]
end
其中:
filterBank is a 20X1 cell ; filterBank(i) is 5X5 double
img is a 230X307X3 uint8
final is just []
这给出了一个错误 下标赋值维度不匹配。
然后我尝试了:
final(1:1:1) = x
这给出了一个错误: 在赋值A(:) = B中,A和B中的元素个数必须是 一样。
我是一个 matlab 新手,但基本上想保存所有 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