2013-04-24 16 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 

しかし、それは動作しませんし、私が個別に各1を保存し、IMREADする方法がわからない:これは私のコードです。誰かが私はそれをどうやってできるのか知っていますか?

+0

としてk番目のファイル名にアクセスすることができますループ内で、次に

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

をお試しくださいファイルパス? –

答えて

1

完全なファイルパスが返されますか? fileNames(k).name?または単に実際のファイル名ですか?あなたは一度、最初の問題について

+0

この文脈では、 'strcat'よりも' fullfile'を使う方が良いでしょう。 – Shai

+0

ありがとうWajih!はい。完全なファイルパスとすべてのファイルを返します。 – user1578688

6
  1. をcontactenated filenameはスラッシュで見ていることを確認し、

    fileName = strcat(myPath, fileName) 
    

    は次に関数imreadを行うだけでなく、スラッシュの世話をしてMYPATHを追加する必要があるかもしれません。

    しかし、それは動作しません...

    だけassig n個(括弧なし)dir直接fileNamesへの出力:

    fileNames = dir(fullfile(myPath, '*.tif')); 
    
  2. 第二の問題については:

    ...私は個別に各1を保存し、imreadする方法がわかりません。

    すべての画像を1つのコレクションに保存するには、cell arrayが必要です。中括弧を使用して、後でセルアレイC内の任意の画像にアクセスする

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

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

    し、別のセルに各画像を記憶する:まず、適切なサイズを有するようにセルのアレイを画定します({})。例えば、第2の画像は次のようにアクセスされる。C{2}

+1

お返事ありがとうございました!できます!そして、C {k}のリストにファイルの名前が表示される可能性はありますか?リストには、「行x列xバンド」が表示されます。 – user1578688

+1

'C'は2つの列を持つセル配列を作ることができます。一つは保存されたイメージ用、もう一つは対応するファイル名用です。これを行うには、 'C = cell(length(filenames)、2);'のようにセル配列を初期化し、各繰り返しで以下のようにセルの値を代入します: 'C {k、1} = filename; C {k、2} = imread(ファイル名); ' –

+1

本当にありがとう!! :) – user1578688

2

代わり

fileNames={a.name}; 

のあなたはそれがフルを返すん

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

ありがとう、私は次のメッセージを受け取る:???不適切なインデックスマトリックス参照。 – user1578688

+0

@ user1578688あなたは 'k'を設定しましたか? – Shai

関連する問題