天文はかせ幕下

GHSをつかった最近の後処理のフロー

はじめに

この記事では、最近Pixinsightに実装されたGHS (Generalized Hyperbolic Strech)をつかった最近の画像処理フロー(後処理)の前半部分についてまとめています。前半部分というのは、具体的にはリニア画像からLRGB合成までです。後半部分は処理する画像によってフローが変わってしまうため、さらっとだけ書いています。

ストレッチについての個人的な悩み

スタックが済んだ後のストレッチについて、顧問はずっと悩んでおりました。といいますのは、リニア画像からの初期段階のストレッチがいつもトライアル&エラー的になってしまうために、結果が安定しないのです*1

GHSが登場する以前は、以下のプロセスを組み合わせてストレッチをしていました

  1. MaskedStretch
  2. AsinhStretch
  3. PixelMathをつかった対数ストレッチ(参考)
  4. HistogramTransformation

これらはそれぞれ一長一短なので、あるときはMaskedStretchを、または対数ストレッチとAsinhStretchの合わせ技を使う、場合によっては画像をカラーとモノクロに分けてそれぞれ別々にストレッチする。なんて感じで、いつもバラバラ。よって結果も画像ごとに一定になりません。

そんな状況を解決してくれたのが、Pixinsightの新プロセスGHS (Generalized Hyperbolic Strech)でした。

参考:GHSの解説

 

はじめのうち顧問は、このプロセスを「単なるS字のトーンカーブ調整ツールではないか」と考え、あまり使っていませんでした。しかしそれは思い違いで、GHSの白眉は、これまであまりに自由度が高すぎたトーンカーブ調整の曲線を「Generalized Hyperbolic Function(一般化双曲線関数)」で特徴づけることで、たった3つのパラメータに落とし込んだ点にある、と考えています。その三つとは

  • Stretch factor (ln(D+1))
  • Local Intensity b
  • Symmetry point SP

です。これらを目的に応じて調整することで、試行錯誤を極力抑えて画像のストレッチが出来るようになりました。さらに、これまでAsinhStrechでのみ使用可能だった彩度を保存するストレッチが、”colour mode options”機能によって任意の強度で調整可能になり、彩度のコントロールまで含めて、ほぼこのプロセス一本ででストレッチを完結できるようになりました。

今回は、GHSを中心にして、最近ようやく安定してきた自分の画像処理のフローをまとめてみたいと思います。

作例:NGC417とNGC1931

先日はやま湖で撮影してきた2作品目、ぎょしゃ座のIC417とNGC1931付近の星野を作例として自分のプロセスを説明したいと思います。下の画像は、今回のフローで仕上げた最終結果です。なかなか良い結果になったとおもっています。

 

IC417 and NGC1931
Date: 2024-11-03 23:04~2024-11-04 4:44
Location: Hayama-ko, Fukushima
Optics: Celestron RASA11" ASI2600MM-pro, ASI2600MC-Pro
Exposure: 180s x 40f, gain100(RGB), 180s x 60f (Lum)
Mount: iOptron CEM70G Processing: Pixinsight, Photoshop

 

それでは本題に入ってまいります。

スタック直後の処理、ストレッチ、LRGB合成まで

上の作例は、ASI2600MCとASI2600MMで撮影して仕上げています。ですのでRGB画像とL画像それぞれに対して行っている処理を説明します。OSCカメラを使っている方にとっては、RGB画像に対して行っている処理を参考にしていただけると思います。

リニア段階の色調整・カブリ補正など

コチラが、スタック直後のL画像とRGB画像(にSTFの仮ストレッチをかけたもの)です。

スタック直後のL画像(左)とRGB画像(右)

まず、それぞれに以下のプロセスを実行していきます(この辺りはある程度「お決まり」だと思います)。

L画像に以下を行います

  • L1) Dynamic Crop
  • L2) Automatic Background Extractor(1次関数適用、subtraction)
  • L3) Blur X Terminator (Sharpen Stars=0.2, Adjust Star Halos=0.6, Sharpen Nonstellar=0.66)

