Presenting random images from a file, where each image is presented only once?
6 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Robert Newman
am 9 Mai 2019
Kommentiert: Jeff Miller
am 10 Mai 2019
Hi,
This is my fourth day of coding ever so bear with me.
Right now I have a folder with images. I want to present each image from the folder randomly once and only once for a certain number of trials.
So far my code looks like this. It successfully presents a random image from the folder, but it can use the same images over again which I don't want.
How do I make it so that each image in the folder is displayed once and only once?
Thank you in advance for your help!
emotionalImageDirectory = 'C:\PsychExperiment\Emotional';
imageTwoVarOne = dir([emotionalImageDirectory '\*.jpg']);
imageTwoVarTwo = numel(imageTwoVarOne);
idx = randi(imageTwoVarTwo);
loadimageTwo = imread(imageTwoVarOne(idx).name);
0 Kommentare
Akzeptierte Antwort
Jeff Miller
am 10 Mai 2019
Store a random sequence of the images in advance and then cycle through them one by one. Something like this,
emotionalImageDirectory = 'C:\PsychExperiment\Emotional';
imageTwoVarOne = dir([emotionalImageDirectory '\*.jpg']);
imageTwoVarTwo = numel(imageTwoVarOne);
imageseq = randperm(imageTwoVarTwo);
for i=1:imageTwoVarTwo % or the number of trials you want, which may be less than the n of images
idx = imageseq(i);
loadimageTwo = imread(imageTwoVarOne(idx).name);
end
2 Kommentare
Jeff Miller
am 10 Mai 2019
Not sure that I follow, but maybe you want two random sequence holders, something like this:
emotionalImageDirectory = 'C:\PsychExperiment\Emotional';
imageTwoVarOne = dir([emotionalImageDirectory '\*.jpg']);
imageTwoVarTwo = numel(imageTwoVarOne);
imageseq = randperm(imageTwoVarTwo);
nonemotionalImageDirectory = 'C:\PsychExperiment\NonEmotional';
nonemoimageTwoVarOne = dir([nonemotionalImageDirectory '\*.jpg']);
nonemoimageTwoVarTwo = numel(nonemoimageTwoVarOne);
nonemoimageseq = randperm(nonemoimageTwoVarTwo);
for i=1:ntrials
idxemo = imageseq(i);
idxnonemo = nonemoimageseq(i);
loadimageTwo = imread(imageTwoVarOne(idx).name);
nonemoloadimageTwo = imread(nonemoimageTwoVarOne(idx).name);
% Now display the two images for this trial?
end
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Image display and manipulation finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!