パワーポイント - 東京海洋大学

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