Использование цикла для показа изображений в случайном порядке

Я пытаюсь использовать цикл, чтобы показать мигающие изображения на левой и правой сторонах экрана. В данный момент он работает, но показывает изображения в том порядке, в котором они появляются в моей папке, что не является идеей, поскольку я хотел бы, чтобы они были представлены в случайном порядке. И идеи будут оценены.

Я использую psychtoolbox в MATLAB для Windows, вот мой код:

%reading in all images
baseDir=pwd;
cd([baseDir,'\Images']) %change directory to images folder
jpegFiles = dir('*.jpg'); % create a cell array of all jpeg images

for k=1:size(jpegFiles,1)
images{k}=imread(jpegFiles(k).name);
end
cd(baseDir) %change directory back to the base directory


%using a loop to show images
for k=1:290
texture1(k)=Screen('MakeTexture',w,images{k});    
end
for k=1:145
Screen('DrawTexture',w,(texture1(k)), [], leftposition);
Screen('DrawTexture',w,(texture1(k+145)), [], rightposition);
Screen('DrawLines', w, allCoords,...
lineWidthPix, black, [xCenter yCenter], 2);
Screen(w,'Flip');
pause(0.2);
end

1 ответ

Решение

Вы можете использовать randperm перетасовать список изображений заранее.

images = images(randperm(numel(images)));

Используя этот подход, вы будете гарантированы, что одно и то же изображение никогда не появится дважды, используя вашу методологию.

Если вы просто хотите произвольно отобразить любое изображение (даже если оно было показано ранее), а не использовать images{k}Вы можете нарисовать индекс случайным образом из всех значений между 1 а также numel(images) (с помощью randi) и отобразить это изображение.

images{randi([1 numel(images)])}

или вы могли бы индексировать в texture1 случайным образом.

В вашем коде это будет выглядеть примерно так

nImages = numel(images);

% Loop all of this as long as you want

left_texture = texture1(randi([1 nImages]));
right_texture = texture1(randi([ 1 nImages]));

Screen('DrawTexture', w, left_texture, [], leftposition);
Screen('DrawTexture', w, right_texture, [], rightposition);
Другие вопросы по тегам