490 likes | 944 Views
Psychtoolbox 入門. 草野 勉 (東京海洋大学). このチュートリアルについて. 対象とする方 授業等でプログラム言語を学習する機会がなく、いままで PowerPoint などで実験をして いた 方々 よくご存知の方には、 適宜 、 情報の補足・修正をして いただける と幸いです。。 ねらい とにかく実験のためのプログラミングの敷居が低く感じられること. 細かい話は。。. Web で公開 する予定なので、記録のためのメモをとって頂く必要はありません。
E N D
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年夏季大会
例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 「簡単です」という例 • 画面左上に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]); ウィンドウを指定 (前のOpenWindowの戻り値) ウィンドウ左上からの 位置とサイズ 色は白 サブコマンド: 長方形描画 日本視覚学会2013年夏季大会
例1 Screen関数 レクト:よく使う表示形式 計算を容易にする関数が用意: “help PsychRects” • 例:Screen('FillOval',window,255,[0,0,200,200]); ウィンドウを指定 (前のOpenWindowの戻り値) ウィンドウ左上からの 位置とサイズ 色は白 サブコマンド: 長方形描画 日本視覚学会2013年夏季大会
例1 for文について • MATLABのfor文 for i = 1:10% iが1から10になるまで a = i % 変数aにiを代入 end 日本視覚学会2013年夏季大会
例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'); 日本視覚学会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年夏季大会
知らない関数・サブコマンドの調べ方 • 関数のヘルプ:help {関数名} • help Screen • (Screen関数の特殊事情)Screen と入力するだけで、サブコマンドの一覧が表示 • サブコマンドのヘルプ: {関数名} {サブコマンド}? • Screen OpenWindow? • ググる 日本視覚学会2013年夏季大会
例2 画像ファイルの提示 • 画像ファイルの読み込み • 全画面ウィンドウを作成 • ウィンドウに描画 • ウィンドウを提示 日本視覚学会2013年夏季大会
例2 画像の読み込み • imread関数を使う例 • ルートディレクトリ直下の画像test.tiff m = 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年夏季大会
例3 行列の画像データを作る(meshgrid関数) • 正弦波格子などを表示する際には、meshgrid関数を使うことが多い。 • [x,y] = meshgrid(-3:3,-3:3)の出力 戻り値X 戻り値y x座標が要素の値 y座標が要素の値 日本視覚学会2013年夏季大会
例3 正弦波格子縞(垂直)を作成 Sine関数 m = sin(2*pi*(1/4)*y) 引数y 戻り値y 日本視覚学会2013年夏季大会
例3 関連するサンプルコード:GratingDemo.m [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年夏季大会
例4 関連するサンプルコード:OldNewRecogExp.m % 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年夏季大会