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

ли вернуть его в полной мере Путь к файлу? – 2013-04-24 11:27:24

ответ

1

Он возвращает полный путь к файлу? fileNames (k) .name? или просто фактическое имя файла? Вы, возможно, потребуется добавить myPath с файла заботиться о слешами а

fileName = strcat(myPath, fileName) 

Затем сделать imread, убедитесь, что вы смотрели на слешами раз contactenated

+0

лучше использовать 'fullfile', чем' strcat' в этом контексте. – Shai

+0

Спасибо Wajih! Да, он возвращает полный путь к файлу и все файлы. – user1578688

6
  1. Что касается первой проблемы:

    Но это не работает ...

    Просто ASSIG п выход 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 column x band». – user1578688

+1

Вы можете сделать 'C' массив ячеек с двумя столбцами, один для сохраненных изображений и один для соответствующих имен файлов. Для этого инициализируйте массив ячеек следующим образом: 'C = cell (length (filenames), 2);' и в каждой итерации присвойте значениям ячеек следующим образом: 'C {k, 1} = имя_файла; C {k, 2} = imread (filename); ' –

+1

На самом деле спасибо Eitan !! :) – user1578688

2

Вместо

fileNames={a.name}; 

Попробуйте

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

Затем в цикле вы можете получить доступ к -му имя файла k в

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

Спасибо Shai, но я получаю следующее сообщение: ??? Неправильная ссылка на индексную матрицу. – user1578688

+0

@ пользователь1578688 вы установили 'k'? – Shai

Смежные вопросы