本站提供正體中文版。切換到正體中文本站提供简体中文版。切换到简体中文This site is available in English.View in English이 사이트는 한국어로도 제공됩니다.한국어로 보기Diese Website ist auch auf Deutsch verfügbar.Auf Deutsch ansehenEste sitio web también está disponible en español.Ver en españolQuesto sito è disponibile anche in italiano.Visualizza in italianoCe site est également disponible en français.Afficher en françaisEste site também está disponível em português.Ver em portuguêsDeze website is ook beschikbaar in het Nederlands.In het Nederlands bekijkenЭтот сайт также доступен на русском языке.Смотреть на русскомयह वेबसाइट हिन्दी में भी उपलब्ध है।हिन्दी में देखेंهذا الموقع متاح أيضًا باللغة العربية.عرض بالعربيةSitus ini juga tersedia dalam bahasa Indonesia.Lihat dalam bahasa IndonesiaBu site Türkçe olarak da mevcut.Türkçe görüntüleTa strona jest dostępna także po polsku.Wyświetl po polskuTrang web này cũng có phiên bản tiếng Việt.Xem bằng tiếng Việtاین وب‌سایت به فارسی هم در دسترس است.مشاهده به فارسی

星像の縮小と星の処理:手法の進化と PixelMath 実装

ストレッチと非リニア2021.01

星像を適切に縮小すると、撮影した主役をより目立たせることができます。特に天の川周辺のような星が密集した領域では、処理しないと満天の星が星雲を大きく邪魔してしまいます。この記事では、星像の縮小手法を、かつての侵食(エロージョン)フィルターから、現在主流となっているスターレス画像を使う方法と PixelMath 実装まで一通り整理します。

かつての手法:侵食(Erosion)による星像の縮小

もっとも初期の星像縮小は、侵食(Erosion) に頼っていました。Photoshop の「最小値」フィルターや、PixInsight の Erosion を使って選択範囲内の星を侵食させ、星を小さくするというものです。さらにこだわるなら、エッジマスクを併用して星の中心まで侵食してしまわないようにします。

正直に言うと、私は元々あまり星像を縮小していませんでした。従来の Erosion は星をよく壊してしまうからです(たとえば丸い星をひし形にしてしまったり、ダイヤモンド形の星像を台無しにしてしまったり)。ただ、天の川領域にあるりゅうこつ座大星雲のような対象では、星マスクをどれだけ丁寧に作っても、仕上がりには大量の星が星雲を邪魔した状態が残ってしまい、こうなるとどうしても星像を縮小せざるを得ません。だからこそ、侵食による縮小の最大の弱点は、マスクの品質に極度に敏感であることなのです。マスクがうまく作れていないと、星の中心やその周辺に人工的な偽像が生じやすくなります。

かつて StarNet++ のマスクを併用した星像縮小の前後比較(りゅうこつ座大星雲)

転機:スターレス画像を使って星像を縮小する

時代の進歩によって、星像縮小はスライダーを動かすだけで完了し、どの大きさのクラスの星を縮小するかも自由に指定できるものへと徐々に変わっていきました。鍵となったのは、みんなが星の除去ツール(StarNet++ など)を、単に星を除去するためだけでなく、星像を縮小するために使い始めた という点です。2021 年になると、スクリプト化されてさらに便利になり、Photoshop の最小値フィルターや PixInsight の Erosion はあまり流行らなくなりました。

PixInsight には、すぐに使える星像縮小スクリプトが登場しました。これは最小値フィルターや Erosion を使うのではなく、StarNet++ と Contour Mask を組み合わせる方法で実現しています。

StarNet++ をベースにしたスクリプトによる星像縮小のイメージ

ここでついでに、誤解しやすい点を一つはっきりさせておきます。StarNet++ にある「Create star mask」というオプションが生成するのは、実はマスクではなく、除去された星そのものです。もし PixInsight の PixelMath や Photoshop のレイヤーを使って、この star_mask をスターレス画像に加え戻すと、星を除去する前の元画像とほぼ同じものが得られます。

StarNet++ が生成する「star mask」は実は星そのもので、加え戻すと画像を復元できる

縮小すると星の大きさは全部同じになるのか

ある同好の方が、星像を縮小すると星の大きさが全部同じになる、と言っていたことがあります。それは本当でしょうか。実はそうではありません。縮小後の星の大きさは、主に元々の星の大きさ縮小用マスクによって決まります。

