【问题标题】:Batch process and name/save images in a separate folder批处理并将图像命名/保存在单独的文件夹中
【发布时间】:2021-06-17 04:15:29
【问题描述】:

我正在运行一个脚本来为总共 82 张图像创建包含 41 个对照(阳性和阴性)的蒙版。我不知道如何将名称类似于原始 .png 文件的蒙版保存到 Control_41,例如“Masked Control_1 Positive”、“Masked Control_1 Negative”等。我也不知道如何将这些保存到我当前文件夹中的单独文件夹中。谢谢!

我还附上了当前目录的截图。

% GlassBrains_Controls2Mask.m
clear;

Files = dir('Control_*');
Controls_Results_Structure = struct('BW',[],'maskedRGBImage',[]);

for i = 1:length(Files)
    RGB = imread(Files(i).name);
    [Output_BW, Output_maskedRGBImage] = GlassBrainMask(RGB);
    Controls_Results_Structure(i).BW = Output_BW;
    Controls_Results_Structure(i).maskedRGBImage = Output_maskedRGBImage; 
end

save("Controls_Results_Structure")

% Save the results
mkdir "Masked Glass Brains (Controls)"
for i = 1:length(Files)
    Image_Number = i;
    save(Controls_Results_Structure(Image_Number).BW);
   
end

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    请注意save() 将工作区变量存储在 MAT 文件中,这些文件通常只能用 MATLAB 打开,而不是用图像查看器等打开。可以使用imwrite() 创建像您正在阅读的那些使用imread() 的PNG 文件:

    % Save the results
    outdir='./Masked Glass Brains (Controls)';
    [mkdir_status,~,~]=mkdir(outdir);
    assert(mkdir_status,'Error creating output folder.');
    clear mkdir_status;
    
    for i=1:length(Files)
      imwrite( Controls_Results_Structure(i).BW, ...
        sprintf('%s/Masked %s',outdir,Files(i).name) ... %alternative: [outdir  '/Masked '  Files(i).name]
        );
    end
    

    要自定义imwrite() 根据GlassBrainMask() 的输出创建的图像文件,请参阅:https://www.mathworks.com/help/matlab/ref/imwrite.html

    【讨论】:

    • 哦,我明白了!非常感谢您的帮助!
    • 我可以建议使用 fullfile 和 MATLAB strings 将变量连接到路径中,而不是 sprintf。例如,对sprintf 的调用可以与fullfile(outdir,"Masked-"+Files(i).name) 重复。只是低级 sprintf 函数之外的另一种选择。
    • 当然,fullfile 是一个不错的补充!至于 2016/2017 后字符串的使用,我个人不太喜欢 Mathworks 喜欢不时从流行语言中借用的那些功能,但我想它们确实对许多用户来说更直观。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多