我有一个特定的问题,希望你能帮助我。我正在使用眼球跟踪进行实验。在每次试验中(共计84次试验),我必须同时呈现50张图像,每张100x100像素,屏幕右侧50张,左侧50张。
我正在尝试生成一个X和Y坐标的随机向量,它符合以下条件:
每个随机生成的X和Y位置坐标对必须与下一个坐标对等距50像素。这意味着屏幕上显示的所有图像(所有50个图像)必须彼此相距至少50像素。因此,如果图像上的位置对是x = 1且y = 1,则其他x和y对不得具有x + 100(图像像素数)+ 50(图像之间的距离)= 151和y +的值。 100(图像像素数)+ 50(图像之间的距离)= 151.每个试验必须具有符合这些规则的50幅图像的坐标/位置x和y数字。
对不起,这太罗嗦了。有人可以帮忙吗?
一切顺利,谢谢, Dritan
答案 0 :(得分:0)
其中一种可能性是生成随机位置并检查它们是否被允许。如果没有,请尝试新的位置。
% configuration options
imageSize = 100;
margin = 50;
nImages = 50;
nTrials = 1000; % number of times to find a valid location before aborting
screen = zeros(2000, 2000); % screen on which to place the images
locations = zeros(nImages, 2)
for i=1:nImages % loop over all images
for j=1:nTrials % try nTrials times at most
% generate new random location
x = randi(size(screen, 1) - imageSize + 1);
y = randi(size(screen, 2) - imageSize + 1);
% check if the location is allowed
if checkIfAllowed(x, y, screen, imageSize, margin)
% put the image on the screen
screen(x + (0:imageSize-1), y + (0:imageSize-1)) = ones(imageSize);
locations(i, :) = [x y];
break; % break the inner for loop
end
end
if j == nTrials % abort the process as no valid location is found
warning('Failed to place all the images')
break;
end
end
imshow(screen) % show the images
% checks if an images may be placed at (x, y)
function allowed = checkIfAllowed(x, y, screen, imageSize, margin)
range = -margin:imageSize+margin-1;
xs = x+range;
ys = y+range;
xs = xs(xs > 1 & xs < size(screen, 1));
ys = ys(ys > 1 & ys < size(screen, 1));
allowed = all(screen(xs, ys) == 0);
end
输出是(注意图像用白色方块表示):
locations
是一个包含两列(x, y
图像坐标)的矩阵,每张图片都有一行。
<强>讨论强>
这种方法的缺点是,在空间不足时找到有效位置可能需要一些时间。