0

我正在尝试编写一个程序,该程序采用由多个 png 文件组成的矩阵,这些文件保存为矩阵中的子矩阵。我有 10 个相同大小的 png 文件保存为 image_1、image_2 等,我希望以后能够在循环中单独浏览每个图像。创建 3D 矩阵是最好的方法吗?如果是这样,我以后如何将它用于上述目的?

4

2 回答 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 回答