2012-01-25 54 views
2

我搜索了該網站,但找不到解決此問題的任何解決方案。這是我試圖完成的一件非常簡單的事情,但我真的無法弄清楚如何去做。從目錄中顯示隨機圖像對

我有一個圖像目錄。我正在進行一個實驗,在滑塊上,人們會評估兩幅圖像之間的相互關係。在MATLAB中編程滑塊部分很容易。但是,我在解決如何讓圖像正常工作時遇到問題。我想讓目錄中的兩張圖片隨機出現在屏幕上,這樣在實驗結束時,每個可能的圖像對都將被評分。

因此,如果圖像是:

dog 
cat 
mouse 
hat 

我想:

dog cat 
dog mouse 
dog hat 
cat mouse 
cat hat 
mouse hat 

如何讓MATLAB來做到這一點?

首先,我很難讓它顯示一個隨機圖像在第一個地方。我的腳本是這樣的事情,但它不工作:

dfiles = d(~[d.isdir]); 
genRandNum = randperm(length(dfiles)); 
filename = dfiles(genRandNum(i)).name; 
imageName = fullfile('Desktop', 'SEMREL', 'Pictures', filename); 
imshow(imageName, 'Parent'); 

但是,一旦我得到那個工作,我怎麼得到它顯示兩個圖像並排在屏幕上?我如何加權隨機世代,以便每次只能獲得每個圖像對?如果我只是告訴它不要重複一張不起作用的圖像,因爲每張圖像都必須與其他幾張圖像配對。

幫助?我從字面上無法找到一種方法來做到這一點。

+0

此外,備案,萬一有人提起這件事:我認爲創建新圖像文件的可能性,每個圖像文件都是一對圖像(例如,一個圖像文件的狗和貓彼此相鄰,例如),所以我只需要隨機生成一個圖像。這將使編程更容易。但是,有大量的圖片(〜80),因此手工創建每個可能的對將非常耗時。 –

回答

5

與您的變量dfiles開始,您可以使用該功能NCHOOSEKRANDPERM像這樣生成一組每一個可能的兩個圖像配對:

nFiles = numel(dfiles);   %# The number of image files 
combos = nchoosek(1:nFiles, 2); %# Create all unique index pairs 
combos = combos(randperm(size(combos, 1)), :); %# Randomize the pair order 

combos每一行都有一個唯一的一雙指數插入到存儲在dfiles中的一組圖像文件中。請記住,這可能是很多獨特配對的。對於只有80張圖片,您將有3,160個成對的組合。這是一個非常長的實驗!

對於顯示兩個圖像並排側,您可以與您的通話一起使用SUBPLOTIMSHOW

subplot(1, 2, 1); 
imshow(imageName1); %# Plot the first image 
subplot(1, 2, 2); 
imshow(imageName2); %# Plot the second image 
+0

謝謝!這工作 –

+0

只是一個快速後續問題。所以組合創建了一對獨特的索引,我如何顯示這些索引?例如,「picture1 = dfiles(combos(1))。name; picture2 = dfiles(combos2))。name; imshow(picture1); imshow(picture2)。或者什麼? –

+0

@RyanSimmons:對於給定的行在'combos'中你可以得到兩個圖片文件名:'pic1 = dfiles(combos(i,1))。name; pic2 = dfiles(combos(i,2))name;' – gnovice