从目录中的文件夹中读取图像

时间:2014-02-06 21:34:56

标签: matlab image-processing computer-vision

1)我有一个名为“Original_file”的原始目录,其中包含多个图像。 代码用于从目录中读取这些图像,将它们转换为灰度,然后将它们写入名为“Target_File”的新目录。

Target_File='modified_images';
mkdir(Target_File);
directory='original_images';
dnames = {directory};
cI = cell(1,1);
c{1} = dir(dnames{1});
cI{1} = cell(length(c{1}),1);
for j = 1:length(c{1}),
    cI{1}{j} = double(imread([dnames{1} '/' c{1}(j).name]))./255;
    cI{1}{j} = rgb2gray(cI{1}{j}); 
    imwrite(cI{1}{j}, fullfile(Target_File, ['image' num2str(j) '.jpg']));
  end

2)从“Target_File”:下面的代码用于随机选择特定数量的图像并将其放入培训文件中。

Train_images='training_file';
mkdir(Train_images);
ImageFiles = dir('Target_File');
totalNumberOfFiles = length(ImageFiles)-1;
scrambledList = randperm(totalNumberOfFiles);
numberIWantToUse = 5; % for example 5
loop_counter = 1;
  for index = scrambledList(1 :numberIWantToUse)
      baseFileName = ImageFiles(index).name
      str = fullfile('Target_File', baseFileName);
      image = imread(str);
      imwrite( image, fullfile(Train_images, ['image' num2str(index) '.jpg']));
      loop_counter = loop_counter + 1;
   end

我想在这个问题中找到什么?

A)如果我们认为我们的目录包含多个文件夹(folder1, folder2, ...., foldern)。每个文件夹都包含多个图像。那么如何在 1)中编辑我的代码才能应用相同的概念并获得一个包含相同数量文件夹的新目录“Target_File”,但每个文件夹都包含灰度图像? / p>

然后,从 A中创建的Target_File :我想选择(随机选择 2) )从Target_File中的每个文件夹中,将特定数量的图像放入训练文件中,并将其余图像放入测试文件中。对目录中的所有文件夹重复此过程。

因此,如果目录包含3个文件夹,则每个文件夹都会分成训练和测试文件。所以第一个文件夹分为train1和test1,第二个目录分为train2和test2,第三个目录分为train3和test3等。那么如何编辑我的代码2)?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用dir命令获取子目录列表,然后通过调用mkdir遍历该列表以依次创建每个子目录。之后,只需匹配文件路径,即可将源子文件夹中加载的灰度图像保存到相应的目标文件夹中。

具体来说,D = dir('directory')将返回一个结构,其中结构的每个元素都是存储在'directory'中的元素。如果D(i).isdir与您的某个子文件夹的名称相对应,D(i).name将为1(请注意,您需要忽略D(1:2),因为这些是文件夹导航标记...)。因此,获取目录内容列表,然后在mkdir为1时循环调用D(i).isdir

我不确定我是否理解你的其他问题,但是如果你只是需要一个整个图像集的随机子样本(无论它存储在哪个子文件夹中),当你在上面创建子文件夹时,你也可以进行二次调用dir到子文件夹以获取其内容列表。循环并检查每个元素是否是图像,以及是否将其保存到图像路径名称数组中。编译完此主列表后,可以从中获取一个随机子集。