我正在尝试编写一个程序,该程序采用由多个 png 文件组成的矩阵,这些文件保存为矩阵中的子矩阵。我有 10 个相同大小的 png 文件保存为 image_1、image_2 等,我希望以后能够在循环中单独浏览每个图像。创建 3D 矩阵是最好的方法吗?如果是这样,我以后如何将它用于上述目的?
问问题
224 次
2 回答
0
如果您只是想从图像创建 3D 矩阵,您可以执行以下操作:
>> image_1 = rand(5);
>> image_2 = rand(5);
>> [m, n] = size(image_1);
>> images = zeros(m, n, 2);
>>
for ii=1:2
eval(sprintf('images(:,:,%d) = image_%d;', ii, ii));
end
>>
结果将是这样的:
>> images
images(:,:,1) =
0.9037 0.0305 0.6099 0.1829 0.1679
0.8909 0.7441 0.6177 0.2399 0.9787
0.3342 0.5000 0.8594 0.8865 0.7127
0.6987 0.4799 0.8055 0.0287 0.5005
0.1978 0.9047 0.5767 0.4899 0.4711
images(:,:,2) =
0.0596 0.0967 0.6596 0.4538 0.1734
0.6820 0.8181 0.5186 0.4324 0.3909
0.0424 0.8175 0.9730 0.8253 0.8314
0.0714 0.7224 0.6490 0.0835 0.8034
0.5216 0.1499 0.8003 0.1332 0.0605
>>
如果image_ii
之后觉得个别变量没有必要,可以简单的清除如下:
>>
for ii=1:2
eval(sprintf('clear image_%d;', ii));
end
>>
新的 3D 矩阵可以在以后用作images(:,:,1)
,images(4,3,2)
依此类推。
于 2013-05-11T07:43:22.860 回答
0
如果您知道图像的文件名格式,这相当简单;例如:
directory = pwd; % select working directory (but could be anything)
Nimages = 5;
% Use a cell array to initially store results,
% as we don't know how big the images are yet
myImages = cell(Nimages, 1);
for iImg = 1:Nimages
% Build file name
imgFilename = sprintf('Image_%i', iImg);
% Make it fully qualified using directory
imgFilename = fullfile(directory, imgFilename);
% Load the image
myImages{iImg} = imread(imgFilename);
end
% This will convert from cell to 3D matrix:
myImages = cat(3, myImages{:})
您可以稍后使用
myImages(:, :, n)
n
图片编号在哪里。
于 2013-05-11T09:09:06.913 回答