【連載】PixInsightを使った天体写真の画像処理 ③ 前処理(2)

前回の記事に引き続き、前処理の手順について、私の方法を説明します。

バックグラウンド除去

撮影した天体写真には、大気光や光害などによって、背景の明るさに勾配が生じます。これを修正するために、撮影画像から生成したバックグラウンドを、撮影画像から差し引く修正を行います。
PixInsightには、このようなプロセスが2種類あります。
“DynamicBackgroundExtraction” (DBE)と”AutomaticBackgroundExtractor” (ABE)というものです。
DBEはバックグラウンドと思われる点を手動で指定し、バックグラウンドを生成します。一方、ABEは撮影画像をダウンサンプリングし、多項式で近似したバックグラウンドを自動的に生成します。私は処理の手軽さからABEを愛用しています。
このABEですが、これまでのプロセスとは異なり、単一のプロセスだけでは、撮影画像それぞれに対して個別に実行することができません。そこで、次のような手順で作業を進めます。

ImageContainer

Debayerまで完了したファイル(以下、サブフレーム)を、”ImageContainer”と呼ばれるプロセスに格納します。これは、格納したファイル全体に対して、同じ処理を行うことのできるプロセスです。”ProcessContainer” (後述)と組み合わせることで、複雑なプロセスを、個別の画像に対して実行することができるようになります。

“PROCESS” → “Image Container”を起動し、右下の”Add Files”ボタンより、サブフレームを読み込みます。

図1 ImageContainer

ABEの設定

ImageContainerのウィンドウを開いたまま、ABEを開きます。
設定が必要な項目は、次の通りです。

  • Function degree: バックグラウンドを生成する際の多項式の最高次数nを指定します。n=4であれば、4次式を使ってバックグラウンドを生成します。
    nの決定方法については、次項にて説明します。
  • Target Image Correction → Correction: Subtraction を選択します。
    “Discard background model”, “Replace target image” にチェックを入れます。
図2 ABEの設定

Function degree の決定方法

Function degree は、バックグラウンドを生成するための非常に重要なパラメータです。特に、背景の輝度勾配が大きい場合は注意が必要です。
(経験上、広角(~50 mm)で撮影した画像に多いです。中望遠以上(135 mm~)では問題が起きにくい傾向にあります。)
毎回、サブフレームを使ってテストを行い、次のような手順で、パラメータを追い込みます。

はじめに、任意のサブフレームを開き、次の設定でABEを実行します。
パラメータを設定したら、”◣”をサブフレームのウィンドウにドラッグアンドドロップし、実行します。

  • Function degree: デフォルトの4から開始
  • Correction: “Discard background model”, “Replace target image” のチェックを外します。
図3 ABEをテストする

処理が終了すると、図4のように2つの画像が生成されます。一つは生成されたバックグラウンド、もう一つはバックグラウンド補正が終わったサブフレームです。

図4 テスト結果

図4左を見ていただくと、画像の左側が緑色にカブっていることが分かります。また、図4右のバックグラウンドは、画像の左側が赤くなっており、正しいバックグラウンドが生成できていないことを示しています。
Function degree はバックグラウンドを生成するうえで使用する多項式の最大次数を表していることから、nの値が大きいほど、局所的な輝度勾配を生成できます。
しかし、元画像の輝度勾配が大きい場合、明るさが急激に変化している部分をサンプリングしてフィッティングしようとする結果、フィッティングが悪化するものと思われます。

このような場合の対策として、Function degree の値を小さくします。次のトライとして、私の場合は、n = 2に下げています。
再度実行した結果、画像右側の緑カブリが改善しましたが、まだ輝度勾配が残っています。
うまくいかない場合は、nの値を変えながら試行錯誤します。

図5 Function degree の値を変更

そこで、図5の画像に対し、n = 4として再度ABEを実行します。
これにより、輝度勾配がきれいに修正されました。

図6 ABE (n=2) → ABE (n=4)

追記: パラメータが決まったら行う設定

上記までの操作でパラメータが決まったら、ABEの設定を次の通り変更します。

  • Correction: “Discard background model”, “Replace target image” のチェックをONにします

これにより、ProcessContainerで逐次処理を行っても、処理が終わった画像がいちいちポップアップしなくなります。

より便利にするため、テスト用(上記2点のチェックなし)・本番用(上記2点のチェックあり)の2つのプロセスインスタンスを保存しておくと便利です。

