MATLABで画像の評価をする方法

このQ&Aのポイント
  • MATLABで画像の評価をするためには、テンキーを使用して被験者に回答してもらいテキスト形式に書き出す必要があります。
  • 具体的な方法は、MATLABのプログラムで画像を読み込んだ後、ウィンドウを初期化し、被験者の回答をテキスト形式に書き出すことです。
  • プログラムの最後にはウィンドウを閉じる処理を追加する必要があります。
回答を見る
  • ベストアンサー

MATLABで画像の評価

今MATLABでプログラムを書いているんですが、テンキーで被験者に回答してもらいテキスト形式に書き出す様にするには、どう書いたら良いのですか? ソースプログラムは A=imread('1.bmp'); B=imread('2,bmp'); window=Screen(0,'OpenWindow'); % ウィンドウの初期化 Screen(window,'FillRect',[255 255 255]); % ウィンドウ全体を白で塗る pause Screen(window,'FillRect',[255 255 255]);Screen(window,'PutImage',A);WaitSecs(1.0);Screen(window,'FillRect',[255 255 255]);Screen(window,'PutImage',B);pause Screen('CloseAll'); % 終了 この先がわかりません。 困っています。教えてください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Kules
  • ベストアンサー率47% (292/619)
回答No.1

前回「複数のimage」云々の質問に回答したものです。 そうですね… 一番簡単なのはinputを使うことですかね? P=input('数字を入力して下さい','s'); とするとコマンドウィンドウに「数字を入力して下さい」と表示されて、 なにか入力したらそれがPに入力した文字列(数字含む)が入るので、 あとはテキストファイルをfopenかなんかで開いて(ファイル識別子fid) fprintf(fid,'%s',P) とでもすればテキストに書きこまれますね。 入力を数字に限りたいのであればwhileループに入れて、数字が入力された時だけ 抜けるようにすればいいですね。 コマンドウィンドウ以外でしたい(uicontrolのエディットボックスとか)の場合は他の対策が必要ですね。 「こういうことじゃないんだよ」とか「こういうことなんだけど説明が下手で意味がわからないよ」という場合は 補足していただければと思います。 参考になれば幸いです。

siro81655260
質問者

お礼

回答ありがとうございます 出来たらソースをお願いしたいのですが宜しいですか? すみません よろしくお願いします

その他の回答 (1)

  • Kules
  • ベストアンサー率47% (292/619)
回答No.2

A No.1のKulesです。 >出来たらソースをお願いしたいのですが宜しいですか? ソースも何も前回回答の中に細切れで書いてあるものでほぼ全てなんですが… ああ、いくつか扱ってないものがありましたね。 ・fopen fid=fopen('ファイル名'); とすれば、「ファイル名」のファイルが作られ、そのファイルを識別する識別子がfidに出力されます。 ファイル名は絶対パスでも相対パスでもいいですが、どこかのフォルダを指定した時そのフォルダが存在しないとエラーになります(勝手に作ってくれるような親切はなかったと思います) ・str2double 文字列を数値に変換します。変換出来ない時はNaNを返します。 ・isnan 入力がNaNかどうかを判別します。NaNの時はtrueを返します。 ・break forループやwhileループから抜ける時に使います。ただし、抜けれるのは1つだけです。 (二重のforループの中で使っても、外側のforループより外には出られない) ・while文(無限ループ) while(1)とすれば無限ループになります。工夫すれば別の書き方もできますが、説明がちょっと面倒なので。 (頑張れそうなら考えてみて下さい) ループの終わりはendで示します。 ・if文 言わずと知れた(?)条件分岐です。 if 条件文  trueの時実行するやつ else  falseの時実行するやつ end となります。 elseはなくても構いません。 ということで、実際の動きを書くなら while(1)  入力を要求、入力されたものをSに代入  Sを数値に変換し、Dに代入  SがNaNかどうかを判断し、NaNでなければループを抜ける end; ファイルを開き、識別子をfidに代入 fprintfを用いてSを書きこむ となります。 実際のソースは書きません。もっと複雑な、例えばGUIを駆使するようなもので説明するのも面倒な時は書きますが、 今回はそういうわけではないので(Matlab特有の難しさ、みたいなものもないですしね。前回の回答は「条件文の真偽をインデックスに直接使える」というのはMatlab特有のものなので書いたにすぎません) 「厳しい」とか「何言ってんだ××」みたいに思うかも知れませんが、試行錯誤をして、エラーを出したりしながらとにかく独力で書かなければ力はつきません。 Matlabは書き方をミスってもよっぽど変なことを書かない限りはただのエラーで済みますし、メモリが破壊されたり強制終了されられることはありません。特に今回のような例であればそのようなことはまず起こり得ないでしょう。 とにかく手を動かしましょう。 「こう書いたけど動かない、なんでだ」というのがあればまた補足願います。 参考になれば幸いです。