実際には、縮小のたびに小さくする星のタイプを選び(中小型の星が中心)、星の大きさに合った適切なマスクを作るので、縮小後も星の大きさには差が残ります。ただ、星の周辺から縮小の痕跡が見て取れるだけです。SL 17 の拡大画像を例にとると、これは合計 2 回星像を縮小した結果です(私は今のところ 2 回を超えて処理したことはありません)。

縮小後も星の大きさには差が残り、周辺から縮小の痕跡が見える(SL 17)

SL 17 を拡大して 2 回縮小の効果を確認

スターレス画像を使った縮小で、より自然な星の仕上がりが得られる

縮小前後の部分比較

PixelMath による星像縮小の実装(ノンリニア状態)

スターレス画像を使った星像縮小は、PixInsight の PixelMath で正確に行うことができます。手順を分解すると次のとおりです。

  1. 画像ファイル A と、A のスターレス画像ファイル B を用意します。
  2. STF と HistogramTransformation を併用して、A と B の明るさを同時に下げます(midtone を右へ移動)。
  3. 明るさを下げた A と B をそれぞれ反転します(キーボード Ctrl+I)。
  4. 反転した A を反転した B で割り、反転した星画像 C を得ます(PixelMath)。
  5. C に B の反転を掛け、縮小した星画像の反転 D を得ます(PixelMath)。
  6. D を反転して、通常の縮小済み星画像に戻します(Ctrl+I)。

このうち手順 5、6 は、実は screen ブレンドモードの公式そのものです。縮小の度合いをより強くしたい場合は、手順 2 で A と B の明るさをさらに下げます。概念を示す公式は次のとおりです。

afterimage = ~((~mtf_low(beforeimage) / ~mtf_low(starless)) * ~starless)

PixelMath による星像縮小の分解手順のイメージ

同じ方法は Photoshop や Affinity Photo でも再現できます。違いはレイヤーを使って行う点で、レイヤー間のブレンドモード(blending mode)も少し異なります。

Photoshop のレイヤーで PixelMath の星像縮小を再現し、各レイヤーのブレンドモードを注記

鍵:星は「反転除算」で正しく取り出す

スターレスの手法で画像を仕上げたのに、最後に星を加え戻す段階で失敗する人は多く、その核心は星をどう取り出したかにあります。

もし単純にスターレス画像を元画像から引き算して星を得て、それを加え戻すと、結果はしばしば星が暗く、色も正しくなく、まるでレイヤーの不透明度を下げたように見えます。原因は、星の内容の一部がスターレス画像側に残ってしまい、引き算では星を完全に取り出せなかったためです。

より良い方法は、反転除算を使って完全な星を取り出すことです。スターレス画像の処理を終えたあと、乗算または反転乗算(screen ブレンドモード)で星を戻します。

引き算で星を取り出した場合(上)と反転除算で取り出した場合(下)の違いの比較

リニアとノンリニア:取り出しと戻しの公式は異なる

RC Astro が StarXTerminator(SXT)を発表して以降、星の除去の適用範囲はノンリニア状態からリニア状態にまで広がりました。ただし、リニア状態とノンリニア状態とでは、星を取り出す手順や公式、星を戻す手順や公式が少し異なり、この点はよく見落とされます。

ノンリニア状態(画像がすでに大きくストレッチされ、ピクセル間が元のリニアな関係にない状態):

  • 星の取り出し:SXT で「Unscreen Stars」にチェックを入れるか、星の除去後に反転除算の公式 ~(~Original_Nebula / ~Starless_Nebula) で星を取得します。
  • 星の戻し:PixelMath で反転乗算の公式 ~(~Nebula * ~stars) を使います。これは Screen Blending の数式そのものです。

リニア状態(インテグレーション後、大きくストレッチする前で、ピクセル間が元のリニアな関係を保っている状態):

  • 星の取り出し:SXT で「Unscreen Stars」に「チェックを入れない」。
  • 星の戻し:PixelMath で加算の公式 Nebula + stars を使います。

リニア状態とノンリニア状態での、星の取り出しと戻しの公式の対照

自分の画像がどの状態にあるのかをはっきりさせ、対応する公式で星を取り出して戻せば、星を戻したあとに暗くなったり、色が変わったり、まったく失敗したりする問題を避けられます。