最近話題のStarNet++なるソフトを使ってみたのでソフトの紹介と従来手法との軽い比較をしてみようと思います。
StarNet++とは
StarNet++は天体写真から星を除去して星雲のみの画像を出力してくれるソフトです。画像内で星雲の上に星が乗っているような領域は上手く背後の星雲の構造を推定して補完してくれます。
こちらがダウンロードページ
Starnet++ download | SourceForge.net
対応環境はAVX命令セットに対応したCPUを搭載した64bitのWindows PCということになっています。ここ数年のPCであれば問題なく使えますね。
もともとPythonで実装されていたStarNetというプロジェクトをC++で書き直したものみたいで、Pythonで書かれたオリジナルバージョンはGitHubでソースコードが公開されています。
StarNet - GitHub
StarNet++は現状ダウンロードできるのは.exe実行ファイルのみとなっているのでWindows環境でしか使えませんが、Pythonのオリジナルバージョンの方は(Pythonの知識があれば)Macユーザーでも利用できるのではないでしょうか。
また、StarNet++は入力画像のフォーマットが16bit TIFFファイルのみの対応となっていますが、オリジナルのほうならソースコードを少し書き換えれば他の形式にも対応できたりして…?
僕はPythonを使ったことがないのでこのへんは詳しい人にお任せします。
中身の処理には現在とても勢いのあるディープラーニングの技術が使われているみたいです。
ついに天体写真にもディープラーニングが使われるようになってきたんですね。
使い方
それでは使い方を説明します。上のサイトからダウンロードした圧縮ファイルを解凍するとこのようなファイル構成になっています。実際に使う実行ファイルは 「rgb_starnet++.exe」 か「mono_starnet++.exe」 です。入力画像がカラーの場合はrgb~の方を、モノクロの場合はmono~の方を実行します。
ソフトと言ってもコマンドラインで実行するプログラムなのでGUIなどはありません。
コマンドライン操作に慣れてない方は次の手順で実行できます。
フォルダ内に処理したい入力画像(16bit TIF)をコピー
フォルダの適当な場所で[Shiftキー]を押しながら右クリック
[PowerShellウィンドウをここに開く]をクリック
出てきたPowerShellに以下のように入力します。
./rgb_starnet++.exe (入力ファイル名) (出力ファイル名) STRIDE
入力画像をrgb_test5.tif、出力画像をoutput.tif、STRIDE値を32としたければ、
./rgb_starnet++.exe rgb_test5.tif output.tif 32
といった感じです。モノクロの場合は./mono_starnet++.exe ~としてください。
Enterキーを押せば処理が始まります。処理が終わるとフォルダ内に指定した名前で画像が出力されます。
基本的に操作はこれだけです。
唯一指定する変数であるSTRIDE値というのは画像を小さなブロックに分割して処理する際のブロックサイズ(1辺のピクセル数)のことです。
STRIDE値は偶数値ならなんでもいいですが数字が小さくなるほど処理時間は一気に増加します。デフォルトでは64となっており、指定しなければ64で実行されます。
性能評価
それでは実際の出力結果を見てみましょう。テストに使ったのはいつもの天の川の写真で完成画像を16bit TIFFで入力しました。STRIDEは64としています。オリジナル画像とStarNet++を通した画像の比較が以下になります。
星雲の構造を維持したまま綺麗に星だけ消えてますね。ちなみに4300万画素くらいの画像だと処理が終わるのに40分ほど要しました。(i5-4440, RAM16GB)
CPUがボトルネックになっているようだったので研究室のつよつよPC(i7-8700K)で試してみたところ20分ほどでした。マルチスレッドで動作していたのでスレッド数が多いCPUなら直でその恩恵が得られる気がします。
次に比較のためにPhotoshopを使って星を除去する処理をしてみた結果、このようになりました。
Photoshopに一発で星を除去してくれる機能があるわけではなく、いろいろな汎用的な処理を組み合わせて星を消しています。(主にダスト&スクラッチを使っています)
対象の画像を見ながら最適な処理を施せるのでPhotoshopでもある程度はきれいに星を消すことができます。
次はStarNet++とPhotoshopでの比較です。
全体の結果としては似通った雰囲気になったのでもうちょっと細かく見てみます。
まずはアンタレス付近。Psでは輝星の面影が残っているのに対してStarNet++のほうは綺麗に除去できています。
続いてS字状星雲。StarNet++は分子雲の細かい構造まで維持できていますが星があった場所がところどころ暗く落ち込んでいます。これは元画像の色収差が補正しきれていないのが原因だと考えられます。この現象は他の領域でも多く見られました。
最後に、M8、M20付近。StarNet++は星雲の一部が星と認識されてしまったのか完全に消えてしまっています。これはM16,M17でも同様に見られました。
なお、どの領域でもStarNet++のほうが細かいディテールを保っているように見えました。
今回はテストに用いた画像が標準域のレンズで撮影した星野写真だったのでこのように小さな星雲が誤って消えてしまいましたが、ある程度望遠で撮った写真であれば星雲がまるまる消えるなんてことは起きないんじゃないかなと思います。
広角星野のみで数枚試したくらいなので幅広い天体写真に対して言えるかは未知数とした上で総評としては、ちょくちょく苦手なシチュエーションはあるけれど多くの場合で高いクオリティの画像を出力してくれるかなという印象です。
なんといってもPhotoshopでの処理はある程度知識が必要なのに対して、StarNet++はそれを全て自動でやってくれる上にクオリティはPsと同等かそれ以上だという点が素晴らしいと思います。
ディープラーニング恐るべし…
ちなみにこのようなディープラーニングの処理では、乱数を使っていたり計算順序が非決定的だったりするらしく必ずしも入力に対して出力結果が同じにならない場合があるらしいのでそれも検証してみました。
まず、同一PCで同じ入力画像を使って2回処理してみた結果、全く同じ出力画像が生成されました。
次に、別のPCで同じ入力画像を使って処理してみた結果でも、全く同じ出力画像を得ることが出来ました。
それぞれ2回しか試してないですが、おそらく入力に対して出力は一意に決まりそうな感じです。
これなら処理の再現性を気にされる方でも安心して使えそうですね。
ただ,Pythonで書かれたオリジナルの方は動作環境によってはGPUを利用して高速化する処理をしているみたいなのでこの場合でも同様な結果が得られるかは不明です.
まとめ
最近話題になっていたStarNet++のちょっとした紹介記事でした。今後もディープラーニングの技術を使った画期的なアプリケーションが出てくるかもしれないですね。
StarNetのオリジナルの方は開発されてから半年以上経ってるみたいなので海外の情報にも注目していきたいなと思いました。
あとこのようにして星を除去した画像をどうやって使うかですね。
完成画像に対して星を除去して遊ぶのも面白いですが、折角なら処理途中のどこかの過程で使えたらいいなぁと考えています。
それでは。