Сохранение в переменные имена файлов с помощью MATLAB

У меня есть много изображений, которые находятся в каталоге с именами 1.jpg, 2.jpg, 3.jpg и т. д. Я читаю их одно за другим. Я делаю некоторую операцию, а затем сохраняю их.

Я хочу автоматизировать эту операцию. Я могу прочитать названия изображений. Затем при создании выходного файла я извлекаю image_name из имени входного файла, добавляю необходимые имена расширений, добавляю тип файла, который я хочу сохранить, а затем сохраняю изображения с помощью команды печати.

%//Read the image
imagefiles = dir('*.bmp');      
nfiles = length(imagefiles);    % Number of files found
for ii=1:nfiles
    currentfilename = imagefiles(ii).name;
    currentimage = imread(currentfilename);
    images{ii} = currentimage;
    Img=currentimage;

    %//Do some operation on the image

    %//Save the image file
    h=figure;
    %//Display the figure to be saved  
    token = strtok(currentfilename, '.');
    str1 =  strcat(token,'_op');
    print(h,'-djpeg',str1);
end

Эта программа отлично работает, но потом я узнал об этой команде для построения красивых графиков. export_fig

export_fig принимает основную команду в виде:

export_fig file_name.file_type

Как я могу автоматически заменить имя выходного файла, которое хранится как str1, вместо заполнителя file_name в команде export_fig.

ПРИМЕЧАНИЕ. Обратите внимание на это из документации export_fig (для переменных имен файлов)

for a = 1:5
plot(rand(5, 2));
export_fig(sprintf('plot%d.png', a));
end

Я не хочу этого решения. Пожалуйста, поймите мой вопрос о том, что существуют тысячи функций MATLAB, которые требуют ввода данных, как указано в export_fig основном выражении. Особый случай, связанный с переменными именами файлов, уже встроен в функцию export_fig.

Я хочу знать, если он не был построен, то как я мог использовать автоматически сгенерированные переменные имена файлов? Мой запрос касается не только export_fig, но и основного способа, которым я могу указать имена переменных файлов, если ввод не может быть строкой?

Пожалуйста, спросите меня, если у вас есть проблемы с пониманием вопроса.


person roni    schedule 20.09.2013    source источник
comment
Я не совсем понимаю.. Если вы хотите export_fig вместо print, вы можете просто заменить print(h,'-djpeg',str1) на export_fig(str1), а str1 теперь будет strcat(token,'_op.jpeg'). Возможно, стоит отметить, что в MATLAB вызов функции вида: function_name x идентичен function_name('x').   -  person sebastian    schedule 21.09.2013
comment
Нет, ты не понял моего вопроса. Предположим, что есть функция с именем my_function, и ее основной оператор имеет вид my_function имя_файла.тип_файла. Если предположить, что имя_файла меняется в цикле, как мне вызвать my_function в цикле, учитывая, что мое имя_файла меняется для каждой итерации цикла? Вы поняли это сейчас? Пожалуйста, скажите мне, иначе я отредактирую свой вопрос.   -  person roni    schedule 21.09.2013


Ответы (1)


Синтаксис my_function file_name.file_type эквивалентен my_function('file_name.file_type') — между ними нет никакой разницы.

Итак, если вы хотите, чтобы это было в цикле, вы можете использовать любой метод для создания имени файла, а затем вызвать функцию:

for i=1:N
    % construct the filename for this loop - this would be `str1` in your example
    file_name = sprintf('picture_%i.jpeg', i);
    % or:
    file_name = strcat('picture_', num2str(i), '.jpeg');
    % call the function with this filename:
    my_function(file_name);
end
person sebastian    schedule 20.09.2013