パラメータが決まったらABEの設定を変更する
テスト用・バッチ処理用のプロセスインスタンスを作成しておく

追記: Function degreeの値の決め方

2020年12月現在、Function degreeの設定を上記から変更し、バッチ処理で各サブフレームに適用するFunction degreeの値を1にしています。
前述の通り、この値はバックグラウンドを生成する際の補間に使用する次数となりますので、値が1の場合は線形のバックグラウンドが生成されます。通常、光害は地上付近から放射されていますので、線形に変化するバックグラウンドとして光害カブリを取り扱うことは妥当な近似といえるでしょう。
また、フラット補正で完全にフラットが合わず、スタック後に周辺減光が残る、または過補正となることがあります。この際は、Function degreeの値を2にしています。これにより、同心円状のバックグラウンド画像を生成できるようになり、周辺減光の補正に適したバックグラウンド画像となります。
最近では、これ以上の次数でバックグラウンド画像を生成してしまうと、大きな散光星雲や分子雲がバックグラウンドと認識されてしまい、その後の処理に影響を与えてしまうのではないかという考えるようになりました。

ProcessContainer

ProcessContainer は、プロセスを格納するプロセスです。ImageContainerと組み合わせて、複数のサブフレームに一括で処理をかけることができます。

今回はABEを2回実行しますので、次の操作を行います。
矢印の方向に、インスタンスをドラッグアンドドロップしていきます。

  • ImageContainerからプロセスアイコンを生成
  • ABEをProcessContainerに登録 (今回はnの値を変えて2回登録)
  • ProcessContainerを実行
図7 ProcessContainerの設定

以上の操作により、ABEがすべてのサブフレームに対して実行されます。

SubFrameSelector

撮影したサブフレームには、雲の通過や急激なシーイングの悪化などにより、使用したくないサブフレームが含まれていることがあります。また、サブフレームの品質を評価し、重みづけをすることで、最終画像の品質をより向上させることができます。SubFrameSelectorは、サブフレームを解析し、星像の半値幅やS/N比などのパラメータを算出することで、サブフレームの取捨選択と重みづけを行うプロセスです。

サブフレームの重みづけには、適切な評価関数が必要です。
私は、こちらのサイトにて提示されている以下の評価関数を使用しています。
また、評価関数を用いて、あるしきい値以上(または以下)のフレームをリジェクトすることも可能です。(使用される場合は、Approval: に評価関数を設定してください。)
なお、私はフレームのリジェクトを手動で行っています。

(15*(1-(FWHM-FWHMMin)/(FWHMMax-FWHMMin)) + 15*(1-(Eccentricity-EccentricityMin)/(EccentricityMax-EccentricityMin)) + 20*(SNRWeight-SNRWeightMin)/(SNRWeightMax-SNRWeightMin))+50

実際の設定に移ります。設定が必要な項目は、次の通りです。

  • Subframe scale: 1ピクセルの画角が何秒に相当するかを表すパラメータです。Astrometry.net に画像をアップロードし、解析するのが最も簡便な方法です。
  • Camera gain: イメージセンサのゲインに関するパラメータです。説明は割愛しますが、こちらのサイトに算出方法が記載されています。

以上の設定が完了したら、サブフレームを入力し、処理を実行します。処理が終わると、図9の画面が表示されます。

図8 SubframeSelectorの設定
図9 処理結果

処理が終了すると、”Measurements Graph”に、各サブフレームの解析結果と、評価関数から計算されたWeightの値が表示されます。
次に、解析されたパラメータと、各サブフレームを目視で確認しながら、サブフレームのリジェクトを行います。
各サブフレームの目視確認には、Blinkというプロセスが便利です。
プロセスを起動後、サブフレームを読み込み、ウィンドウ中央上”Apply an automatic…”をクリックします。これにより、各サブフレームの輝度・カラーバランスがおおよそ揃い、比較評価がしやすくなります。

処理が終わると、”BlinkScreen”にサブフレームが表示されます。マウスホイールでスクロールしながら、サブフレームの比較評価を行います。

図10 Blinkの設定

リジェクトしたいサブフレームがある場合、SubframeSelector | Measurements ウィンドウのリストより、当該の画像をダブルクリックします。もう一度ダブルクリックすると、リジェクトが解除されます。

図11 画像のリジェクト(ex. No.17)