RGB画像に以下を行います

  • RGB1) Dynamic Crop
  • RGB2) Background Neutlization
  • RGB3) Automatic Background Extractor(1次関数適用、subtraction)
  • RGB4) Blur X Terminator (correct only)
  • RGB5) Spectrophotometric Color Calibration(WR=Average Spical Galaxy)
  • RGB6) DeepSNR(Strength=1.0, LinearDataにチェック)

ここで、記載していないパラメータはデフォルト値とします(以下同様)。

L2)とRGB3)について”Gradient Correction”を使っていないのは、こだわりによるものではなく、今回は1次関数による最も単純な補正で十分と判断したためです。”Gradient Correction”を使うこともあります。

L3)BXT適用後のL画像(左)とRGB5)SPCC適用後のRGB画像(右)

RGB6)のDeepSNRは以前コチラで紹介したAIベースのノイズ処理プロセスです。LRGB合成後の色ノイズを抑える目的でこの段階で使っています。下のようにほとんど星雲のディテールを損なうことなくノイズの処理ができています*2

GHSを用いたLRGB合成前のストレッチ

L画像に以下を行います

  • L4) HistogramTransformation( Shadows=0.00076 )
  • L5) GHS (StretchFactor=3.9, LocalIntensity=3.5) 

RGB画像に以下を行います

  • RGB7) HistogramTransformation( Shadows=0.0016 )
  • RGB8) GHS (StretchFactor=6.19, LocalIntensity=2.47, mode=Colour, Colour Brend=0.81) 

ここはどちらもほぼ同じ処理なので、RGB画像を例に説明します。

まず、RGB7)はHTによるシャドウクリッピングです。これをGHSの前に行います

HistogramTransformationによるシャドウクリッピング

Shadowsのスライダを右に動かして行って、下の画像の赤線部に表示されている輝度がゼロに張り付いてしまったピクセルの割合が0.01%程度を目安にします*3

 

つぎに、RGB8)のGHSでのストレッチです。

GHSによるストレッチ

顧問の場合、以下のような手順で行っています。

  1. まずStrech Factorを動かして、ヒストグラムのピークを適当な位置(ここでは1/8程度)に持ってくる
  2. 画面の中の明るい星が映っている場所を選んでPreviewを指定
  3. 上のpreviewを表示した状態で右下の白丸○をクリックして、リアルタイムプレビューを起動する。

    リアルタイムプレビュー

     

  4. Local intensityの値を正の範囲で動かして、明るい星の鋭さが好みの状態になるように調整する(ここではb=2.5付近が良いと判断しました。それより小さい値では星が大きすぎ、大きい値では星の周りのハロの輝度が抑えられすぎては初めから飽和している部分が円盤状に目立って不自然と判断しました)

    Local Intensityの調整。値を大きくしていくと星が鋭くなっていく
  5. (Local intensityを動かしたことで、ヒストグラムのピークが少し動くので)再びStrech Factorを動かして輝度を調整して終了。

以上のように、Strech Factorでヒストグラムのピークを決め、Local intensityで明るい星の鋭さを調整する、という流れで処理をしています*4

  • 註1)ここでは事前にシャドウクリッピングを行っているため、Symmetry Pointの値を調整する必要はありません。事前のシャドウクリッピングを省略して、GHSのSymmetry Pointを画像の最も暗い位置に選んでからストレッチを行っても、ほぼ同じ結果が得られます。しかし、画像のどこが一番暗い場所かはぱっと見で分からない場合もあるので、シャドウクリッピングを使った方ががエラーが少ないと思います。
  • 註2)Local intensityは、Symmetry Point付近でのストレッチの強さ(トーンカーブの傾き)を表すパラメータですが、これを大きくすることで相対的に明るい星の周りの輝度の強い部分のストレッチが弱くなります。これによって星の「シャープさ」が調整できます。

LRGB合成

下が、GHSによるストレッチを終えた後のL画像とRGB画像です。

