我搜索了网站,但我找不到任何解决方案。这是我想要完成的一件非常简单的事情,但我真的无法弄清楚如何去做。
我有一个图像目录。我正在进行一项实验,在滑块上,人们会评估两个图像相互关联的程度。在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 :(得分:5)
从变量dfiles
开始,您可以使用函数NCHOOSEK和RANDPERM生成一组每个可能的双图像配对,如下所示:
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个成对组合。这是一个非常漫长的实验!
关于并排显示两张图片,您可以将SUBPLOT与IMSHOW的来电结合使用:
subplot(1, 2, 1);
imshow(imageName1); %# Plot the first image
subplot(1, 2, 2);
imshow(imageName2); %# Plot the second image