I am Charmie

メモとログ

MatLab

ファイルからテキストデータを取得

色んな方法がある.fgetl1行単位でファイルからテキスト情報を取得.line = fgetl(fid)得られるデータlineはstring.fgetlがファイルの終端まで来ると,line=-1となる.textscanブロック単位でファイルからテキスト情報を取得.InputText = textscan(fid, '%…

plotyyにデータを追加

MatLabのplotyyで描画したプロットに,更にデータを追加したい時.プロットのハンドル?みたいなものを利用する.例)plotyyでプロットしたy1とy2のデータが最大となる場所に赤丸を追加でプロットする.% y1,y2をplotyyでプロット & AXにプロットのハンドルを…

y軸が異なるプロット

MatLabで共通のx軸を持ち,y軸のみが異なるプロットを一つのグラフに入れたい時.plotyyを使う.x=1:20;y1=exp(x);y2=log(x);plotyy(x, y1, x, y2);

フォルダ名の変更

MatLabでフォルダ名を変更する.movefile(str1,str2);str1,2でそれぞれフォルダ(ファイル)名を指定すれば,指定したフォルダ(ファイル)の名前をstr1->str2と変更する.

subplot

MatLabのsubplot: 複数のグラフや図を一つのplotエリアに描くための関数具体的な使い方はsubplot(m,n,p)プロットエリアをm行n列に分割し,p番目の面に指定した図やグラフを描画する.subplotに限らず,plotでもplotを保存する時に凡例がグラフからはみ出る問…

MatLabの凡例

legend('凡例1', '凡例2', ...);とコマンドすれば凡例がプロット内に表示される.しかし,''内の文字列内にや^があると,texのコマンドのような凡例が表示されてしまう.その原因は,Textオブジェクトの'interpreter'プロパティがデフォルトで'Tex'に設定さ…

非ゼロ要素の出力

nonzeros関数を使用.s = nonzeros(A)列順でAの中の非ゼロ要素からなる列ベクトルをsに返す.非ゼロ要素の数をカウントするにはlength(nozeros(A))として,非ゼロ要素からなる列ベクトルのサイズを調べてあげれば良い.

凡例に名前をつける

cellというのを使うとできるみたい.leg_plot = cell(1,3);for n=1:3 leg_plot{n} = sprintf('plot %d', n);endlegend(leg_plot);ゴリゴリ作るとこんな感じ?% プロットが上書きされないように固定hold onleg_plot = cell(1, 5);color_plot = [1 0 0; 1 1 0;…

ファイル名のパスとファイル名を分離

MatLabで文字列からファイル名とパスを分離する方法.[pathstr, name, ext, versn] = fileparts(filename)それぞれpathstr: ディレクトリ名name: ファイル名(拡張子は含まれない)ext: 拡張子(拡張子の前に.が含まれる)versn: バージョン例)>> filename='./te…

無参照の変数?

画像のカラーチャンネル数を知りたい時に,今まではsize関数を使って[y,x,c]=size(img);とやっていたけど,[~,~,c]=size(img);とやると余計な変数を定義しなくて済むそうだ.

GPSR

GPSR(Gradient Projection for Sparse Reconstruction)のセットアップMatLabでコンパイルする環境作成>> mex -setup質問通りに素直に進む.Rice Wavelet ToolboxのインストールFilesから適当なファイルをダウンロード.適当な場所でコンパイル.>> compileGP…

MatLabでの論理和・論理積

bitorとbitandという関数を使えば良い。res = bitand(src1, src2);

MabLab findpeaksで気をつけること

findpeaks関数を使う際に気をつける点。findpeaksは1次元データ中の極大値とインデックスを返す関数。[pks,locs] = findpeaks(A)データの端点は極大値として検出されない。もしデータの端点も含めたいなら何らかの情報をpaddingしないと無理。それか作為的に…

MatLabで極大値探索

findpeaksを使う。入力dataの極大値をpksに保存。locsはインデックス。pks = findpeaks(data)[pks,locs] = findpeaks(data)オプションsortstr: ソートした結果を出力'ascend'を指定: 最小値から最大値へと昇順にピークを出力'descend'を指定: 最大値から最小…

MatLabで2次元配列データの最大値検出

max関数を2回使う。一度目のmaxで各列の最大値の値(maxvec)とその行の位置(rowvec)二度目のmaxで行列全体の最大値(maxval)とその列の位置(column)[maxvec, rowvec] = max(A);[maxval, column] = max(maxvec);A(rowvec(column),column)>> A = magic(7)A = 30 …