画像のリジェクトには、下記のパラメータを参考にしています。

  • Eccentricity: 検出された星像のいびつさ(≒扁平度)を表しています。ガイドエラーなどにより星像がいびつになった場合、この値が大きくなります。
  • FWHM: 星像の半値幅を表しています。シーイングの悪化、ピントの変化などにより星像が肥大した場合、この値が大きくなります。
  • SNR Weight: サブフレームのS/N比を表しています。光害カブリ成分の増加、薄雲の通過、レンズの結露などが発生した場合、この値が小さくなります。

選別が完了したら、”●”ボタンを押して実行します。
計算された Weight の値が、各サブフレームに書き込まれます。

次の作業(位置合わせ)に進む前に、”Measurements”ウィンドウより、”Weight”の値が最大値を取るサブフレームを見つけ、開いておきます。
上記の作業まで完了したら、ウィンドウを閉じます。(“SubframeSelector”のメインウィンドウを閉じると、3つのウィンドウがまとめて閉じます。)

次回に続きます。

“【連載】PixInsightを使った天体写真の画像処理 ③ 前処理(2)” への13件の返信

  1. 初めてコメントします〜

    先に光害のグラデーションをとってからスタック処理すればいいんじゃないかと、昔から妄想していたのですが、キャリブレーション、コスメティックコレクション後に、数十フレームを手動処理するのが面倒でやってませんでした。

    2つのコンテナを利用すればよいのか〜〜って、参考になりました。

    1. コメントありがとうございます。
      時々刻々と変わる光害のグラデーションをスタック後に補正するのは難しいので、良い方法かなと感じています。
      ImageContainerは結構便利なのでぜひ試してみてください。
      ちなみに、ABEの”Function degree”ですが、値を大きくすると、大きい構造の星雲をバックグラウンドの勾配と誤検出してしまうようで、
      最近はこの値を1にしています。光害の輝度勾配を考えると妥当かなと考えています。

  2. Function degreeの値を1にすると、確かに一方向への傾斜カブリのバックグラウンドが得られるので、前処理でのABE利用の場合には最適ですね。

  3. こんばんは。近江商人さんのブログから、そーなのかーさんの記事に飛んできました!

    最近ABEで悪化することが多くFunction Degreeでn=2からn=4にするくだりがとても参考になりました。試してみます。
    Image Containerまではたどり着いてませんが、まずは上の手法をいろいろ試してみます。

    1. コメントありがとうございます。
      ご紹介いただいたようですね。お役に立てたようでなによりです。
      ABEのFunction Degreeですが、上にも書いたように、この値を1にして最近は処理をしています(線形のグラデーションマスクと同義です)。
      光学系や空の条件によって違うので、いろいろ試してみると良いと思います。

  4. ひょんなことからImageContainerでSubframe単位でのカブリ取りについて聞きつけてこちらにたどり着きました。
    なるほど・・・です。
    オリオンやさそりなど高度の低い天体を撮るときには刻々変わるカブリに苦労しますがこの手法を使えば合理的に対策できますね。
    ありがとうございました。

    1. マルさん、コメントありがとうございます。

      確かに高度の低いところはカブリがどんどん変わっていきますからね。
      この方法を使うようになってから、スタック後のカブリ取りがだいぶ楽になったように感じます。

  5. そーなのかーさん
    はじめてコメントさせていただきます。ブログ大変わかりやすく、熟読しております!

    image containerおよび、process containerを使う方法、真似させていただいております。
    integlation前に一枚一枚勾配除去できるのは素晴らしい方法です。

    一つ質問させてください。
    ABEした画像が、画面内に次々に現れ、埋め尽くされるのですが、これを1画像処理したら閉じる。といったフローにすることはできないでしょうか。もしご存知でしたら教えてください。

    1. まちょさん
      いつもご覧いただきありがとうございます。またコメントもありがとうございます!
      そう言っていただけると大変光栄です。
      さて、ABEした画像がウィンドウとして現れる場合について、対処方法をこちらの記事内に追記します。設定の問題ですので、試してみてください。
      そちらの設定で実行すると、処理が終わったファイルは自動で開かれず、勝手に保存されます。

      1. そーなのかーさん

        お返事が遅くなり申し訳ありません。
        大量の画面がポップアップしないやりかた、教えていただきありがとうございます!

        おー。まさに、そーなのかー。と頷いております。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です