【问题标题】:Display random image pairs from directory显示目录中的随机图像对
【发布时间】:2012-01-25 16:21:29
【问题描述】:

我搜索了该网站,但找不到任何解决此问题的方法。这是我想要完成的一件非常简单的事情,但我真的不知道该怎么做。

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

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

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

【问题讨论】:

  • 另外,作为记录,以防有人提出:我考虑了创建新图像文件的可能性,每个文件都是一对图像(所以一个包含狗和猫的图片文件例如,彼此相邻),所以我所要做的就是随机生成一张图像。这将使编程更容易。但是,图片数量非常多(约 80 张),因此手工创建每对可能的配对将非常耗时。

标签: matlab random image


【解决方案1】:

从变量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 个配对组合。这是一个很长的实验!

关于并排显示两个图像,您可以将SUBPLOT 与您对IMSHOW 的调用结合使用:

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

【讨论】:

  • 只是一个快速的后续问题。所以组合创建了唯一的索引对,我如何显示这些?比如“picture1 = dfiles(combos(1)).name;picture2 = dfiles(combos2)).name;imshow(picture1);imshow(picture2)。还是什么?
  • @RyanSimmons:差不多了。对于combos 中的给定行i,您将获得两个图片文件名,如下所示:pic1 = dfiles(combos(i,1)).name; pic2 = dfiles(combos(i,2)).name;
  • 在显示所有唯一索引对后,有没有办法让我的程序退出?脚本的问题在于它一直在无限循环......
  • @RyanSimmons:我已经为你的其他问题添加了答案。
  • 感谢新手。我在意识到人们可能看不到它之前发布了这条评论,所以这就是我提出一个新问题的原因。再次感谢!
猜你喜欢
  • 2019-04-16
  • 2021-01-03
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多