unknown@wiki Matlab

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

【ファイル名を動的に変える】
     filename = ['sc00_',num2str(j+4*(i-1)),'.pgm'];
 imwrite(B(:,:,j+4*(i-1)), filename,'pgm');

【ファイル名に0をつけて桁数を揃える】
       sprintf('%02d',j+4*(i-1))

論理演算子

&        論理積 
   |            論理和
   ~            否定
 

 

2値化 / 閾値処理

img2 = double(img > th);

画像 img の各画素の値を、閾値 th と比較して、
この閾値を越える座標では 1、それ以外では 0 となる2値化画像 img2 を作る。
何らかの型変換(↑の例では double)をしないと、論理値(logical)になってしまって、後の画像処理に不都合。

閾上(閾下)座標のリスト

[vy, vx] = find(img > th);

画像 img の各画素を見て、閾値 th より大きい画素があれば、その座標 (xi, yi) のリストを作り、
vx = [x1, x2, ..., xN], vy = [y1, y2, ..., yN] とする。

 

そして、X の2番目の列を削除するため、つぎのように行ないます。

  • X(:,2) = []
    

【テキストファイルの読み込み】
Loadで読み込んだほうがtextreadよりもはやい。Octaveでも使える。

 

【高速化】
for を使わない。

--組み込み関数を使って for文をなく-----------------

n = 1; wns = randn(100000, 1); for k=1:length(wns)    if wns(k) > a       idx(n) = k;       n = n+1;    end end

のコードを、

wns = randn(100000, 1); idx = find(wns > a);

----------------------------------------------

【エッジマップがずれる】
元画像が目で見て同じでも、数値を見てみるとずれている可能性がある。
つまり同じ圧縮変換をしていないと、数値が微妙にずれており、
そっからエッジマップを取るとまたずれ
ベクトルデータも同様にずれてしまう。

 

【グレイスケールに変換】
colormap(gray(256));

 

tic;toc;で挟むことによってその分の時間を計算できる。

axis image で元画像の辺の比で表示。
行列の場合は , はいらない。

reshape:行列の列をつないで行ベクトルを作成可能

【行の和】 

行列の列を行よりも優先的に処理する。和を取るときも列で計算したほうが楽。

だからベクトルデータの取り方も(64,1)で統一。

【行列とxy座標の関係】

xy座標と行列は対応関係が逆になる。xは列になり、yは行になる。