使用循环以随机顺序显示图片
Using a loop to show pictures in a random order
我正在尝试使用循环在屏幕的左侧和右侧显示闪烁的图像。它目前正在工作,但按照它们在我的文件夹中出现的顺序显示图像,这不是我希望它们随机显示的想法。和想法将不胜感激。
我在 windows 上使用 MATLAB 中的 psychtoolbox,这是我的代码:
%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
您可以使用 randperm
预先调整图像列表。
images = images(randperm(numel(images)));
使用这种方法,您可以保证同一张图片绝不会使用您的方法出现两次。
如果您只是想随机显示任何图像(即使它之前已经显示过),而不是使用 images{k}
,您可以从 1
和 [=] 之间的所有值中随机绘制索引16=](使用 randi
)并显示 that 图像。
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);
我正在尝试使用循环在屏幕的左侧和右侧显示闪烁的图像。它目前正在工作,但按照它们在我的文件夹中出现的顺序显示图像,这不是我希望它们随机显示的想法。和想法将不胜感激。
我在 windows 上使用 MATLAB 中的 psychtoolbox,这是我的代码:
%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
您可以使用 randperm
预先调整图像列表。
images = images(randperm(numel(images)));
使用这种方法,您可以保证同一张图片绝不会使用您的方法出现两次。
如果您只是想随机显示任何图像(即使它之前已经显示过),而不是使用 images{k}
,您可以从 1
和 [=] 之间的所有值中随机绘制索引16=](使用 randi
)并显示 that 图像。
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);