【ファイル名を動的に変える】
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番目の列を削除するため、つぎのように行ないます。
【テキストファイルの読み込み】
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は行になる。