显示目录中的随机图像对

Rya*_*ons 2 random matlab image

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

我有一个图像目录.我正在进行一项实验,在滑块上,人们将评估两个图像相互关联的程度.在MATLAB中编程滑块部分很容易.但是,我在弄清楚如何使图像工作时遇到了问题.我希望目录中的两张图片随机出现在屏幕上,这样在实验结束时,每个可能的图像对都会被评级.

所以如果图像是:

dog
cat
mouse
hat
Run Code Online (Sandbox Code Playgroud)

我想要:

dog cat
dog mouse
dog hat
cat mouse
cat hat
mouse hat
Run Code Online (Sandbox Code Playgroud)

如何让MATLAB执行此操作?

首先,我无法让它首先显示随机图像.我的脚本是这样的,但它不起作用:

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

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

救命?我真的找不到办法做到这一点.

gno*_*ice 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
Run Code Online (Sandbox Code Playgroud)

并且每行将在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
Run Code Online (Sandbox Code Playgroud)