はじめに
天体写真の星像をもとに、銀河や星雲の解像感を増すPixinsightのDeconvolution機能。これは、長焦点で撮影したDeepSky画像を対象に用いるものであると、顧問はいままで固定して考えていました。今回はその発想を変え、同手法を比較的短い焦点距離で撮影した天の川周辺などの画像に対して適用し、その微光星のスターシャープを行おう。というお話です。
このアイデアのおおもとは、例によって「もりのせいかつ」のkさんです。最近zoom会議で何度かお話しして、
「銀河にDeconvolutionを行う場合は微光星にも効果を及ぼしたい」
とおっしゃってました。またblogにも同様のことを書かれています。
なのでこのエントリは、おそらくですがkさんがサラッとやってらっしゃることを、バカ丁寧に書いたものです。よろしくお付き合い願います。
Deconvolutionの基本的事柄については本ブログのエントリ
あるいは「たの天」の丹羽さんのブログ
などをご参考ください。
素材
EOS6D+250mmのカメラレンズで撮影した北アメリカ星雲周辺の画像を例に説明します。微光星びっしりで処理の難しい対象です。
おおざっぱな処理過程
- 微光星だけを選択する星マスクの作成
- 上のマスクを適用してDeconvolutionを実行
の2段階になります。それぞれの段階について以下で説明します
1.微光星だけを選択するマスク
微光星だけを選択するマスクの作成には、MultiscaleLinearTransform(MLT) を使うのが便利です。以下のようにやっていきます。
まず、マスクをなるべくきれいにするために、RGBWorkingSpaceをR=G=B=1の設定で元画像に適用します
したら、元画像のグレースケール画像を取り出します。
取り出したL画像です↓
この画像からマスクを作ります。MultiscaleLinearTransform(MLT)を起動します。
微光星だけを選択するマスクを作る場合は、画像の微光星の大きさに応じてlayerを選んであげればよいです。顧問の北アメリカの場合
という設定でうまくいきました(この時のレイヤーに選び方の根拠について、簡単な説明を巻末に付記します)。これをうえのL画像に適用すると下のようになります。
仕上げにbinarize機能
を上のマスク画像に施して、マスクを2値化しておきます。
さらに、マスクを少し大きくしておくとこの後の処理がスムースです。Morphological Transformationを以下の設定で適用しました
ダメ押しでマスクに数ピクセルのボカシをかけておきます
これでマスクの作成は完了です(こんな長ったらしい方法、だれか参考にしてくれるのだろうか?)
2.Deconvolutionを適用
上で作成したマスクを元画像に適用したら、Deconvolutionを起動します。
調整するパラメータは三つです。まずPSFはParametricPSFを選び、”StdDev”の値を調整して右に表示される星像が、元画像の微光星と同じ程度になるようにしておきます(通常通りDynamic PSFを用いても大丈夫です。その場合、効果を与えたい微光星だけを選択してPSFを作るとよいと思います)。
Algorithmの”Iteration”は及ぼす処理の強さに関係するので適宜かえてください。回数が少ないほうが処理が穏やかになります。
Deringingの”Global Dark”は星の周りにリンギングが出ないぎりぎりの小さい値を選んでください。これは何度もやり直して追い込むしかありません。私の画像の場合0.007で最適でした。ほとんどのリニア画像ならこの値は0.01前後になると思います。
結果
処理のBefore/Afterです
分かりにくいので、アニメで
それほど劇的というわけではありませんが、処理前にぼんやり暗かった微光星はシャープになり輝度が増しています。一方で少し明るい星は輝度だけがシュリンクした結果、色味が増していますね。これを良しとするか悪しとするかは皆さんのご判断にお任せしたいと思います。
結び
画像処理ではここからストレッチを行い、仕上げることになります。上のDeconvolutionを行った場合と行わなかった場合について、同じ強さののストレッチを行った結果を並べておきます。
分かりにくいので、gifアニメで↓
まだまだ分かりにくいので、拡大したgifアニメ↓
ビミョーな違いですけど、わずかにシーイングがよい条件で撮影した時のような、そんな星像が得られたのではないかと思います。
補遺:MLTで星マスクと作るときの基本的なこと
MLTは、Photoshopでいうところの「ハイパス」の、さらに自由度を高めたような機能です。いろいろな応用のあり、顧問もそのすべては把握できていません。ここでは星マスク用途に限定してその基本的な考え方を説明します
星マスク作成で大事なのは”Layers”の各行の緑色のチェックマークの選び方です。
各Layerに対応する”Scale”の値は画像のピクセル長さを表しています。”Layer 1”は1px、”Layer 3”は4px...といった具合で、”Layer R”は「16px以上のすべてピクセル長」に対応しています。たとえば
とした場合、
「画像のうち4px以上8px未満で変化している情報のみとりだし、1px~3pxおよび8px以上の長さで変化している情報を除外する」
ことをします。やってみると次のようになります
たしかに4~8pxくらいで変化している星だけが白く取り出されます。
通常、星マスクをMLTで作る場合は次のレイヤー選択がよく用いられます
こうすると2px以上16px未満の大きさの星を取り出すことになります。1pxを除外しているのは、ノイズを星と認識しないようにするためです。
それさえわかってしまえばいろいろ応用ができます。このエントリでは3,4,,Rのレイヤーを除外することで微光星だけを選択するマスクを作りました。反対に大きい星だけを選択するマスクを作るときは
という風に小さなレイヤーを除外していけばいいわけです。
また長焦点の画像の星マスクや、画面内に2等星や1等星などの大きく写った星があって、それをしっかりカバーするマスクを作りたいときは、右上の”Layers”の値を変更してあげます
そのうえで
という風にレイヤーを除外すれば、64px未満の大きさの星までを含んだマスクを作ることができます。ただこうすると星雲の構造までマスクに残ってしまうこともあるので、それはレベル補正などで取り除くことになります。
星マスクの作成、最近は便利なStarnetにとってかわられてしまった感がありますが、処理は速いですし、工夫次第でいろいろなマスクが作れますので、ぜひ挑戦してみてください。