2012-01-25 2 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 개의 쌍으로 된 조합을 갖게됩니다. 그것은 매우 긴 실험입니다! 두 이미지를 나란히 표시와 관련하여

, 당신은 IMSHOW로 통화와 함께 SUBPLOT를 사용할 수 있습니다

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

고마워! 그게 효과가 –

+0

단지 하나의 빠른 후속 질문. 그래서 combos는 고유 한 인덱스 쌍을 만듭니다. 어떻게 표시합니까? "picture1 = dfiles (combos (1)) .name; picture2 = dfiles (combos2)). 이름; imshow (그림 1); imshow (그림 2) 또는 무엇? –

+0

@ RyanSimmons : 가깝습니다. 'combos'에서'i'를 사용하면'pic1 = dfiles (combos (i, 1)) .name; pic2 = dfiles (combos (i, 2)) .name;' – gnovice

관련 문제