天文はかせ幕下

Deconvolutionでスターシャープ!

はじめに

天体写真の星像をもとに、銀河や星雲の解像感を増すPixinsightのDeconvolution機能。これは、長焦点で撮影したDeepSky画像を対象に用いるものであると、顧問はいままで固定して考えていました。今回はその発想を変え、同手法を比較的短い焦点距離で撮影した天の川周辺などの画像に対して適用し、その微光星のスターシャープを行おう。というお話です。

このアイデアのおおもとは、例によって「もりのせいかつ」のkさんです。最近zoom会議で何度かお話しして、

「銀河にDeconvolutionを行う場合は微光星にも効果を及ぼしたい」

とおっしゃってました。またblogにも同様のことを書かれています。

なのでこのエントリは、おそらくですがkさんがサラッとやってらっしゃることを、バカ丁寧に書いたものです。よろしくお付き合い願います。

Deconvolutionの基本的事柄については本ブログのエントリ

あるいは「たの天」の丹羽さんのブログ

などをご参考ください。

素材

f:id:snct-astro:20210828110600p:plain

EOS6D+250mmのカメラレンズで撮影した北アメリカ星雲周辺の画像を例に説明します。微光星びっしりで処理の難しい対象です。

おおざっぱな処理過程

  1. 光星だけを選択する星マスクの作成
  2. 上のマスクを適用してDeconvolutionを実行

の2段階になります。それぞれの段階について以下で説明します

1.微光星だけを選択するマスク

光星だけを選択するマスクの作成には、MultiscaleLinearTransform(MLT) を使うのが便利です。以下のようにやっていきます。

まず、マスクをなるべくきれいにするために、RGBWorkingSpaceをR=G=B=1の設定で元画像に適用します 

f:id:snct-astro:20210828114250p:plain

したら、元画像のグレースケール画像を取り出します。

f:id:snct-astro:20210828114531p:plain

赤枠をクリックしてグレースケール画像を取り出し

取り出したL画像です↓

f:id:snct-astro:20210828115827p:plain

この画像からマスクを作ります。MultiscaleLinearTransform(MLT)を起動します。

f:id:snct-astro:20210828120058p:plain

光星だけを選択するマスクを作る場合は、画像の微光星の大きさに応じてlayerを選んであげればよいです。顧問の北アメリカの場合

f:id:snct-astro:20210828135644p:plain

という設定でうまくいきました(この時のレイヤーに選び方の根拠について、簡単な説明を巻末に付記します)。これをうえのL画像に適用すると下のようになります。

f:id:snct-astro:20210828135905p:plain

L画像にMLTを施したマスク画像

仕上げにbinarize機能

f:id:snct-astro:20210828140037p:plain

を上のマスク画像に施して、マスクを2値化しておきます。

f:id:snct-astro:20210828140456p:plain

さらに、マスクを少し大きくしておくとこの後の処理がスムースです。Morphological Transformationを以下の設定で適用しました

f:id:snct-astro:20210828142646p:plain

ダメ押しでマスクに数ピクセルのボカシをかけておきます

f:id:snct-astro:20210828144247p:plain

これでマスクの作成は完了です(こんな長ったらしい方法、だれか参考にしてくれるのだろうか?)

2.Deconvolutionを適用

上で作成したマスクを元画像に適用したら、Deconvolutionを起動します。

f:id:snct-astro:20210828144758p:plain

調整するパラメータは三つです。まずPSFはParametricPSFを選び、”StdDev”の値を調整して右に表示される星像が、元画像の微光星と同じ程度になるようにしておきます(通常通りDynamic PSFを用いても大丈夫です。その場合、効果を与えたい微光星だけを選択してPSFを作るとよいと思います)。

Algorithmの”Iteration”は及ぼす処理の強さに関係するので適宜かえてください。回数が少ないほうが処理が穏やかになります。

Deringingの”Global Dark”は星の周りにリンギングが出ないぎりぎりの小さい値を選んでください。これは何度もやり直して追い込むしかありません。私の画像の場合0.007で最適でした。ほとんどのリニア画像ならこの値は0.01前後になると思います。

結果

処理のBefore/Afterです

f:id:snct-astro:20210828150534p:plain

分かりにくいので、アニメで

f:id:snct-astro:20210828151235g:plain

それほど劇的というわけではありませんが、処理前にぼんやり暗かった微光星はシャープになり輝度が増しています。一方で少し明るい星は輝度だけがシュリンクした結果、色味が増していますね。これを良しとするか悪しとするかは皆さんのご判断にお任せしたいと思います。

結び

画像処理ではここからストレッチを行い、仕上げることになります。上のDeconvolutionを行った場合と行わなかった場合について、同じ強さののストレッチを行った結果を並べておきます。

f:id:snct-astro:20210828200706j:plain

↑ストレッチ後(Deconvolutionなし)

f:id:snct-astro:20210828200752j:plain

↑ストレッチ後(Deconvolutionあり)

分かりにくいので、gifアニメで↓

f:id:snct-astro:20210828201756g:plain

まだまだ分かりにくいので、拡大したgifアニメ↓

f:id:snct-astro:20210828202301g:plain

ビミョーな違いですけど、わずかにシーイングがよい条件で撮影した時のような、そんな星像が得られたのではないかと思います。

 

 

補遺:MLTで星マスクと作るときの基本的なこと

MLTは、Photoshopでいうところの「ハイパス」の、さらに自由度を高めたような機能です。いろいろな応用のあり、顧問もそのすべては把握できていません。ここでは星マスク用途に限定してその基本的な考え方を説明します

f:id:snct-astro:20210828120058p:plain

星マスク作成で大事なのは”Layers”の各行の緑色のチェックマークの選び方です。

 

各Layerに対応する”Scale”の値は画像のピクセル長さを表しています。”Layer 1”は1px、”Layer 3”は4px...といった具合で、”Layer R”は「16px以上のすべてピクセル長」に対応しています。たとえば

f:id:snct-astro:20210828134344p:plain

とした場合、

「画像のうち4px以上8px未満で変化している情報のみとりだし、1px~3pxおよび8px以上の長さで変化している情報を除外する」

ことをします。やってみると次のようになります

f:id:snct-astro:20210828135228p:plain

たしかに4~8pxくらいで変化している星だけが白く取り出されます。

通常、星マスクをMLTで作る場合は次のレイヤー選択がよく用いられます

f:id:snct-astro:20210828205003p:plain

こうすると2px以上16px未満の大きさの星を取り出すことになります。1pxを除外しているのは、ノイズを星と認識しないようにするためです。

 それさえわかってしまえばいろいろ応用ができます。このエントリでは3,4,,Rのレイヤーを除外することで微光星だけを選択するマスクを作りました。反対に大きい星だけを選択するマスクを作るときは

f:id:snct-astro:20210828205510p:plain

という風に小さなレイヤーを除外していけばいいわけです。

また長焦点の画像の星マスクや、画面内に2等星や1等星などの大きく写った星があって、それをしっかりカバーするマスクを作りたいときは、右上の”Layers”の値を変更してあげます

f:id:snct-astro:20210828210227p:plain

そのうえで

f:id:snct-astro:20210828210419p:plain

という風にレイヤーを除外すれば、64px未満の大きさの星までを含んだマスクを作ることができます。ただこうすると星雲の構造までマスクに残ってしまうこともあるので、それはレベル補正などで取り除くことになります。

 

星マスクの作成、最近は便利なStarnetにとってかわられてしまった感がありますが、処理は速いですし、工夫次第でいろいろなマスクが作れますので、ぜひ挑戦してみてください。