Psychtoolbox 入門
草野 勉
(東京海洋大学)
このチュートリアルについて
• 対象とする方
– 授業等でプログラム言語を学習する機会がなく、
いままでPowerPointなどで実験をしていた方々
– よくご存知の方には、適宜、情報の補足・修正を していただけると幸いです。。
• ねらい
– とにかく実験のためのプログラミングの敷居が低 く感じられること
細かい話は。。
• Webで公開する予定なので、記録のためのメ モをとって頂く必要はありません。
• ウェブサイトが検索に引っかからないことがあ
るので、Facebookで探してください。登録せず
ともURLが見られるようにしますので。。
今日の話題
• 実験のためのプログラム:選択肢
• Psychtoolboxによる実験プログラム
– 簡単なプログラムと、関連するサンプルコード
• 刺激提示、反応取得・記録
– さまざまな機能の紹介 – インストールなど
実験のためのプログラム:選択肢 ( はじめに )
• 実験用のソフトウェア
– SuperLab, E-‐Prime, Experiment Builderなど
• プログラミング言語のライブラリとして
– ライブラリ:プログラミングの際に再利用可能な プログラムの集まり
これから、複数のOSで同様に使える(クロス・
プラットフォームの)視覚実験用のライブラリ の例を紹介します。
実験のためのプログラム:選択肢 ( ライブラリの一例です )
• PsychoPy
– プログラミング言語Pythonがベース – 使いやすいビルダー
– YouTube上でのチュートリアル
• hJp://www.youtube.com/watch?v=VV6qhuQgsiI
– 日本語解説
• 小川洋和先生(関西学院大学)
• 十河宏行先生(愛媛大学)
実験のためのプログラム:選択肢 ( ライブラリの一例です )
• Psychlopes
– C++のライブラリ
– 日本発(東大心理佐藤研の細川研知さん)
• 分からないことは聞きやすいかも。
– 教育的なサンプルコードを多数用意
実験のためのプログラム:選択肢 ( その他にも )
• Vision Scienceのサイト(ここやここ)
• 木村英司先生(千葉大)のサイト
実験のためのプログラム:選択肢 ( 今回紹介するもの )
• Psychophysics Toolbox (Psychtoolbox)
– MATLABとGNU Octaveのライブラリ
• 習得が容易(と言われている)
– 教育的なサンプルコードが充実
– 利用者数が多い(と思う)。フォーラムの充実 – 無料で導入可能
Psychtoolbox の情報源
• 検索すると日本語の解説もちらほら
• 日本語で得られる貴重な情報源
簡単なプログラム
ねらい
• 簡単なプログラムを例に、基本的な
Psychtoolboxの機能を紹介。
• 付属のサンプルコードの中から、関連するも のを紹介。それらを活用できるようにする。
「簡単なプログラム」の例
• 画面左上に200 x 200 px の円を表示
• クリックで表示終了
window = Screen('OpenWindow',0,0);
Screen('FillOval',window,255,[0,0,200,200]);
Screen('Flip',window);
GetClicks;
Screen('CloseAll');
サンプルについて
• PsychDemosフォルダ(Psychtoolbox直下)
• それ以外の場所にもサンプルは存在
– Bits++関連はPsychtoolbox > PsychHardware >
BitsPlusToolbox > BitsPlusDemos
• Web上にも
– Psychtoolboxユーザーのフォーラムなど
Psychtoolbox のフォーラム
「簡単です」の例
• 画面左上に200 x 200 px の円を表示
• クリックで表示終了
window = Screen('OpenWindow',0,0);
Screen('FillOval',window,255,[0,0,200,200]);
Screen('Flip',window);
GetClicks;
Screen('CloseAll');
例1
「簡単です」という例
• 画面左上に200 x 200 px の円を表示
• クリックで表示終了
window = Screen('OpenWindow',0,0);
Screen('FillOval',window,255,[0,0,200,200]);
Screen('Flip',window);
GetClicks;
Screen('CloseAll');
全画面ウィンドウを作成
例1
「簡単です」という例
• 画面左上に200 x 200 px の円を表示
• クリックで表示終了
window = Screen('OpenWindow',0,0);
Screen('FillOval',window,255,[0,0,200,200]);
Screen('Flip',window);
GetClicks;
Screen('CloseAll');
円を描画
例1
「簡単です」という例
• 画面左上に200 x 200 px の円を表示
• クリックで表示終了
window = Screen('OpenWindow',0,0);
Screen('FillOval',window,255,[0,0,200,200]);
Screen('Flip',window);
GetClicks;
Screen('CloseAll');
描いた内容を表示
例1
「簡単です」という例
• 画面左上に200 x 200 px の円を表示
• クリックで表示終了
window = Screen('OpenWindow',0,0);
Screen('FillOval',window,255,[0,0,200,200]);
Screen('Flip',window);
GetClicks;
Screen('CloseAll');
ウィンドウを閉じる
クリックを待つ
例1
ちなみに、コメントは“ % ”で
(コメントアウトにもよく使われる)
% 全画面ウィンドウ作成
window = Screen('OpenWindow',0,0); % 画面は黒
% 円を描画
Screen('FillOval',window,255,[0,0,200,200]);
% 描画内容を表示
Screen('Flip',window);
GetClicks; % クリックを待つ
Screen('CloseAll'); % 全画面表示終了
例1
文章の区切りと改行
• 文末のセミコロン(;)は、戻り値をコマンドウィ ンドウに表示させないようにするためのもの。
• 改行、セミコロン、カンマで1文の区切り
– fc, pause(1),toc
日本視覚学会2013年夏季大会
例1
Screen 関数のサブコマンド(1)
• 画像の表示に関する様々な機能を、1つ目の 引数である「サブコマンド」によって指定する。
• 例:window = Screen('OpenWindow',0,0);
サブコマンド:ウィンドウ作成
モニタを指定 色は黒
例1
Screen 関数のサブコマンド(2)
• 例:Screen('FillOval',window,255,[0,0,200,200]);
サブコマンド:
長方形描画
ウィンドウを指定
(前の OpenWindow の戻り値)
色は白 ウィンドウ左上 からの
位置とサイズ
例1
Screen 関数
• 例:Screen('FillOval',window,255,[0,0,200,200]);
サブコマンド:
長方形描画
ウィンドウを指定
(前の OpenWindow の戻り値)
色は白 ウィンドウ左上 からの
位置とサイズ
例1
レクト:よく使う表示形式
計算を容易にする関数が用意:
“help PsychRects”
for 文について
• MATLABのfor文
for i = 1:10 % iが1から10になるまで a = i % 変数aにiを代入
end
例1
for 文で円の位置を変化
window = Screen('OpenWindow',0,0);
for i = 1:100
Screen('FillOval',window,255,[i,i,i+20,i+20]);
Screen('Flip',window);
end
Screen('CloseAll');
例1
関連するサンプルコード:
MovieDemo.m
• 153行目-‐159行目(上はほぼ解説)
for i=[1:n/2, n/2:-‐1:1]
r=[0 0 2 2]*(i);
Screen(window,'FillRect', white);
Screen(window,'FillOval',black,r);
t=t+1;
s(t)=Screen(window, 'Flip');
end
例1
関連サンプルコード: MovieDemo.m
• 153行目-‐159行目(上はほぼ解説)
for i=[1:n/2, n/2:-‐1:1]
r=[0 0 2 2]*(i);
Screen(window,'FillRect', white);
Screen(window,'FillOval',black,r);
t=t+1;
s(t)=Screen(window, 'Flip');
end
知らないサブコマンド
例1
知らない関数・サブコマンドの調べ方
• 関数のヘルプ:help {関数名}
– help Screen
– (Screen関数の特殊事情)Screen と入力するだけで、
サブコマンドの一覧が表示
• サブコマンドのヘルプ: {関数名} {サブコマンド}?
– Screen OpenWindow?
• ググる
画像ファイルの提示
• 画像ファイルの読み込み
• 全画面ウィンドウを作成
• ウィンドウに描画
• ウィンドウを提示
例2
画像の読み込み
• imread関数を使う例
– ルートディレクトリ直下の画像test.fff
m = imread('/test.fff','fff'); %赤文字はファイルのパス
• 戻り値mは行列(または多次元配列)
size(m)
3つめの次元はRGBをあらわす。
日本視覚学会2013年夏季大会
例2
行列(3次元配列)の画像データを 表示
m = imread('/test.fff','fff'); % 画像読み込み
window = Screen('OpenWindow',0,0); % ウィンドウ開く tex=Screen('MakeTexture',window,m); % テクスチャ作成 Screen('DrawTexture', window,tex); % 描画
Screen('Flip',window); % 描画した結果を表示 GetClicks; % クリックを待つ
Screen('CloseAll'); % ウィンドウを閉じる
例2
行列の画像データを作る
( meshgrid 関数)
• 正弦波格子などを表示する際には、meshgrid 関数を使うことが多い。
• [x,y] = meshgrid(-‐3:3,-‐3:3)の出力
-‐3 -‐2 -‐1 0 +1 +2 +3
-‐3 -‐2 -‐1 0 +1 +2 +3 -‐3 -‐2 -‐1 0 +1 +2 +3 -‐3 -‐2 -‐1 0 +1 +2 +3 -‐3 -‐2 -‐1 0 +1 +2 +3 -‐3 -‐2 -‐1 0 +1 +2 +3 -‐3 -‐2 -‐1 0 +1 +2 +3
-‐3 -‐3 -‐3 -‐3 -‐3 -‐3 -‐3 -‐2 -‐2 -‐2 -‐2 -‐2 -‐2 -‐2 -‐1 -‐1 -‐1 -‐1 -‐1 -‐1 -‐1
0 0 0 0 0 0 0
+1 +1 +1 +1 +1 +1 +1
+2 +2 +2 +2 +2 +2 +2
+3 +3 +3 +3 +3 +3 +3
戻り値X 戻り値y
例3
Sine関数
正弦波格子縞(垂直)を作成
-‐4 -‐4 -‐4 -‐4 -‐4 -‐4 -‐4 -‐3 -‐3 -‐3 -‐3 -‐3 -‐3 -‐3 -‐2 -‐2 -‐2 -‐2 -‐2 -‐2 -‐2 -‐1 -‐1 -‐1 -‐1 -‐1 -‐1 -‐1
0 0 0 0 0 0 0
+1 +1 +1 +1 +1 +1 +1
+2 +2 +2 +2 +2 +2 +2
+3 +3 +3 +3 +3 +3 +3
+4 +4 +4 +4 +4 +4 +4
引数y
m = sin(2*pi*(1/4)*y)
0 0 0 0 0 0 0
+1 +1 +1 +1 +1 +1 +1
0 0 0 0 0 0 0
-‐1 -‐1 -‐1 -‐1 -‐1 -‐1 -‐1
0 0 0 0 0 0 0
+1 +1 +1 +1 +1 +1 +1
0 0 0 0 0 0 0
-‐1 -‐1 -‐1 -‐1 -‐1 -‐1 -‐1 0 0 0 0 0 0 0
戻り値y
例3
関連するサンプルコード:
GrafngDemo.m
[x y] = meshgrid(widthArray, widthArray);
a=cos(fltInRadians)*radiansPerPixel; % 112行目 b=sin(fltInRadians)*radiansPerPixel; % 113行目 grafngMatrix = sin(a*x+b*y);
前の例の ”2*pi*(1/4)” と同じ要領
例3
反応の取得・記録
• キーボードのFとJ、どちらかが押されるまで待機
les_key = KbName('f');
right_key = KbName('j');
[keydown, fme, keyCode] = KbCheck;
while ~(keyCode(les_key)|keyCode(right_key)) [keydown, fme, keyCode] = KbCheck;
end
例4
関連するサンプルコード:
OldNewRecogExp.m
% 289行目
while ( KeyCode(oldresp)==0 && KeyCode(newresp)==0 ) [KeyIsDown, endrt, KeyCode]=KbCheck;
WaitSecs(0.001);
end
例4
サンプルコードを使った学習
• Psychtoolboxの関数がどのように使われるか、
自分で改変しながら確かめられる。
• 実験のテンプレートとしても使える
– PsychExampleExperimentsフォルダ
• 書き換えるときは「別名で保存」してからに!
さまざまな機能
提供される機能の一例
• PsychHardware: ハードウェアのサポート
– Bits++, Eyelink, DataPixx, Daq, 各種輝度計…
– もちろんMATLABでサポートしている機能が使える
• 刺激の書き出し
– 画像、動画(Screen関数)
• 心理物理学的測定法・データのフィティング
– Palamedes toolboxが便利な気も
モニタのキャリブレーション
• キャリブレーション(測光・フィッティング)
– CalibrateMonitorPhotometer .m – CalibrateMonSpd.m
– ColorCalなど複数の輝度計をサポート
– 要Curve fi}ng toolbox
• CLUTの操作
– Screen関数の‘LoadNormalizedGammaTable’
動画の書き出し
• 4つのコマンドで書き出しができる
– Screen CreateMovie
– Screen AddFrameToMovie – Screen FinalizeMovie
• ImagingStereoDemo.mを参考に
導入(インストール)
必要な環境
• OS: Windows, Mac, Linux
– Window:時間精度などに制約
– Mac: 複数ディスプレイの場合などに、提示のタイミン
グに問題
– Linux: 開発のベース
• 動作環境:MATLAB, Octave
– OSとの相性(WindowsではMATLABのみサポート)
インストールについて
• 公式サイトや、上述の日本語サイトに親切な インストラクション
– 日本語サイトには、非推奨環境へのインストール の例もあり、大変参考になる。
• 動画関係(再生・録画など)の機能について
は、GStreamerなどが必要になることも。