GHS適用後のL画像(左)とRGB画像(右)

この二つをLRGB合成します。LRGBCombinationプロセスのパラメータは特に調整せずデフォルトのままで行う場合が多いです。LRGB合成後の画像は以下のようになりました。

LRGB合成後

LRGB合成以降の処理

後処理がルーティン化できているのはここまでで、これ以降の処理は撮影対象ごとに個別の各論になってしまい詳述がしにくいです*5

以下はあまり参考にならないような気がしていますが、おおざっぱな方針だけ記しておこうと思います。

全体としては画像をみて「何が足りないか?」を考えながら処理を進めていきます。Pixinsightで構造の強調やスターリダクション、ノイズ処理をやったあと、Photoshopで最終的に仕上げるのがいつものパターンです

Pixinsightでの処理

あらためてLRGB合成後の今回の画像ではだいたい以下の操作を実行しました(詳しくは書きませんが、以下の各処理では適宜マスクを利用し、明るい星や星雲のハイライトが破綻しないように注意しながら進めています)

  1. GHSをもう一度かけてコントラストを強調(Stretch factor=0.45, LocalIntensity=3, Mode=Colour, Colour Blend=1)
  2. Local Histogram Equilizationで星雲のハイライト部分の構造を強調
  3. Background Enhanceスクリプトで、中心のIC417付近のガスを強調
  4. Curves Transformationで彩度上げ
  5. HistogramTransformationでシャドウクリップ
  6. Starnet++の星消し画像を作って、星を小さく
  7. Noise X Terminatorでノイズ処理

ここまでやったところで、「次の一手」が思いつかなくなります。そのタイミングで16bit Tiffで保存してPhotoshopに移行します。

Photoshopでの処理

Photoshopではあまり大したことはしておらず、主にCameraRawを利用して

  1. 「シャドウ」「黒レベル」「ハイライト」「露光」などを動かして、全体のコントラストを整える
  2. 「明瞭度」を上げてディテールを強調
  3. 「自然な彩度」で彩度を少し上げる
  4. 「カラーミキサー」で各色の色相を動かして、赤や青を好みの色に動かす

といったことをやっています。最後に

  1. 「スマートシャープ」で星の周りの輪郭をすこしシャープにする
  2. 必要に応じて、グラデーションマスクを利用して周辺の明るさ、ハイライト部分の明るさを調整する

などして仕上げていきます

最終的な結果がコチラになります(再掲載)

IC417 and NGC1931

終わりに

以上でおしまいです。
LRGB合成後の処理はまだまだ安定しないのが自分にとって課題で

  • その日の体調
  • 処理する時間帯
  • お酒の酔いぐあい

などで結果が若干変わってしまったりします。また星雲ばっかり見ていて気づいたら微光星が破綻していた、なんてミスもいまだに良くやります。

皆さん同じことをおっしゃっていますが、地味に重要なのは自分の目をあまり信用しないことで、

  • 処理が終わったら、しばし画像を「寝かせる」
  • 納得がいかなかったら、数日放り出してからはじめからやり直してみる。そのうえで再度仕上げた結果を、以前の結果と比較したり良いとこ取りしたりする

なんてことをしながら、じっくり取り組むのが良いのだろうなと思っています。

 

 

 

*1:これは実は顧問が天体写真を始めたころから、10年以上の未解決問題でした。

*2:DeepSNRは無料ですが、有料のNoiseXTerminatorと比較しても処理によって微光星が消えにくいのが優れていると思います。ただし、適用できる画像が限られていて、顧問の試した範囲ではDrizzle1xのカラー画像でしか上手く動きません。

*3:これは蒼月城さんが動画で良く用いられている方法です

*4:このLocal intensityでの星の調整が、顧問は一番気に入っており、このエントリを書くモチベーションにもなっています

*5:この辺りが個性が発揮できるところであり、また腕の見せ所でもありますが、それすら将来的にはAIによって自動化される未来もそろそろ見えてきてしまってます。