星降る場所を求めて

ストレッチ方法

今回は、普段私が使用しているストレッチ方法について紹介します。

PixInsightのストレッチツール

1. ScreenTransferFunction (STF)

  • 説明: PixInsightの最も基本的なストレッチツールで、非破壊的に画像の表示をストレッチします。STF自体は画像のデータには影響を与えず、ビューのみに反映されます。後でストレッチを恒久的に適用する際には、HistogramTransformationと併用します。
  • 特徴:
    • 非破壊的
    • リニアデータを表示用に簡単にストレッチ
    • 自動ストレッチ機能

2. HistogramTransformation

  • 説明: 最も一般的に使用されるストレッチツールで、ヒストグラムを手動で調整して画像全体の明るさやコントラストを制御します。STFで適用したストレッチをコピーして使用することもできます。
  • 特徴:
    • 永続的なストレッチ処理を適用
    • 非リニア画像に変換するのに使用される
    • スクリーントランスファーを反映させる機能

3. MaskedStretch

  • 説明: 非リニアなストレッチを行い、特に天体写真のように背景と明るい天体を同時に表示する必要がある場合に有効です。背景が暗すぎることを防ぎながら、明るい領域を抑えるマスクを自動的に適用します。
  • 特徴:
    • 明るい星や天体が過度に強調されるのを防止
    • 背景のノイズを抑えつつストレッチ

4. ArcsinhStretch

  • 説明: ハイライトの詳細を保持しながら、星雲や銀河のような淡い領域を強調するために設計された特殊なストレッチツールです。星やその他の明るい領域が飽和するのを防ぐ効果があります。
  • 特徴:
    • 明るい星が飽和するのを防止
    • 銀河や星雲の淡い部分を引き出す

5. AutoStretch (Process Explorer)

  • 説明: STFの自動ストレッチ機能を恒久的に適用する簡単な方法です。STFで表示されたストレッチを簡単に画像に適用するために使用されます。
  • 特徴:
    • STFの設定を直接反映
    • ワンクリックで簡単にストレッチ適用

6. PixelMath

  • 説明: プログラムによってカスタムストレッチが可能です。特に、特定の計算式を使って独自のストレッチ手法を試す場合に使用されます。Bill Blanshan氏のスクリプトのように、高度なストレッチ操作が可能です。
  • 特徴:
    • カスタムストレッチを作成可能
    • ピクセル単位の詳細なコントロール

7. HDRMultiscaleTransform

  • 説明: 高動的範囲(HDR)の画像に対して、明るい部分のディテールを維持しながら暗部を引き出す処理を行うツールです。特に、銀河や星雲のコア部分を強調しすぎることなく全体を見やすくするのに使われます。
  • 特徴:
    • マルチスケール処理で明暗のバランスを最適化
    • ダイナミックレンジを維持

その他にも追加スクリプトとしてGHSがあります。

8. Generalized Hyperbolic Stretch

GHSは、ハイパーボリック関数を使用してストレッチを行う手法で、以下の特性があります:

  1. 非リニアなコントラスト制御
    • リニアなストレッチに比べて、GHSは淡い領域と明るい領域の両方をバランス良く引き出すことができ、全体のダイナミックレンジを調整しやすいです。
  2. 細部を強調
    • GHSはハイライト部分を飛ばさずに、淡い星雲や銀河の詳細を際立たせることが得意です。特にコアが明るい天体でも、淡い部分のディテールを引き出しやすくなります。
  3. 柔軟な制御
    • GHSは、ストレッチの中心や強度、カーブを詳細に制御できるため、ユーザーが画像全体のコントラストを微調整する際に大きな柔軟性を提供します。

インストール方法

PixinsightにGHSをインストールするには、次のようにリポジトリ情報を追加します。

  • GHSバージョン1がインストールされている場合は、まずこれを削除してから…
  • Pixinsight内から、リソース>アップデート>リポジトリの管理に移動します。
  • [更新リポジトリの管理] ダイアログで、[追加] ボタンをクリックします。
  • URLボックスにGHSリポジトリ情報を次のように入力します:https://www.ghsastro.co.uk/updates/
  • [Pixinsightリポジトリの追加]ダイアログで、[OK]ボタンをクリックします。
  • [更新リポジトリの管理] ダイアログで、[OK] ボタンをクリックします。
    以上、公式サイトを和訳したインストール手順

PixInsightを再起動したらProcessメニューに追加されます。

私のストレッチ方法

