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