• ベストアンサー

MATLABについてです

画像処理に使うMATLABについてです。 MATLABでimagescを使って、データを画像化しました。 画像化してカラーバーを表示させました。 ここからが質問です。カラーバーの値は普通にしてたらそのデータのままの値(自分の場合、光の強度)ですが、これをログにしたいです。 カラーバーの数値をログにするにはどうしたらいいのでしょうか? 簡単にできるのか、また、imagesc以外に別の何かを使うのか。 参考書を見ても、カラーバーの数値をログにするやり方はないので、詳しい方教えて下さい。 お願いします。

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

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

三度Kulesです。 >colorbar とか使うのでしょうか。ネットとか見てもよくわかりません。 ええと…前回の私の回答に付けたリンク先見ました? 「 colorbar - カラー スケールを示すカラー バー 代替方法 Figure ツール バーのカラー バー ツール でプロットにカラー バーを追加するか、Figure メニューの [挿入]、[カラー バー] を使用します。 」 って書いてますよね?カラーバーの挿入ボタンを押してカラーバーを出現させるのはあくまで代替方法で、コマンドウィンドウかあるいはmファイル中でcolobar;と打ち込んでもカラーバーは出てきます。 また、同じリンク先に colorbar(...,'PropertyName',propertyvalue) という使い方が書いてある通り、関数colorbarは入力を受け付け、colorbar(…,プロパティの名前,プロパティ値,…)という形で使うことができます。 正直この辺はプロパティの操作に慣れてないとキビシイところだと思います。使いながら覚えていくしかないかと。 (特にこのあたりのグラフィックスハンドルの操作について丁寧に説明されているサイトや本は見たことがありません。私にサイトを立ち上げるスキルと時間があれば自分で作りたいぐらいなんですけどね(笑)) とりあえずだまされたと思って、figureを一通り作り終えた後に colobar('Ytick',10*log10(0.1:0.1:1));←縦長カラーバーの時 colobar('Xtick',10*log10(0.1:0.1:1));←横長カラーバーの時 と打ち込んでみて下さい。 これで思った通りのものが出なければ、その症状とともに補足願います。 参考になれば幸いです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

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

A No.1のKulesです。 >色と数値の対応はそのままで、カラーバーの横の数値をログにしたいです。 めんどくさい方が来ましたね(笑) そうですね、もう一つ確認させて下さい。 例えば色強度のデータが0~1で表現されているとすると、(細かいことを考えなければ)colorbarの目盛は0:0.2:1とかになっていると思います。その場合、 ・単純にそのスケールの中での常用対数値にしたい。例えば1に対応するところには0と書きたいし、0.5に対応するところには-0.3010と書きたい。 ・そのスケールの値をそのまま常用対数値に直すだけではだめ。例えば、1に対応するところには「0dB」と書きたいし、0.1に対応するところには「-10dB(-20dBかな?)」と書きたい。(dBは付けても付けなくても一緒) の二通りが考えられます。 前者の場合は、 http://www.mathworks.co.jp/help/ja_JP/techdoc/ref/colorbar.html を見るとaxes propertyの設定をそのまま使える(colorbarってaxesだって知ってましたか?visible propertyがoff(かcallback)にされているんで普段は気付かないですけどね。なんのことかわからなかったらスルーして下さい)ので、 colorbarを図の下や上(つまりバーが横長)の時はxtickを、左や右(つまりバーが縦長)の時はytickを調整してやる 例えば線形で0.1:0.1:1に目盛を打ちたい時はcolobar('Ytick',10*log10(0.1:0.1:1))とすれば所望の動作になるはずです。 後者の場合はさらにメンドクサイです。ytickとyticklabelをいじるぐらいしか有効な方法がなさそうなので。([dB]をつけなくていいというのであれば、imagescに与えるデータやaxesのClimプロパティなどをいじることで何とかなるかもですが) こちらがしたいという場合はさらに補足願います。 参考になれば幸いです。

adw8mck3
質問者

補足

imagescで画像化させて「カラーバーの挿入」を押してカラーバーを右に表示させるやり方を今までやってきました。 このカラーバーの数値をログにしたいです。 前者の単純にそのスケールの中での常用対数値にしたいです。 colorbar とか使うのでしょうか。ネットとか見てもよくわかりません。

全文を見る
すると、全ての回答が全文表示されます。
  • Kules
  • ベストアンサー率47% (292/619)
回答No.1

>カラーバーの数値をログにするにはどうしたらいいのでしょうか? これだと何をしたいのかイマイチはっきりしないので補足要求します。 次のうちどれをしたいのでしょうか? ・カラーバーの色と数値の対応はそのままで(例えば光強度0が青に対応し、1が赤に対応するなら0.5が緑みたいな)、カラーバーの横に書かれる数値をログにしたい。(この場合、0,0.2,0.4,0.6,0.8,1のところに目盛を振ると-Inf,-0.6090,-0.3080,-0.2219,-0.097,0のようになります) ・カラーバーの色と光強度の対数値を対応(例えば0dBが青で20dBが赤なら10dBが緑みたいな)させたい ・カラーバー上の色の帯を対数に対応させたい(例えば青は赤より幅を大きくしたい) 2つ目の場合imagescに与える色強度をlogにすればほぼ解決します。 1つ目と3つ目の場合はcolorbarのグラフィックハンドルをもらっていろいろいじれば出来ますがちょっとめんどくさいです(もっと簡単な方法もあるかも知れませんが、私は知らないです) 上記について補足願います。

adw8mck3
質問者

補足

