パターン刺激1
Bergen, J. R., & Julesz, B. (1983). Parallel versus serial processing in rapid pattern discrimination. Nature, 303, 696-698
のFig.1 のような複数の T の中に L が含まれる刺激の描画について説明します。
またTとLは任意の角度に回転しています。
まず次のTの画像とLの画像の2つをダウンロードして、T.jpg と L.jpg という名前で、プログラムと同じ場所に保存してください。
サンプルプログラムは次の通りです。
function TandL
% 複数の"T"の中に、"L"が1つ含まれる。
% TとLは任意の角度に回転した状態で呈示。
% 何かのキーを押したら終了
try
AssertOpenGL;
ListenChar(2); %Matlabに対するキー入力を無効
%myKeyCheck;
screenNumber = max(Screen('Screens'));
[win, rect] = Screen('OpenWindow', screenNumber, [255 255 0], [10 50 750 550]);
%画面の中心座標
[centerX centerY] = RectCenter(rect);
%実験プログラムを保存しているフォルダ内に T.jpg と L.jpg を準備しておくこと。
Tfile = 'T.jpg';
Lfile = 'L.jpg';
%画像の読み込み
Tdata = imread(Tfile, 'jpg');
Ldata = imread(Lfile, 'jpg');
%画像サイズの幅が「列数」に相当し、
%画像サイズの高さが「行数」の相当する
[Ty, Tx, Td] = size(Tdata);
[Ly, Lx, Ld] = size(Ldata);
Timagetex = Screen('MakeTexture', win, Tdata);
Limagetex = Screen('MakeTexture', win, Ldata);
%凝視点の線分座標
FixationXY=[-20, 20, 0, 0; 0, 0, -20, 20];
%水平方向のグリッドの数
HorizGridNum=5;
%垂直方向のグリッドの数
VertGridNum=5;
a=[1:HorizGridNum];
b=[1:VertGridNum];
[x,y]=meshgrid(a,b);
GridWidth = 70;
GridHeight = 70;
%赤い凝視点の描画
Screen('DrawLines', win, FixationXY, 2, [255 0 0], [centerX, centerY]);
for cnt = 1:HorizGridNum*VertGridNum
if cnt ~= 13 %凝視点部分(グリッドの13番目)は描画しない
%描画する画像の左上のX座標
tmpX = (x(cnt)-1) * GridWidth + centerX - (GridWidth * HorizGridNum)/2 + (GridWidth - Tx)/2;
%描画する画像の左上のY座標
tmpY = (y(cnt)-1) * GridHeight + centerY - (GridHeight * VertGridNum)/2 + (GridHeight - Ty)/2;
if cnt == 7 %グリッドの7番目に"L"を呈示する
Screen('DrawTexture', win, Limagetex, [], [tmpX tmpY tmpX+Lx tmpY+Ly], rand(1)*360);
else
Screen('DrawTexture', win, Timagetex, [], [tmpX tmpY tmpX+Tx tmpY+Ty], rand(1)*360);
end;
end;
end;
Screen('Flip', win);
KbWait;
sca;
ListenChar(0);
catch
sca;
ListenChar(0);
psychrethrow(psychlasterror);
end
上のサンプルプログラムを理解するにはmeshgridの知識が必要です。
分かりやすいように背景を黄色にして、凝視点を赤にしています。
ここでは5×5の格子状の配置を想定しています。
ポイントとしては、例えば左から2番目で上から2番目のグリッドを通し番号7で表しているところです。
サンプルプログラムでは、7番のところに"L"を呈示して、13番目のところに凝視点を呈示しています。
またグリッドの大きさ(GridWidth, GridHeight)は、画像の大きさ(Tx, Ty)より大きくしておかないと、画像を回転させたときに重複部分が出てきてしまいます。
上の例ではすべてのグリッドに画像を呈示していますが、すべてのグリッドに呈示しないことによって、TやLがランダムに配置されているように見せることもできます。
(やや規則的なランダムになりますが)
詳しくはパターン刺激2(ランダム)をご覧ください。