MatLabでフォルダ内のファイルリストを作成

フォルダ内にある全ての画像に対して処理を行う。これをMatLabでやろうとして試行錯誤。必要な関数はD = dir('directory_name')これでdirectory_nameで指定したフォルダ内にあるファイルのリストを作成できる。パス名とワイルドカードが使えると書いてあり、…

MatLabの無名関数

無名関数というのがあるそうだ。fhandle = @(arglist) exprex.) f = @ 5*x^3 + 2*x^2 + 8*x + 9;1行で定義できる関数をこのように定義することで、余計なMファイルを作らなくて済むそうだ。

Load and Save 16bit image

My MatLab is R2009a. I don't guarantee that this info. is same as other versions.Suppose we have a 16bit image 'test.tif'. What we want to do is, first read the image and then save the image as 'res.tif'.Simply speaking, default imread and…

MATLAB 配列の複製

ベクトルで行列を埋めたい,もしくは行列で行列を埋めたい時.MatB = repmat(MatA, m, n)MatB のサイズは [size(MatA,1) * m, size(MatA, 2) * n]例>> MatA = [1;2;3]MatA = 1 2 3>> MatB = repmat(MatA, 3, 2)MatB = 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3>>…

Camera Calibration Toolbox for MatLab pt.2

続き.今度はステレオカメラのキャリブレーション.前提: ステレオカメラで同じシーンを撮影している. 2台のカメラともcalib_guiで内部・外部パラメータ共にキャリブレーション済み.mainの実行>> stereo_gui各カメラの内部・外部パラメータのロード>> Load…

Camera Calibration Toolbox for MatLab

キャリブレーション用Toolboxのメモここからダウンロード.main関数の実行>> calib_gui選択肢が以下の二つ.3000x2000画素x9枚の画像で実行したらエラーになったので,後者を選択した.Standard(全ての画像をメモリに格納)Memory efficient(画像を一つずつ読…

MatLabでファイル同士の依存関係を調べる方法

依存関係レポート(Dependency report)を使う.カレントフォルダのウィンドウを表示して,ファイル間の依存関係を調べたいフォルダを表示.レポート->依存関係レポートとすると,フォルダ内に存在する各ファイルの子関数,親関数のリストが出来上がる.これで…

MatLabからCのコードを読み込む

MEX(Matlab EXecutable)を使えば出来る.C/C++のコードをmexでコンパイルするとダイナミックリンクしたサブルーチンが生成されて,mファイルやビルトイン関数のように使える.C/C++の既存のコードを書きなおす必要がないし,matlabでは処理が遅いfor-loop系…

MatLab 強制終了

MatLabで実行中のプログラムの強制終了は Ctrl + C でできる.毎回MatLab自体を強制終了するやり方は,センスがない.

関数の返戻値

以前,matlabの便利な機能が,関数の返戻値を複数指定できる事だと書いた. 実は,C言語でも出来るっぽい.Cgの本を読んでいたら,そんな気がしてきた.やり方は,返戻値を構造体にする事.実際に試したわけではないので,本当に出来るか知らないけど,でき…

MatLabのfind

find関数ではまった. findは入力配列内の0ではない要素を示すインデックスを返す. 例えば a=[1 2 3 4]; find(a = max(a)) とすると,"4"を返す. あくまでも非零要素を示すインデックスを返すため,非零要素が複数ある時は,複数のインデックスを返してく…

MatLabのfprintfの改行

MatLabでテキスト出力する時に\nで改行されなかった.どうやら,テキストモードでファイルを開く必要があるらしい(詳細はここ).file = fopen('test.txt','wt');fprintf(file,'%i\n', a);fclose(file)

MatLabのimfilter

MatLabのimfilter関数について.オプションの値がよく分からなかったのでMatLabのヘルプから抜粋してみた.AをHでフィルタリングした結果をBに格納B = imfilter(A,H)B = imfilter(A,H,option1,option2,...)Optionについてcorrelation or convolution'corr'相…

最適化

とある論文のアルゴリズムを自分の研究で使いたくて,2週間ほど最適化の勉強.その論文では,最適化に共役勾配法(CG)を使っていたのだが,最適化について無知だったので,そもそもCGって何?という所から,実際に自分の研究で使うためには,どーすればいい…

MatLabでの実装

この前のミーティングで,今後使っていこうとしたアルゴリズムについて,検討すべき項目ができた.その時は,一般的なやり方を使えば大丈夫みたいに言ったものの,実はロジックがイマイチだったので,月曜にあらためて後輩とディスカッション.意外に混乱する…