2014-02-06 63 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