デジカメraw画像のFITS化について
近年デジカメの性能向上によって、天体画像の簡単な取得ができるようになってきている。 しかし通常のデジカメ画像は jpegフォーマットになっておりデジカメ内で現像処理がされることで、本来の天体情報がある程度損なわれてしまう(もっとも、一般的な用途で問題になるようなことは少ないかもしれないが)。 そこで、ここではデジカメが取得した天体情報をなるべく損なわないように処理するためにデジカメの一番生のデータである raw画像を天体画像処理用の FITSフォーマットにする手法について解説する。
1.デジカメの画像データの形式について
デジカメの一般的データ形式は jpeg であり、非可逆なデータ圧縮などのために元の情報が(ある程度)失われている(右図では jpegデータの品質を変えて画像が悪化する様子を強調している)。
jpeg形式は RGB各8ビットだが、デジカメの撮像素子は各12ビット程度を持っており、このビット数の違いからも元データが失われている。
天文用データ形式は FITS形式だが、一般のデジカメで FITS形式で保存できるものはない(天体用の冷却カメラでは可能なものもある)。
デジカメで一番元の情報を残せる形式としては、取得したデータをそのまま保存する raw形式がある。
↓
raw形式の画像を抜き出して FITS形式にすれば Makali'iなどの教育用ソフトで処理ができていいのではないか。
[jpeg画像の劣化サンプル]
2.rawデータを扱える天文系ソフト
rawデータを扱う上での問題としては、カメラメーカーごとに rawの規格が違い、ソフトでの対応が必要なことがあげられる。
例えば、天文分野でよく使われるソフトのうち、デジカメのrawデータの読み込みができて、FITSにも対応しているものとしては以下のようなものがあげられる。 (これ以外にも raw画像を表示するだけなら Picasa などもある。)
StellaImage (有償)/Makali`i(無償)
Iris(フリーソフト)
ImageJ(フリーソフト)
3.rawデータのベイヤー配列と天文系ソフトの問題点
上記のソフトウェアでの raw画像の扱いには問題点がある。
一般に raw画像はカメラの撮像素子の構造が RGBのカラーフィルタをつけた素子を碁盤の目状に配列したものになっているので、それをそのままの形で書き出したものになっている(右図上参照)。
上記のソフトは raw画像のべイヤー配列のまま読めるが、RGBの各素子の値だけを直接書き出す機能はない。RGGB の4つの画素を一組にして何らかの処理をして元と同じ解像度のデータを書き出したり、RGBごとに処理する場合も補間などで元の解像度と同じ複数プレーンのデータにしたりする(右図下参照)、そして補間の処理で何をしているかが確実に判明しているわけではない。
例えばフリーソフトの iris は decode raw files のメニューで raw から fits ファイルを生成するが、生成された FITSファイルは元の画像と同じピクセル数の RGB 3プレーンのデータキューブになる。 もし特定のプレーン(例えばR画素だけ)を書き出せたら縦横半分ずつの画像になるはずだが、そうした操作はできない。
したがって、もし RGBの各色の画素データだけを抜き出すことができれば、それが一番ピュアな元データを扱えることになる。
[ベイヤー配列]
4.星空公団のraw2fitsソフト(raw から RGB各データの書き出しソフト)
星空公団で開発・公開されている raw2fits というソフトは、まさに上記で触れた raw 画像の RGB各データを抜き出すための Windows用ソフトである(サイトにenterして開発製品の一番下のソフトウェアにある)。
比較的最近のデジカメの rawにも対応している。 Unix系でも dcraw という rawデータの読み込み用のソフトはあるが、前記のソフトと同様の抜き出しの問題がある。
ただし、変換機能のみのシンプルなソフトで UIがそっけない。 処理する rawファイルをドラッグ・ドロップすると黒いコマンドウインドウが開いて RGBの各ファイルを作成してメッセージもなく終わる。
5.raw2fits を呼び出すラッパープログラムの開発
Makali'iのような教育用ソフトを使う初心者向けに、raw2fitsを呼び出して使うグラフィカルなUIを持つラッパープログラムを用意すれば、使用に対する敷居を下げることができるのではないかと考えた。 手軽に開発して試せるスクリプト言語が良いと考えたが、何を使うのが良いか?
バッチファイル ⇒ MS-DOS時代からの古いユーザ以外は×?
WindowsScript ⇒ バッチの後継だが UIは作成できるか?
perl ⇒ perl + Win32::GUI + PAR で GUI付実行ファイルが作成可
ruby ⇒ ruby/Tk + Ocra で GUI付実行ファイルが作成可
Python ⇒ Python + WxPython + py2exe で同様に可
最終的には、情報が比較的あり、以前から試してみたかった ruby で行くことにした。
6.ラッパープログラム raw2fits_win
今回、開発したラッパープログラム(raw2fits_win)は次のようなものである。
Ruby/Tk のスクリプト。最近の ruby であれば Tk も同梱されているので、Windows環境にインストールすればすぐに使え、修正も容易である。(コメントを含めても200行ほどで収まっている)
Ocra による Windows実行ファイル化をすればダブルクリックで起動する Windowsソフトとして使える。(ただし raw2fits を呼び出した時に黒いコマンドウインドウは出る)
使用方法はGUI画面に出る番号順に、1.rawデータの入ったフォルダ指定、2.ファイル一覧から処理するファイルの選択(複数選択可)、3.処理実行、とするだけである。
処理後は、RGBごとにフォルダを作って振り分けるので天体とダークなどをRGBごとに処理できる。(元のraw2fitsの仕様に従って、red, blue, green1, green2, green の5つのフォルダができる。green だけはべイヤー配列で2画素あるので、其々と平均を取ったものの3フォルダになっている)
(キャノンのデジカメではファイル容量の小さい mRAW, sRAW という形式で保存でき、この場合は red, blue, green の3つのファイルが生成されるのでフォルダ振り分けも3つになる。RAW は通常のベイヤー配列を記録したものだが、mRAW, sRAW は RGB をスタックしたものらしい。)
想定している使い方は、天体とダークやフラット画像(複数枚?)を取った時に、RGBで振り分けて FITSファイル化し、例えば Rのフォルダで一時処理(ダーク、フラット処理など)をして処理結果のデータを得て解析に使う、などである。
スクリプトと実行ファイルのダウンロード:raw2fits_win.zip
(注:元の raw2fits は前記の星空公団のサイトから入手できる。raw2fits.exe と raw2fits_win.exe を同じフォルダに入れて、raw2fits_win.exe をダブルクリックで起動する。raw2fits.exe を呼び出す時に黒いコマンドウインドウが出るが害はない。)
[raw2fits_winのGUI画面]
参考文献
以下の書籍を参考にしました。
「Rubyアプリケーションプログラミング」オーム社(2002)
「Rubyを256倍使うための本 界道編」ASCII(2001)
「たのしいRuby 第4版」ソフトバンククリエイティブ(2013)