2013-04-24 128 views
5

我在使用Matlab從文件夾中讀取多個圖像時出現問題。我想用他們原來的名字閱讀(用imread命令,因爲是多頻段)。圖像的名稱像'2001_01','2001_02'。這是我的代碼:在Matlab中讀取文件夾中的多個圖像

myPath= 'C:\images\'; %' 
a=dir(fullfile(myPath,'*.tif')); 
fileNames={a.name}; 

然後......

for k = 1:length(fileNames) 
    filename = [fileNames(k).name]; 
    I = imread(filename); 
end 

但它不工作,我不知道如何保存和單獨imread每一個。有人知道我該怎麼做?真的在此先感謝,

+0

訪問k個文件名是否返回完整文件路徑?在這種情況下, – 2013-04-24 11:27:24

回答

1

它是否返回完整的文件路徑? fileNames(k).name?或只是實際的文件名?您可能需要追加mypath中與文件名照顧斜線以及

fileName = strcat(myPath, fileName) 

然後做imread,確保你已經看過了斜線一次contactenated

+0

更好地使用'fullfile'而不是'strcat'。 – Shai 2013-04-24 11:33:12

+0

謝謝Wajih!是的,它返回完整的文件路徑和所有文件。 – user1578688 2013-04-24 12:06:28

6
  1. 關於第一個問題:

    但它不工作...

    只是assig n個dir直接進入fileNames輸出(無支架):

    fileNames = dir(fullfile(myPath, '*.tif')); 
    
  2. 關於第二個問題:

    ...我不知道如何單獨保存和imread各一個。

    看來您需要一個cell array來將所有圖像存儲在一個集合中。首先,定義在單元陣列有合適的尺寸:

    C = cell(length(fileNames), 1); 
    

    ,然後將每個圖像存儲到不同的細胞:

    for k = 1:length(fileNames) 
        filename = fileNames(k).name; 
        C{k} = imread(filename); 
    end 
    

    要訪問單元陣列C以後在任何圖像,使用花括號({})。例如,第二張圖像的訪問方式如下:C{2}

+1

感謝Eitan,您的快速回復!有用!有可能在C {k}列表中會出現文件的名稱?該列表顯示「行x列x波段」。 – user1578688 2013-04-24 12:02:47

+1

您可以將'C'製作成兩列的單元格陣列,一列用於存儲的圖像,另一列用於相應的文件名。爲此,初始化單元格數組,如下所示:'C = cell(length(filenames),2);'並在每次迭代中分配單元格值如下:'C {k,1} = filename; C {k,2} = imread(文件名);' – 2013-04-24 13:23:12

+1

真的非常感謝Eitan! :) – user1578688 2013-04-25 07:34:40

2

而不是

fileNames={a.name}; 

嘗試

fileNames = arrayfun(@(x) fullfile(myPath, x.name), a, 'UniformOutput', false); 

然後,在循環中,您可以爲

I = imread(filenames{k}); 
+0

謝謝謝,但我收到以下消息:???不正確的索引矩陣參考。 – user1578688 2013-04-24 12:05:49

+0

@ user1578688你設置了'k'嗎? – Shai 2013-04-24 12:08:37

相關問題