5.10
圧縮データの表現ここでは
Standard 4.0
で取り入れられた圧縮データの取扱い、具体的にはFITS image
とメタデータを保持して必要に応じてオリジナルを展開できるBINTABLE extension
につ いて概説する。詳細はStandard 4.0
の原論文やその中の参考文献を参照のこと。5.10.1
タイル・イメージ圧縮ここでは
n
次元のFITS image
を圧縮した結果のバイトストリームをFITS Binary
Table
の可変長配列に格納し、image
ヘッダーキーワードをtable
ヘッダーに保存するためのプロセスについて述べる。一般的な原則としては、最初に
n
次元のimage
を矩形の グリッドに分割しsubimage
または“
タイル”
を作る。次に個々のタイルをデータブロッ クとして圧縮したバイトストリームをFITS Binary Table
の可変長配列の行に格納する。image
をタイルに分割することによりimage
全体を解凍することなくimage
の一部を展開することができる。デフォルトのタイリングパターンは、
2
次元のimage (
又は高次元の キューブ)
の各行をタイルにし各々がNAXIS1
ピクセルを含むようにする。アプリケーショ ンや圧縮アルゴリズムによっては、デフォルトのパターンが最適とは限らないので、次に 示すキーワードを使って他の矩形タイリングパターンを定義してもよい。小さなimage
の 場合は全体を1
つのタイルに圧縮するので十分な場合もあり、その時は出力されるbinary
table
は1
つの行のみを持つ。3
次元のデータキューブの場合はソフトが各plane
にアクセスするようなら、各
plane
をタイルにするのがいいかもしれない。5.10.1.1
要求されるキーワードBINTABLE extension
で要求されるキーワードに加えて 次のキーワードが圧縮FITS image
の構造を記述するためにFITS binary-table extension
のヘッダーに予約されている。すべて必須キーワードである。ZIMAGE – [
論理値;
値T] FITS binary-table extension
が圧縮image
を含む場合は論理値T
。論理的にはそのextension
はtable
ではなくimage
と解釈されるべきである。ZCMPTYPE – [
文字列;
デフォルトなし] image
を圧縮するのに使われたアルゴリズムを示 す文字列を与える。表12
のものがあるが将来追加されるかもしれない。ZBITPIX – [
整数;
デフォルトなし]
非圧縮時のFITS image
のBITPIX
の値。整数値。ZNAXIS – [
整数;
デフォルトなし]
非圧縮時のFITS image
のNAXIS
キーワードの値。整 数値(
即ち軸の数)
。ZNAXISn – [
整数;
添字;
デフォルトなし]
非圧縮時のFITS image
の対応するNAXISn
キーワードの値。正の整数値(
即ちn
軸のサイズ)
。非圧縮
image
のBITPIX, NAXIS, NAXISn
キーワードのコメントは、ZBITPIX, ZNAXIS,
ZNAXISn
キーワードの対応するフィールドにコピーされるべきである。5.10.1.2
他の予約されたキーワード 圧縮image
タイルは元のFITS image
のピク セル順のままbinary table
に格納されるべきである。次のキーワードは圧縮image
のBINTABLE Extension
への格納時に使うために予約されている。ZTILEn – [
整数; n > 1
に対しデフォルト1]
圧縮タイルのn
軸に沿ったピクセル数を表 す正整数(n
は1
からZAXIS)
。このキーワードがない場合はZTILE1 = ZNAXIS1
で 他のZTILEn
は1
とみなされる。ZNAMEi – [
文字列;
デフォルトなし]
圧縮・展開に必要なアルゴリズムのパラメータ名。ZVALi – [
文字列;
デフォルトなし]
上記で使われたアルゴリズムのパラメータ値。FITS
で有効なデータタイプなら何でも使える。ZMASKCMP – [
文字列;
デフォルトなし]
オプションのnull-pixel
データマスクの圧縮に使 われるアルゴリズム名。ZQUANTIZ – [
文字列;
デフォルトは‘NO DITHER’]
浮動小数のimage
ピクセルを整数値に 量子化する際に使われるアルゴリズム名。このキーワードがない場合は量子化の際 のディザリングなしとみなされる。ZDITHER0 – [
整数;
デフォルトなし]
浮動小数ピクセル値の量子化の際に使われるランダ ムなディザリングパターンのseed
を与える正整数。また、元の非圧縮
FITS image
のキーワードの値やコメントのコピーのためにZSIMPLE, ZEXTEND, ZBLOCKED, ZTENSION, ZPCOUNT, ZGCOUNT, ZHECKSUM, ZDATASUM
キーワードが 予約されている。これらは元のFITS image
で関連するキーワードが使われてなければ 使ってはならない。もしFITS primary array
やIMAGE extension
が圧縮されたら、元のimage
の全てのヘッダーキーワードは(
上で触れた必須キーワードを除いて)
圧縮image
を含む
binary-table extension
のヘッダーにコピーされることが強く推奨される。5.10.1.3 table columns
圧縮image
タイルを含むFITS binary table
のために2
つの
column
名が予約されて定義されている。COMPRESSED DATA – [
可変長;
必須]
このcolumn
の各行は対応するimage
タイルを圧縮 したバイトストリームを含む。column
のデータタイプは、圧縮アルゴリズムが8-bit
バイト,
整数の16-bits, 32-bits
のどれを出力するかに応じて‘1PB’,‘1PI’,‘1P’(
も しくは‘1QB’,‘1QI’,‘1Q’)
のどれかになる。GZIP COMPRESSED DATA – [
可変長;
オプション] image
タイルのピクセル値がGzip
でロス レス圧縮されていたら結果のバイトストリームはこのcolumn
に収める(‘1PB’,‘1QB’
フ ォーマットで)
。これらのタイルの対応するCOMPRESSED DATA column
はnull pointer
となる。浮動小数の圧縮のために次の節で述べるオプションの量子化法を使う場合は次の
column
が必須となる。5.10.
圧縮データの表現ZSCALE – [
浮動小数;
オプション] ZZERO
と共に使い各タイルの浮動小数ピクセル値を整数値に変換するスケールファクター。
I
i= round
( F
i− ZZERO ZSCALE
)
(10)
ここでI
i とF i
はピクセル値の整数値と(
元の)
浮動小数値。round
関数は結果を最 も近い整数に丸める。ZZERO – [
浮動小数;
オプション]
浮動小数のピクセル値を上式で整数にする時のゼロ点の オフセット値。他にも未定義のピクセル値を量子化で変わらないよう保存するための
ZBLANK
や未定義 ピクセルの位置を記録するためのNULL PIXEL MASK
も定義されている。5.10.2
浮動小数データの量子化浮動小数の
image
はロスレス圧縮できる場合もあるがノイジーなimage
は往々にして あまり圧縮できない。有用な情報を損ねずにノイズ除去できれば高圧縮も可能となる。ノ イズ低減のための一般的なテクニックとして浮動小数値を前節の式(10)
で量子化された 整数にスケーリングする手がある。指定量のノイズ低減のための効果的なアルゴリズム はWhite & Greenfield (1999)
とPence et al. (2009)
に述べられている。それによればZSCALE
の値はimage
のバックグラウンド領域で測ったRMS
ノイズのある割合Q
から 計算される。Pence et al.(2009)
は各ピクセル値に含まれるノイズのバイナリbit
数はlog
2(Q) + 1.792
となることを示した。Q
値は圧縮ファイルサイズに直接影響し、Q
を半 分に減らせばピクセルあたり1 bit
ファイルサイズを減らせる。従って高圧縮を達成するには
image
に要求される測光的・位置天文的精度を保ちつつ最小のQ
を使えばよい。天体
image
にこのスケーリング法を適用する時の潜在的問題はimage
中のfaint
領域の光度測定時にシステマチックなバイアスが生じる可能性があることだ。
image
の量子化 が粗いとsky
のバックグラウンド領域の測定光度は直近の量子化レベルにバイアスがかか るだろう。こうした潜在的なバイアスを低減する効果的テクニックの1
つが、量子化のプ ロセス中にランダムノイズを導入し量子化されたピクセル値をディザリングすることだ。このためには全てのピクセルを単に式
(10)
でスケーリングする代わりに少し改良した次 式で量子化レベルをランダマイズすればよい。I
i= round
( F
i− ZZERO
ZSCALE + R
i− 0.5 )
(11)
ここでR
i は0.0
から1.0
の間の乱数で0.5
を引くことで平均値を0.0
にしている。元の 浮動小数に戻すには同じR
iを使って次のようにすればよい。F
i= ((I
i− R
i+ 0.5) ∗ ZSCALE) + ZZERO. (12)
この引算ディザリングテクニックを使う肝は、整数に量子化する時と浮動小数に戻すと きに正確に同じ乱数系列を使うことであり、こうした再現可能な疑似乱数系列生成のアル ゴリズムはStandard 4.0
のAppendix I
にある。5.10.2.1
ディザリングアルゴリズムZQUANTIZ
キーワードではディザリングに関し て’NO DITHER’, ’SUBTRACTIVE DITHER 1’, ’SUBTRACTIVE DITHER 2’
のどれかを指定 する。浮動小数image
に対し引算ディザリングをかけるプロセスは次のとおりである。1. 0.0
から1.0
の間の単精度乱数(RN)
を10000
個生成する。2. 1.
の乱数列からユニークな乱数系列を生成するためのseed
として1
から10000
の 間の整数を1
つ選ぶ。3.
整数のseed
値をZDITHER0
キーワード値として圧縮image
のヘッダーに書き込む。4.
浮動小数image
を量子化する前に2
つのオフセットパラメータI
0, I
1 の初期値を次 のように計算する。I
0= mod(N
tile− 1 + ZDITHER0, 10000) (13) I
1= INT(RN(I
0) ∗ 500.) (14)
ここでN
tile はタイルを圧縮したバイトをbinary table
に格納するのに使われる行 番号で、RN(I
0)
は最初のステップで計算された乱数列中のI
0th 番目の乱数値。5.
乱数RN(I
1)
を使って式(11)
で最初のピクセルから量子化していく。I
1 は順次イン クリメントし、上限の500
に達したらI
0 をインクリメントしてI
1 を式(14)
で再計 算する。I
0 が上限10000
に達したらI
0を0
にリセットする。ピクセル値がIEEE NaN
だったら量子化やディザリングせずZBLANK
キーワードの指定値に保存するが 一貫性のためI
1 はインクリメントする。6.
量子化された整数配列をZCMPTYPE
キーワードで指定されたアルゴリズム(
デフォル トは’RICE 1’)
でロスレス圧縮する。7.
圧縮したバイトストリームをタイルに対応するbinary table
の適切な行のCOMPRESSED DATA column
に書き込む。8.
タイルに対し式(11)
で使われたスケーリングとオフセットの値をbinary table
の同 じ行のZSCALE, ZZERO column
に書き込む。9.
ステップ4
から8
をimage
の各タイルに対して行う。5.10.3
タイル・テーブル圧縮非圧縮の
table
は個々のタイルが行のサブセットを含むように分割され、各タイルの各データ
column
が展開・圧縮されて、可変長配列バイトとして格納されて圧縮table
として出力される。圧縮
table
自体は元の非圧縮table
と同じ順で同じ数のcolumn
を含むFITS binary table
で、非圧縮table
の行サブセットからなる各タイルを1
行として含む。5.10.3.1
要求されるキーワード 非圧縮table
の全てのキーワードは同じ順で圧縮table
のヘッダーにコピーされなければならない。特にcolumn
記述キーワードTTYPEn, TUNITn, TSCALn, TZEROn, TNULLn, TDISPn,TDIMn
とWCS
のcolumn
関係のキーワードは、元のtable
と圧縮table
で同じ値・データ型を持たねばならない。単純にコピーしてはいけないのは、必須キーワードの
NAXIS1, NAXIS2, PCOUNT, TFORMn
とオプションキーワードのCHECKSUM, DATASUM, THEAP
である。これらのキーワードは圧縮
table
自体の内容と構造を記述しなければならない。元の非圧縮table
にあるこれらのキーワードの値を圧縮
table
のヘッダーに格納するための予約キーワードは次の通り。
Dalam dokumen
FITS の手引き
(Halaman 71-78)