ストレッチツールについては、整理がつきました。これらのツールを駆使してストレッチ処理を行っていますが、ひとつ大きな問題を感じていました。それは、毎回の処理方法が異なるという点です。

もちろん、自然を相手にした撮影画像の処理では、状況に応じてアプローチが変わるのは避けられません。また、仕上がりの過程を楽しむという点では、それは良いことだとも思います。しかし、天体観測という観点から見ると、一定の処理を行ってこそ定量的な観測が可能ではないかと、常々悩んでいました。

そんな悩みを抱えてネットを探索していたところ、出会ったのがBill Blanshan氏が作成したスクリプトです。現在、私はこのスクリプトを活用し、一定のストレッチを行うことで、画像データをより安定して比較観察できるようになりました。今回は、そのツールをふたつ皆さんに紹介したいと思います。

1. Unlinked Stretch Script

// RGB/K:
/* Unlinked Stretch Test with Curve Adjustment
by Bill Blanshan */


Stretch= 0.20 ; //<-- Target background value
Curve= 1.00 ; //<-- 1= Normal Stretch, >1= Arcsin style
Clip= 2.8 ; //<-- Increase to prevent shadow clipping


/*Drag the bottom left arrow over into the image you want stretched


Notes: If you are stretching an image that has been denoised, you
may need to reduce the "Stretch" value.


Release notes:

1) New Curve feature: This feature allows you to modify the
curve being used, so a value higher than 1, e.g. 1.03, will
give you a more "arcsin" style curve thus reducing the highlights.
This is helpful on very bright nebula so you don't blow out
the core when stretching.


*/

















E1= min(max(0,med($T)+-Clip*1.4826*mdev($T)),1);
E2= max(0,($T-E1)/~E1);
E3= med($T)-E1;
E4= min(1,(1/Curve));
E5= ((Stretch-1)*E3) / ((2*Stretch-1) * E3^E4-Stretch); //MTF value
E6= ( (E5-1)*E2) / ( (2*E5-1) * E2^E4-E5);

E6

// Symbols:
Stretch,Curve,Clip,
E1,E2,E3,E4,E5,E6,E7,


このスクリプトは、画像を効果的にストレッチしながら、ハイライト部分の飛びすぎを防ぐ機能を持っています。特に、明るい星雲のコア部分を保護しつつ、背景をうまく引き上げたいときに便利です。

スクリプトの概要

このスクリプトは以下の3つのパラメータで調整が可能です。

  • Stretch: 背景レベルをどこまで持ち上げるかをコントロールします。
  • Curve: ストレッチ曲線の形状を調整する機能です。通常のリニアストレッチからアークサイン型のカーブに切り替えることで、明るい部分の圧縮を行い、コア部分を保護します。
  • Clip: 画像のシャドウ領域がクリッピングされるのを防ぐための調整値です。

これらを組み合わせることで、シャドウやハイライトのバランスを保ちながら、効率的にストレッチを行います。

各ステップの詳細解説

1. 基本パラメータの設定

スクリプトの冒頭では、以下のように3つのパラメータを設定します。

このスクリプトは、PixInsightのPixelMathを使用して、画像のストレッチ(ダイナミックレンジの調整)を行うものです。特に、背景の調整ハイライト部分の保持に重点を置いています。以下、それぞれのステップを解説します。

// RGB/K:
/* Unlinked Stretch Test with Curve Adjustment
by Bill Blanshan */

Stretch= 0.20 ; //<-- Target background value
Curve= 1.00 ; //<-- 1= Normal Stretch, >1= Arcsin style
Clip= 2.8 ; //<-- Increase to prevent shadow clipping
  • Stretch: ここでは0.20に設定されています。この値が高いほど、背景が明るくなります。星雲などの淡い対象を明確にするためには、この値を調整して最適な結果を得ます。
  • Curve: デフォルトでは1.00です。1以上の値を設定すると、アークサイン型のカーブでストレッチされ、ハイライト部分を圧縮する効果が得られます。例えば、1.03に設定すると、明るい星雲のコア部分を飛ばさないように調整されます。
  • Clip: 2.8に設定されていますが、これはシャドウ領域のクリッピングを防ぐために使います。ノイズが気になる場合は、この値を少し大きくすることをおすすめします。
2. シャドウ領域の基準値設定

次の行では、シャドウ部分の基準値を計算しています。

