【发布时间】:2014-02-07 06:31:25
【问题描述】:
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 中:我要选择(随机如 2)) 从 Target_File 中的每个文件夹中提取特定数量的图像并将它们放入训练文件中,并将剩余的图像放入测试文件中。对目录中的所有文件夹重复此过程。
因此,如果该目录包含 3 个文件夹,则每个文件夹都分为训练和测试文件。所以第一个文件夹分为train1和test1,第二个目录分为train2和test2,第三个目录分为train3和test3等。那么如何在2)中编辑我的代码?
任何帮助将不胜感激。
【问题讨论】:
-
使用
imread/imwrite复制 JPEG 会降低质量并且会变得不必要的复杂 - 只需使用copyfile。此外,您可以直接使用randperm(totalNumberOfFiles, numberIWantToUse)生成训练集索引 - 无需中间列表。 -
请您帮我编辑我在 1 和 2 中的代码,以便回答我的行为。提前致谢!
标签: matlab image-processing computer-vision