2013-05-11 66 views
0

我想寫一個程序,它需要一個由多個png文件組成的矩陣,這些文件被保存爲矩陣內的子矩陣。我有10個相同大小的png文件保存爲image_1,image_2等,我希望能夠在以後的循環中單獨瀏覽每個圖像。創建3D矩陣是實現這一目標的最佳方式,如果是這樣,那麼稍後如何將其用於上述目的?如何從多個imread變量創建3D矩陣?

+0

我敢肯定,你會從標籤中找出我想說的是,這是在matlab中。 – 2013-05-11 07:16:12

回答

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 

>> 

如果你覺得以後個別的變量是不必要的,你可以簡單地將它們清除如下:

>> 
for ii=1:2 
    eval(sprintf('clear image_%d;', ii)); 
end 
>> 

新的3D矩陣可能稍後用作images(:,:,1),images(4,3,2)等等。

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是圖像數日後訪問這些圖像。