E1= min(max(0,med($T)+-Clip*1.4826*mdev($T)),1);
  • E1は、ストレッチの基準値を設定します。画像のメディアン値(中央値)とClip値を基にして、シャドウ部分のクリッピングを防ぐための制限をかけています。
3. ピクセル値の正規化

次に、ピクセル値を正規化します。

E2= max(0,($T-E1)/~E1);
  • E2は、各ピクセル値を正規化するための計算です。シャドウ部分を再マッピングし、基準のE1との差を使ってストレッチを行います。
4. ストレッチのカーブ調整

ストレッチのカーブを調整します。

E3= med($T)-E1;
E4= min(1,(1/Curve));
  • E3はメディアン値とE1との差を計算し、全体のストレッチ量を決定します。
  • E4は、ストレッチの曲線を定義します。Curve値が1の場合はリニアストレッチ、それ以上の場合はアークサイン型のカーブが適用されます。
5. MTF(モディファイドトーンファンクション)の計算

ストレッチ後の最終ピクセル値を計算します。

E5= ((Stretch-1)*E3) / ((2*Stretch-1) * E3^E4-Stretch);
  • E5は、画像のコントラストを調整するためのMTF値です。この計算によって、ストレッチ量やカーブの形状に基づいたコントラスト調整が行われます。
6. 最終的なピクセル値の計算

最後に、新しいピクセル値を計算します。

E6= ( (E5-1)*E2) / ( (2*E5-1) * E2^E4-E5);

E6は、ストレッチ後の最終的なピクセル値です。これにより、画像全体のストレッチ処理が完了します。

まとめ

このスクリプトを使うことで、通常のリニアストレッチでは難しい微妙な調整が可能になります。特に、ハイライト部分を保護しつつ、背景を引き上げるという作業が簡単に行えます。StretchCurveの値を変えて、自分の画像に合った最適なストレッチを試してみてください。

明るい星雲のコア部分が飛びすぎることを防ぎつつ、暗い領域をしっかりと引き出すために、このスクリプトは非常に便利です。

2. Linked Stretch Script

// RGB/K:
/* Linked Stretch Test with Curve Adjustment
by Bill Blanshan */


Stretch= 0.20 ; //<-- Target background value
Curve= 1.00 ; //<-- 1= Normal Stretch, >1= Arcsin style
Clip= 2.8 ; //<-- Increase to prevent shadow clipping


/*Drag the bottom left arrow over into the image you want stretched


Notes: If you are stretching an image that has been denoised, you
may need to reduce the "Stretch" value.


Release notes:

1) New Curve feature: This feature allows you to modify the
curve being used, so a value higher than 1, e.g. 1.03, will
give you a more "arcsin" style curve thus reducing the highlights.
This is helpful on very bright nebula so you don't blow out
the core when stretching.


*/
















m = (med($T[0])+med($T[1])+med($T[2]))/3;
d = (mdev($T[0])+mdev($T[1])+mdev($T[2]))/3;
E1= min(max(0,m+-Clip*1.4826*d),1);
E2= max(0,($T-E1)/~E1);
E3= med($T)-E1;
E4= min(1,(1/Curve));
E5= ((Stretch-1)*E3) / ((2*Stretch-1) * E3^E4-Stretch); //MTF value
E6= ( (E5-1)*E2) / ( (2*E5-1) * E2^E4-E5);

E6

// Symbols:
Stretch,Curve,Clip,m,d,
E1,E2,E3,E4,E5,E6,E7,

このスクリプトは、複数のRGBチャンネルを連動させて画像全体をストレッチしつつ、ハイライト部分を守るよう設計されています。Linked(連動)ストレッチでは、すべてのカラーチャンネルが同じ基準でストレッチされるため、色バランスが保たれます。

スクリプトの概要

このスクリプトも、前回と同様に以下の3つのパラメータで調整が可能です。

  • Stretch: 背景レベルをどこまで引き上げるかをコントロールします。
  • Curve: ストレッチ曲線の形状を調整する機能です。通常のリニアストレッチからアークサイン型のカーブに切り替えることで、明るい部分の圧縮を行い、ハイライトを保護します。
  • Clip: シャドウ領域のクリッピングを防ぐための調整値です。

これらのパラメータにより、画像全体を適切にストレッチしながら、重要なハイライト部分を保護できます。

各ステップの詳細解説

1. 基本パラメータの設定

冒頭では、3つのパラメータが定義されています。

// RGB/K:
/* Linked Stretch Test with Curve Adjustment
by Bill Blanshan */

