显示目录中的随机图像对

时间:2012-01-25 16:21:29

标签: matlab random image

我搜索了网站,但我找不到任何解决方案。这是我想要完成的一件非常简单的事情,但我真的无法弄清楚如何去做。

我有一个图像目录。我正在进行一项实验,在滑块上,人们会评估两个图像相互关联的程度。在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');

但是一旦我开始工作,如何让它在屏幕上彼此相邻显示两个图像?我如何对随机生成进行加权,以便我只获得一次图像对?如果我只是告诉它不要重复不起作用的图像,因为每个单独的图像都必须与其他几个图像配对。

帮助?我真的找不到办法做到这一点。

1 个答案:

答案 0 :(得分: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