星像の縮小と星の処理:手法の進化と PixelMath 実装
星像を適切に縮小すると、撮影した主役をより目立たせることができます。特に天の川周辺のような星が密集した領域では、処理しないと満天の星が星雲を大きく邪魔してしまいます。この記事では、星像の縮小手法を、かつての侵食(エロージョン)フィルターから、現在主流となっているスターレス画像を使う方法と PixelMath 実装まで一通り整理します。
かつての手法:侵食(Erosion)による星像の縮小
もっとも初期の星像縮小は、侵食(Erosion) に頼っていました。Photoshop の「最小値」フィルターや、PixInsight の Erosion を使って選択範囲内の星を侵食させ、星を小さくするというものです。さらにこだわるなら、エッジマスクを併用して星の中心まで侵食してしまわないようにします。
正直に言うと、私は元々あまり星像を縮小していませんでした。従来の Erosion は星をよく壊してしまうからです(たとえば丸い星をひし形にしてしまったり、ダイヤモンド形の星像を台無しにしてしまったり)。ただ、天の川領域にあるりゅうこつ座大星雲のような対象では、星マスクをどれだけ丁寧に作っても、仕上がりには大量の星が星雲を邪魔した状態が残ってしまい、こうなるとどうしても星像を縮小せざるを得ません。だからこそ、侵食による縮小の最大の弱点は、マスクの品質に極度に敏感であることなのです。マスクがうまく作れていないと、星の中心やその周辺に人工的な偽像が生じやすくなります。

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

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

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




PixelMath による星像縮小の実装(ノンリニア状態)
スターレス画像を使った星像縮小は、PixInsight の PixelMath で正確に行うことができます。手順を分解すると次のとおりです。
- 画像ファイル A と、A のスターレス画像ファイル B を用意します。
- STF と HistogramTransformation を併用して、A と B の明るさを同時に下げます(midtone を右へ移動)。
- 明るさを下げた A と B をそれぞれ反転します(キーボード Ctrl+I)。
- 反転した A を反転した B で割り、反転した星画像 C を得ます(PixelMath)。
- C に B の反転を掛け、縮小した星画像の反転 D を得ます(PixelMath)。
- D を反転して、通常の縮小済み星画像に戻します(Ctrl+I)。
このうち手順 5、6 は、実は screen ブレンドモードの公式そのものです。縮小の度合いをより強くしたい場合は、手順 2 で A と B の明るさをさらに下げます。概念を示す公式は次のとおりです。
afterimage = ~((~mtf_low(beforeimage) / ~mtf_low(starless)) * ~starless)

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

鍵:星は「反転除算」で正しく取り出す
スターレスの手法で画像を仕上げたのに、最後に星を加え戻す段階で失敗する人は多く、その核心は星をどう取り出したかにあります。
もし単純にスターレス画像を元画像から引き算して星を得て、それを加え戻すと、結果はしばしば星が暗く、色も正しくなく、まるでレイヤーの不透明度を下げたように見えます。原因は、星の内容の一部がスターレス画像側に残ってしまい、引き算では星を完全に取り出せなかったためです。
より良い方法は、反転除算を使って完全な星を取り出すことです。スターレス画像の処理を終えたあと、乗算または反転乗算(screen ブレンドモード)で星を戻します。

リニアとノンリニア:取り出しと戻しの公式は異なる
RC Astro が StarXTerminator(SXT)を発表して以降、星の除去の適用範囲はノンリニア状態からリニア状態にまで広がりました。ただし、リニア状態とノンリニア状態とでは、星を取り出す手順や公式、星を戻す手順や公式が少し異なり、この点はよく見落とされます。
ノンリニア状態(画像がすでに大きくストレッチされ、ピクセル間が元のリニアな関係にない状態):
- 星の取り出し:SXT で「Unscreen Stars」にチェックを入れるか、星の除去後に反転除算の公式
~(~Original_Nebula / ~Starless_Nebula)で星を取得します。 - 星の戻し:PixelMath で反転乗算の公式
~(~Nebula * ~stars)を使います。これは Screen Blending の数式そのものです。
リニア状態(インテグレーション後、大きくストレッチする前で、ピクセル間が元のリニアな関係を保っている状態):
- 星の取り出し:SXT で「Unscreen Stars」に「チェックを入れない」。
- 星の戻し:PixelMath で加算の公式
Nebula + starsを使います。

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