Stretch= 0.20 ; //<-- Target background value
Curve= 1.00 ; //<-- 1= Normal Stretch, >1= Arcsin style
Clip= 2.8 ; //<-- Increase to prevent shadow clipping
  • Stretch: ここでは0.20に設定されています。これは画像の背景レベルを調整する値で、値を上げることで背景を明るくします。
  • Curve: 1.00は通常のリニアストレッチ、1.03など1を超える値を設定することで、ハイライトを圧縮し、アークサイン型のカーブでストレッチされます。
  • Clip: 2.8は、シャドウ領域のクリッピングを防ぐための値です。シャドウがつぶれるのを防ぐために、この値を調整します。
2. 各カラーチャンネルの平均値と偏差の計算

次に、RGBチャンネルのメディアン値と標準偏差を平均して基準値を決定します。

m = (med($T[0])+med($T[1])+med($T[2]))/3;
d = (mdev($T[0])+mdev($T[1])+mdev($T[2]))/3;
  • mはRGBそれぞれのメディアン値の平均です。これは、全チャンネルの平均的な明るさを基準に計算しています。
  • dはRGBチャンネルそれぞれの標準偏差の平均で、シャドウ部分の調整に使用します。
3. シャドウ部分の基準値設定

次に、クリッピングを防ぎながら、シャドウ部分の基準値を計算します。

E1= min(max(0,m+-Clip*1.4826*d),1);
  • E1は、ストレッチの基準値です。RGBチャンネル全体のメディアン値とクリッピングの制限を基に、シャドウ部分のクリッピングを防ぐためのしきい値を計算しています。
4. ピクセル値の正規化

シャドウ部分を再マッピングし、ストレッチの基準となる値との差を計算します。

E2= max(0,($T-E1)/~E1);
  • E2は、ピクセル値を正規化する計算です。ストレッチ前のピクセル値を基準E1に合わせて再調整します。
5. ストレッチのカーブ調整

次に、ストレッチのカーブを設定します。

E3= med($T)-E1;
E4= min(1,(1/Curve));
  • E3はメディアン値とE1との差を基に、全体のストレッチ量を決定します。
  • E4はカーブ調整用の値です。Curve値が1の場合はリニア、1より大きい場合はアークサイン型のカーブが適用されます。
6. MTF(モディファイドトーンファンクション)の計算

ストレッチ後のピクセル値を計算します。

E5= ((Stretch-1)*E3) / ((2*Stretch-1) * E3^E4-Stretch);
  • E5は、コントラスト調整用のMTF(モディファイドトーンファンクション)です。画像のコントラストを適切に調整するために使用されます。
7. 最終的なピクセル値の計算

最後に、ストレッチ後のピクセル値を計算します。

E6= ( (E5-1)*E2) / ( (2*E5-1) * E2^E4-E5);
  • E6は最終的なストレッチ後のピクセル値です。この値が最終的なストレッチ結果となります。

まとめ

「Linked Stretch Test with Curve Adjustment」は、RGBチャンネルを連動させたストレッチを行うスクリプトです。これにより、色バランスを崩すことなく、画像全体のストレッチを均等に行うことができます。また、Curveの値を調整することで、明るい部分が飛んでしまうのを防ぎ、シャドウ部分のクリッピングも防げます。

Linkedストレッチは、特に色バランスが重要な天体画像で効果的です。RGBチャンネル全体を一括して処理できるため、自然な見た目を保ちながらストレッチを行うことができます。ぜひ、StretchCurveの値を調整して、最適な結果を探ってみてください。

使用方法

↓のような感じです。簡単ですw

スクリプトファイル

上部に記載したスクリプトをPixelMathに書き込んで作成できます。しかし、面倒なので、
↓に完成ファイルをダウンロードできるようにしときます〜ボタンからダウンロードして下さい。

まとめ

今回紹介したBill Blanshan氏のストレッチスクリプトは、PixInsightのストレッチ処理における一定の基準を提供してくれる優れたツールです。従来、毎回異なる手法でストレッチを行っていたことに悩んでいましたが、このツールを使用することで、安定した処理が可能となり、天体画像の比較観察がより精度の高いものになりました。天体写真における仕上がりの美しさを追求するだけでなく、観測データとしての一貫性を求める方にとって、このスクリプトは非常に役立つツールだと言えます。

次回は、このスクリプトを使った後の画像処理の手順や、さらなる応用についてもご紹介する予定です。どうぞお楽しみに!

コメント

タイトルとURLをコピーしました