一番最初の場合です。 色と数値の対応はそのままで、カラーバーの横の数値をログにしたいです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • matlabでの値をエクセルで扱う方法

    matlabのsimulinkを用いてシミュレーションを行い、 scopeで波形を読み取りました。 そのときの波形のデータを数値として出し、エクセルでグラフに処理したいのですがmatlabデータとエクセルとを互換する方法が分かりません。 教えてください よろしくお願いします。

  • C言語→MATLABへの変換で、困っています。

    学生研究でMATLABを使用しています。 光学測定系で画像を取り込み、それを解析する実験を行っています。 MATLABはプログラム内の値の変更や処理の追加できることから 大変助かっています。 そこで、もともとはC言語でやっていた3種類の処理を 一つのMファイルで行いたいと思い。 只今、C→MATLAB変換するプログラムの書き直しを行っています。 そのうち2種のプログラムは行列の計算がメインだったため何とか Mファイルに書き直すことができたのですが、 最後のひとつが難しい関数らしきものが多く、 MATLABに書き直すことができるプログラムなのかもわからない状態です。 そこで、 ・C→MATLAB変換可能なプログラムか? ・書き直すにあたってどこを部分を直せばよいのか? をアドバイスいただけないでしょうか? ↓MATLAB化したいC言語ファイル http://karispace.web.fc2.com/cmat2.c 一枚のbmp画像から4枚のdatデータを出力するプログラムです。 C言語とMATLABの三ヶ月前に勉強して、使用しており、基礎がわかる程度です。 よろしくお願いします。

  • MATLABのDICOM画像表示

    いつもお世話になっております。 現在、MATLABでDICOM画像を扱って画像処理を行おうとしているのですが、MATLABでDICOM画像(unit16)を表示 A = dicomread('ファイル名.dcm'); imshow(A,[]); させた画像がImageJやDICOMviewerで表示させた画像と比べて暗く(階調数が多く)感じられ、原画像を表示することができません。 unit16に問題があると思い、unit8に変換しましたが、画像は暗い画像で、かつ、同じピクセル値に線が入った画像となってしまいました。 どうすれば原画像を表示させることができるのでしょうか? アドバイスよろしくお願いします。

  • MATLABの初歩?

    最近始めた画像処理。 MathWorksから提供されたサンプルプログラム。 MATLABから画像を読み込みヒストグラムを計算しようとすると 「関数’imhist’(タイプ'unit8'の入力引数)が未定義です」 と表示されます。 ちなみに、 ・image pressing ・image Acquisition などは評価版です。 対処方法をご教授いただける方いらっしゃいますか?

  • 【MATLAB】配列内の数値のキャンセル方法

    MATLAB という汎用数値解析プログラムを使っています。 現在、100×100の配列の中にランダムな数字(0~40)が入ったデータを扱っています。 しかし、中にはマイナスの値や100を超える値も時々入ってしまっています。 できれば0~40の間の値の中で平均値や最大・最小値を算出したいと考えています。 この外れ値を計算せず(もしマイナスや40以上ならその値は無かったことにして)平均値等を出すことは可能でしょうか? if文なども考えたのですが、いまいち書き方が分からず困っています。 どうかご回答よろしくお願いいたします。

  • MATLABの射影変換についての質問です。

    MATLABの射影変換についての質問です。 1枚の画像に3×3の行列をかけて画像変換するつもりです。しかし、その画像自体は3×3ではないので、直接かけることができません。 そこで、3×3以外の画像行列に、3×3行列をかけて、変換された画像を表示する方法をお聞きしたいです。 どうぞ宜しくお願いします。

  • 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を用いて以下のようなプログラムを構築しています 1.ファイルを読み,その値を100行7列の行列Aとする 2.Aの10行目と11行目の間に1行7列の行列B1を挿入する (イメージ的にはEXCELの行の挿入です) 3.同様に20行目と21行目の間に1行7列の行列B2を挿入する 4.以降10行ごとに繰り返す となります.ここで2の処理にあたる「行列の特定の列の間に別の行列を挿入する」方法がわかりません いろいろ調べたのですが、このような方法はどこにもありませんでした MATLABに詳しい方,教えていただけないでしょうか?

  • MATLABの使い方に関していくつか質問

    MATLABの使い方に関していくつか質問をお願い致します。 ・MATLABはスクリプトと関数を別のmファイルに記述して保存しますが、 小さな関数が増えてくると関数をいちいち開くのが大変です。 一つのmファイルにスクリプトと関数、あるいは複数の関数を記述して保存することは可能でしょうか? ・プログラムを更新するごとにバックアップを取ることで、何か不具合があっても元に戻せるようにしているのですが MATLABは複数のファイルに内容が書かれてあるため、フォルダ単位でバックアップを取る必要があります。 これら複数のmファイルを一つのプロジェクトファイルにまとめて保存することは可能でしょうか? ・エディターを開いた状態でメインウインドウをクリックすると エディターが隠れてしまいますが、エディターを常に前面表示して、隠れないようにすることは可能でしょうか? ・セミコロン無しでプログラムを書くとコマンドライン上でそれらの値が表示されます。 このとき、 xxx = 12345 のようにイコールの後に二回改行が自動的に入って表示されるのですが この改行を無くして xxx = 12345 のように表示するように変更することは可能でしょうか? よろしくお願いいたします。

  • MATLABでのデータ保存(for文等で)

    初めて質問させていただきます。 MATLABで以下のようなfor文で1000回まわすとします。 for i=1:1000 c=rand(1000,1); fid=fopen('data1','wt'); fprintf(fid,'%f\n',c); end このままでは、最終的に1000回目のcの値だけがdata1に保存されます。 そうではなく、1~1000回目のcの値をそれぞれ別のファイルとして保存したいと思っております。(できればdata1~data1000という形で) 参考書などを読みあさったのですが、どう組めばいいのかわからず困っています。 for文等で、保存するファイル名の名前を、繰り返す度に変える方法などご存知の方おりましたら教えてください。よろしくおねがいします。