■画像配列の基礎と操作■
IDLに画像を取り込んだ場合、そのデータ配列はBSQ,BIL,BIPのどれかになる。
マシンが左上から順に横へデータを読み込んでいく。
BSQはバンドの塊別に二次元の画像データを並べたものである。
BILはライン別に画素をバンドの順番で並べたものである。
BIPは画素別にバンドの値を集めてライン番号順に並べたものである。
基本的にはBSQが分かりやすい。
IDLにおいてはBSQを(X, Y, Z)とすると、BILは(X, Z, Y)、BIPは(Z, X, Y)の配列に相当する。
ちなみにERmapperの画像データ形式はBILである。
画像配列の操作
■任意の範囲の切り取り■
上の図のような30*30画素のデータから黄色い部分を抜き出す。
img=Indgen(30, 30) 例画像データの作成
cut_img=img(11:17, 7:13) (Xの最初:Xの終わり, Yの最初:Yの終わり、(Zの最初:Zの終わり)) もちろんZ面も切り出せる。
上記のような方法はPrintやTVコマンドの時にも併用できる。
■BILからBSQへの変換■
切り出しの方法は配列の変換にも使える。
例:BILフォーマットのimg(200,7,200)をBSQファーマットのimage(200,200,7)にするには以下の通り。
for i=0, 6 do begin i は0から始まり6まで1ずつ増加させるfor文
image(*,*,i)=img(*,i,*) change from BIL to BSQ
endfor
■*(アスタリスク)による抜き出し■
上のBILからBSQの変換例で*マークを用いている。このマークを使うことによって画像の一部分を抜き出すことができる。
(*,10,10)と書くと、yの10個目&zの10個目にあるすべてのXの値を指すことになる。
例えば:下の図のようにRGBの3バンドの画像がimg(100,100, 3)であり、そこから真中の緑のバンドだけを抜き出す場合は
image=img(*, *, 1) となる。
以上。