2014-02-06 65 views
1

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”,但每个文件夹都包含灰度图像?

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

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

任何帮助将不胜感激。

+1

使用'imread' /'imwrite'复制JPEG会降低质量以及不必要的复杂 - 只需使用['copyfile'](http://www.mathworks.co.uk/help/matlab/ref/) copyfile.html)。另外,你可以用'randperm(totalNumberOfFiles,numberIWantToUse)'直接生成训练集索引 - 不需要中间列表。 – Notlikethat

+0

请你能帮我编辑我的代码在1和2为了回答我的行为。提前致谢! – Christina

回答

1

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

具体而言,D = dir('directory')将返回一个结构,其中结构的每个元素都是存储在'目录'中的元素。 D(i).isdir将为1如果D(i).name对应于您的一个子文件夹的名称(请注意,您将需要忽略D(1:2),因为这些文件夹导航标签为...)。所以,让你的目录内容列表,然后遍历那些呼吁mkdir如果D(i).isdir为1

我不知道我理解你的问题的休息,但如果你只需要整个图像集的一个子样本随机(不管它存储在哪个子文件夹中),当您在上面创建子文件夹时,还可以向子文件夹拨打dir的第二个电话以获取其内容列表。循环浏览并检查每个元素是否为图像,以及是否将其保存到图像路径名称数组中。当你编译这个主列表时,你可以从中获取一个随机子集。

+0

谢谢你的回答,请你写信给我编辑的代码。提前致谢! – Christina