2013-04-24 22 views
5

Ich habe ein Problem beim Lesen mehrerer Bilder in Matlab aus einem Ordner. Ich möchte mit ihrem ursprünglichen Namen lesen (mit dem Befehl imread, weil Multiband). Die Namen der Bilder sind wie '2001_01', '2001_02'. Dies ist mein Code:Mehrere Bilder in einem Ordner in Matlab lesen

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

Und dann ...

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

Aber es funktioniert nicht und ich weiß nicht, wie diese einzeln zu speichern und imread. Weiß jemand wie ich es machen kann? Vielen Dank im Voraus,

+0

Ist es die vollständige Rückkehr Dateipfad? –

Antwort

1

Gibt es den vollständigen Dateipfad zurück? fileNames (k) .name? oder nur der tatsächliche Dateiname? Sie könnten myPath mit Dateinamen kümmert sich um Schrägstriche sowie

fileName = strcat(myPath, fileName) 

dann die imread tun, stellen Sie sicher, dass Sie bei den Schrägstrichen einmal

+0

besser verwenden 'fullfile' als' strcat' in diesem Kontext. – Shai

+0

Danke Wajih! Ja, es gibt den vollständigen Dateipfad und alle Dateien zurück. – user1578688

6
  1. In Bezug auf das erste Problem contactenated ausgesehen haben anhängen müssen:

    Aber es funktioniert nicht ...

    Gerade ASSIG n die Ausgabe von dir direkt in fileNames (ohne Klammern):

    fileNames = dir(fullfile(myPath, '*.tif')); 
    
  2. In Bezug auf das zweite Problem:

    ... Ich weiß nicht, wie zu sparen und imread diese einzeln.

    Es scheint, dass Sie eine cell array benötigen, um alle Bilder in einer einzigen Sammlung zu speichern. Zuerst definieren die Zellenmatrix, die richtige Größe zu haben:

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

    und speichert dann jedes Bild in einer anderen Zelle:

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

    auf ein beliebiges Bild zugreifen im Zellenfeld C später geschweiften Klammern verwenden ({}). Zum Beispiel wird auf das zweite Bild wie folgt zugegriffen: C{2}.

+1

Danke Eitan für deine schnelle Antwort! Es klappt! Und es ist möglich, dass auf der C {k} die Liste die Namen der Dateien erscheinen würde? Die Liste zeigt die "Zeile x Spalte x Band". – user1578688

+1

Sie können 'C' ein Zellen-Array mit zwei Spalten machen, eine für die gespeicherten Bilder und eine für die entsprechenden Dateinamen. Initialisieren Sie dazu das Zellenarray wie folgt: 'C = cell (length (filenames), 2);' und weisen Sie die Zellenwerte in jeder Iteration wie folgt zu: 'C {k, 1} = filename; C {k, 2} = imread (Dateiname); ' –

+1

Wirklich danke Eitan !! :) – user1578688

2

Statt

fileNames={a.name}; 

Versuchen

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

Dann wird in der Schleife Sie den Namen k -te Datei zugreifen können als

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

Danke Shai, aber ich bekomme folgende Nachricht: ??? Falsche Indexmatrixreferenz. – user1578688

+0

@ user1578688 hast du 'k' gesetzt? – Shai