siro81655260
質問者

お礼

ありがとうございます 頑張ります わからないところがあればまた質問するかもしれませんがその時はよろしくお願いします。

関連するQ&A

  • エクセルので文字の取得

    Screen(window,'FillRect',[255 255 255]);Screen(window,'PutImage',C);WaitSecs(1.0);Screen(window,'FillRect',[255 255 255]);Screen(window,'PutImage',A);pause の文字列があり、 今取り出したいのが(window,'PutImage',C);の部分と(window,'PutImage',A);のAの部分です。 どのようにしたらいいのかわかりません だれか教えてください。 よろしくお願いします。

  • MATLABで画像の表示方法

    a = imread('C:\Users\Labmember2011\Desktop\MatlabStuffs\2266057137_611af466d4.jpg'); b = imread('C:\Users\Labmember2011\Desktop\MatlabStuffs\pc.jpg'); cont = 0; %フレームカウンター figure; tic; %ストップウオッチタイマの開始 while(toc<10) %10秒の間アニメーション if toc > cont*0.5 %0.5秒間隔でフレームを更新 if mod(cont, 2) %カウンターが偶数の時はaの画像を表示 image(a); else %奇数の場合はbの画像を表示 image(b); end drawnow() %確実に描画させる cont = cont+1; end pause(0.05); %CPU使用率が上がるのが嫌な場合はpauseを入れる。(フレーム更新の精度はその分落ちる) end で実行したら2枚の画像が切り替わるプログラムが実行されました。 複数枚画像の表示方法はどのように書いたら実行できますか? 教えてください。

  • matlabについての質問です。

    matlabについての質問です。matlab初心者です。 3つ以上のデータ列について相関係数を求めるプログラムを教えてください。 イメージとしては データ列a b cについて a b c a 1 b 0.2 1 c 0.8 0.4 1 このような結果が出るようなプログラムを書きたいです。 わかるかた、回答宜しくお願いします。

  • Matlabを使った心理学実験

    Matlabを使って、刺激呈示から回答までの反応時間を測定する心理学実験のプログラムを作らないといけないのですが、どうしても先に進められないので、どなたか教えてください。 刺激は8秒間呈示されて、その間に被験者が回答すれば反応時間を記録して次の課題へ、また8秒以内に回答できなければそのまま次の課題へ進むという設定です。刺激はimreadを使って読み込み、呈示した後、 waitforbuttonpress を使って回答を待つようにしました。 今の段階で押されたキーと、反応時間を記録し、次の課題へ移行することは出来るのですが、8秒の回答制限時間をプログラムに組み込むことが出来ません。timer あるいはuiwait 、timeoutを使うことが出来ないかと考えているのですが、これらのコマンドの使い方がいまいちわからず、困っています。 どなたか、教えていただければ大変ありがたいです。また他のコマンドで可能であれば、全然かまわないので、是非教えていただきたいです。 なお、今の環境上、実験にはPsychtoolbox が使えないので、 Psychtoolboxなしでお願いします。どうしても、この問題を解決しないといけないので、どうかよろしくお願いします。

  • matlab のfigure について

    matlab のfigure について MATLAB初心者です。 figure ウィンドウ内の'OuterPosition'と'Position'から 'Position'のみを表示させる為に、以下のHPを参考にしてプログラムを記述していますが、 どうしてもうまく出来ません。 http://undocumentedmatlab.com/blog/tag/outerposition/ http://nibot-lab.livejournal.com/73290.html お知恵を貸して頂くと助かります。 MATLABは 7.3.0(R2006b)を利用しています。

  • MATLABのプログラミングについてご質問です

    MATLAB初心者です。 現在、以下の環境を使っています。 ------------------------------- OS:Windows XP MATLABのバージョン:R2007a ------------------------------- 以下の内容をプログラムでどう組み込めばよいのか分らないため、質問させて頂きました。 詳しい方、ご教授のほどお願いします。 (1)Windowsのペイントで、ドラッグ&ドロップすると    +----------+    |         |    +----------+  このように、点線で枠ができると思います。それをMATLABで表現する方法  (始点座標と終点座標はマウスで操作するため、座標は可変になります) (2)MATLAB-GUIに画像データ(sample.tif)を表示する方法 (3)MATLAB-GUIを表示した時に、表示位置を常にパソコンのモニター中央にする方法 (4)MATLAB-GUIで画面A, Bとある場合、画面Aの[次へ]ボタンを押すと画面Aを消して画面Bを表示する方法 長くて申し訳ございませんが、ご回答よろしくお願いします。

  • MATLABのグラフ

    MATLAB という汎用数値解析プログラムを使っています。 現在、100×100の配列の中にランダムな数字(0~40)が入ったデータを扱っています。 その中にある数値を棒グラフで表現したいのですが、どうしたら良いでしょうか。 ヒストグラムの表現はできたのですが、私が行いたいのは1行目の1には数字A,1行目の2には数字B・・・と言ったようなグラフを作りたいです。 周囲にMATLABに詳しい人も居なく、独学では限界を感じて質問しました。 ご回答よろしくお願いいたします。

  • matlabのプログラミング

    MATLABのプログラミングについてご質問ですが、 構造体配列を使った、二つの多項式を足すプログラムの作り方をご存じの方いらっしゃいますか? (コマンドのpolyaddを構造体配列で作ったプログラム) 例、 a=struct('exponent',{1,2,3},'coeff',{0,1,0}) b=struct('exponent',{1,2,3},'coeff',{1,0,1,}) でプログラム(a,b)を発動すると answer= 1x3 struct array with fields: exponent coeff となり、workspaceにある答えが昇順表示になるプログラムです。 よろしくお願いします。

  • matlabのプログラミング

    MATLABのプログラミングについてご質問ですが、 構造体配列を使った、二つの多項式を足すプログラムの作り方をご存じの方いらっしゃいますか? (コマンドのpolyaddを構造体配列で作ったプログラム) 例、 a=struct('exponent',{1,2,3},'coeff',{0,1,0}) b=struct('exponent',{1,2,3},'coeff',{1,0,1,}) でプログラム(a,b)を発動すると answer= 1x3 struct array with fields: exponent coeff となり、workspaceにある答えが昇順表示になるプログラムです。 よろしくお願いします。

  • MATLABの計算精度

    いま,  A=[0.803, -0.803, 1.2124, 0.803, -0.803, -0.803, 1.2124, 0.803]; とします. このとき,次の2通りの演算をします. (i) a=0; for I=1:8  if( A(I)>=0 )   a=a+A(I)*0.25;  else   a=a+A(I)*0.75;  end end (ii) Bi=[0.25, 0.75, 0.25, 0.25, 0.75, 0.75, 0.25, 0.25]; b=sum(Bi.*A); (i)と(ii)によって得られる和の値をMATLABのコマンド上で表示すると, 同じ値として表示されるのですが,a-b と計算すると,0 ではなく, 8.04e-15のようになります.(現環境ではMATLABが使えないので,確認できませんが,もっと大きいデータでやったとき場合には,上記のように誤差が生じました). 困っているのは,現在組んでいるプログラムでは計算した値の正負によって 異なった計算をする必要があり,計算精度が非常に重要になってきます. そのため計算結果が例えば +1.4e-15となるか -6.4e-16 となるかによってその後の計算結果が大きく変わってしまいます. MATLABでは,上記(i)(ii)のような誤差が生じるためか,+1.4e-15となってほしいところが,なぜか -6.4e-16となってしまいうまくプログラムが動きません. MATLABでは,for文によって和をとるのではなく,一回でまとめて計算しなければ誤差が生じるのでしょうか? また,MATLABで計算精度を変更できないのでしょうか? (formatコマンドによって,「format short g」「format double g」としましたが有効な小数点が増減するだけで結果は同じでした.) よりよい精度で計算するにはどうしたらよいのでしょうか? 回答よろしくお願いします.

専門家に質問してみよう