如何使用循环插入噪声并将多个图像保存在不同的文件夹中?(matlab)

Posted

技术标签:

【中文标题】如何使用循环插入噪声并将多个图像保存在不同的文件夹中?(matlab)【英文标题】:how to insert noise and save multiple images in different folders using a loop?(matlab) 【发布时间】:2016-09-17 17:53:16 【问题描述】:

我是图像处理方面的新手,我需要帮助。我有一个包含 1000 张图像的文件夹(数据集),我想插入具有不同密度噪声(0.01、0.02 和 0.03)的噪声“盐和胡椒”,我使用这条线来执行此操作:

 im = imread('C:\Users\SAMSUNG\Desktop\AHTD3A0002_Para1.tif');
 J = imnoise(im,'salt & pepper',0.01);

请帮我这样做:我想将结果保存在 3 个文件夹中(data1 包含 d=0.01 的噪声后的图像,data2 包含 d=0.02 的噪声后的图像,data3 包含 d=0.03 的噪声后的图像) .

任何建议,提前致谢

【问题讨论】:

【参考方案1】:

以下代码将允许您选择文件夹并在 3 个不同的文件夹中创建噪点图片。它只会选择您可以在代码中修改的“*.tif”文件。如果您需要创建更多噪音级别,请创建一个循环来动态命名文件夹和文件。

% get dir
folderX = uigetdir();

% get files
picFiles = dir('*.tif');

% loop over the files and save them with the noise
for ii = 1:length(picFiles)

    currentIm = imread([folderX, '\', picFiles(ii).name]);

    % create folders if not exist
    if ~exist([folderX,'\noise_0.01\'], 'dir')
        % create folders
        mkdir([folderX,'\noise_0.01\']);
    end
    if ~exist([folderX,'\noise_0.02\'], 'dir')
        % create folders
        mkdir([folderX,'\noise_0.02\']);
    end
    if ~exist([folderX,'\noise_0.03\'], 'dir')
        % create folders
        mkdir([folderX,'\noise_0.03\']);
    end   

    J1 = imnoise(currentIm,'salt & pepper',0.01);       
    imwrite(J1,fullfile([folderX, '\noise_0.01\', picFiles(ii).name]));    

    J2 = imnoise(currentIm,'salt & pepper',0.02);    
    imwrite(J2,fullfile([folderX, '\noise_0.02\', picFiles(ii).name]));

    J3 = imnoise(currentIm,'salt & pepper',0.03);
    imwrite(J3,fullfile([folderX, '\noise_0.03\', picFiles(ii).name]));

end

【讨论】:

【参考方案2】:

使用 2 个 for 循环的简单解决方案。

%save the noise parameter.
noise = [0.01,0.02,0.03];

for i = 1:1000

%we generate the filename (you can adapt this code)
imname = fullfile('C:\Users\SAMSUNG\Desktop\',sprintf('AHTD3A0002_Para%d.tif',i))
%read the image.
im = imread(imname);

for j = 1:length(noise)

%apply the noise
J = imnoise(im,'salt & pepper',noise(j));
%save image in the right folder
imwrite(J,fullfile('C:\Users\SAMSUNG\Desktop',sprintf('folder%d',j)));

end
end

【讨论】:

'错误:文件:test.m 行:17 列:77 不平衡或意外的括号或括号'。 我没有测试过我的代码,但是……你只需要计算括号的数量来纠正错误,……你也试着自己想想。顺便说一句,我加了一个括号。 使用 imwrite 时出错(第 426 行)无法根据文件名确定文件格式。测试错误(第 18 行) imwrite(J,fullfile('C:\Users\SAMSUNG\Desktop\',sprintf('folder%f',noise(j)))); 我编辑了我的答案,但答案只是一个例子,您需要根据需要调整代码

以上是关于如何使用循环插入噪声并将多个图像保存在不同的文件夹中?(matlab)的主要内容,如果未能解决你的问题,请参考以下文章

嵌套 for 循环的 Pandas 在创建的不同数据帧上插入多个数据

如果在循环中插入对象,应该多久调用一次 NSManagedObjectContext 保存?

如何将python中的图像保存在不同的目录中?

C#创建多个图像并保存它们[关闭]

如何遍历一组动态表单输入并将它们插入到多个表中?

如何在文件管理器中保存多个图像