リニアフェーズのノイズ処理 (Waveletsの解説付き) 〜 PixInsightのMLT

何をするともなくネットに上がっているいろいろな方のPixInsightのワークフローを見ていて、はたと気づきました。

「みんなMultiscaleLinearTransformってのを使ってる」

みんなとはどこからを指すのか定義せよ、と、子供がおもちゃを欲しがった時の、大人による定番の言い逃れはさておき、早速調べてみました。

MultiscaleLinearTransform(MLT)とは、リニアでもノンリニアでも使用可能なノイズリダクションです。私はこれまでリニアフェーズでノイズ処理をしていませんでした。しかし思えばリニアは下準備、ノンリニアは画像表現。表現が決まった最後にノイズを処理するより、下準備のうちにする方が理にかなっています。MLTがリニア、ノンリニアのどちらでも使えるけれどあえて処理名にLinearとはいっているのも、そんなところかもしれません。

PixInsightの最強のノイズリダクションといえばTGVDenoiseです。Twitterでmasa_oさんに教えてもらった情報では、SCNRとTGVDenoiseをリニアフェーズで使うことで、後続の処理がうまくいっているとのこと。なるほど。やはりリニアでのノイズリダクションは有効でしたか!TGVDenoiseは処理の最後の仕上げに残そうと思うので、今回のリニアでの処理はMultiscaleLinearTransformを使うことにしました・・・いえ単に使ってみたかっただけです。

下記の記載は、解説本である”Inside Pixinsight”で採用されているフローを使っています。慣れてきたらアレンジを加えたいですが、今回はそのまま使用しました。

Waveletsってなんだ

ノイズ処理方法に入る前に少しだけWaveletsの解説を。MultiscaleLinearTransformに限らず、PixinsightではWavelets処理がたくさんあります。簡単にいうと、対象物の大きさによって画像を分けて、大きさごとに個別に処理する手法です。

今回の処理に使ったこの画像で説明します。

処理に使った画像
処理に使った画像

わかりやすくするためにProcess – ColorSpaceConversionメニューのConvertToGrayscaleを使って、白黒に変換します。

白黒画像に変換
白黒画像に変換

この画像をWaveletsでレイヤーに分けます。ExtractWaveletLayersスクリプトを使って対象画像をWavelets処理でレイヤー分けし、別々の画像として取り出します。Waveletsの処理はノイズリダクションの中で行われていることですが、今回は理解のためにExtractWaveletLayersを使ってマニュアルでレイヤーを取り出してみます。実際にMultiscaleLinearTransformを使用するときは内部で自動でWaveletsが機能しますので、下記の処理は不要で、ここでは読むだけでOKです。

それではScript – Image AnalysisメニューのExtractWaveletLayersを実行します。

ExtractWaveletLayers Script

すると画像が5つのレイヤーに分離されそれぞれの画像ができます。まずはLayer 0から。MLTはLayerを1からカウントしますがExtractWaveletLayersは0からカウントします。最も構造物が細かいレイヤーです。

Layer 0
Layer 0

続いてLayer 1。ノイズの多くはLayer 0とLayer 1に含まれています。

Layer 1
Layer 1

続いてLayer 2。

Layer 2

続いてLayer 3。だんだん大きくなってきました。星雲の構造も含まれてきました。

Layer 3
Layer 3

Layer 4。大きな星が入っています。

Layer 4
Layer 4

最後がLayer Residual。残り全部です。星雲の主要な構造もここに入っています。

Layer Residual
Layer Residual

Waveletsの中でどのように構造物を仕分けしているか見てみました。このレイヤーごとにノイズリダクションをかけていきます。ノイズはLayer 1やLayer 2に入っているので、上位のレイヤーほど強くノイズリダクションをかけます。

前置きはここまで。ここから処理方法を解説します。

マスクの作成

処理をかけたいのは主に背景なので星雲をマスクするためにRangeMaskを使ってマスクを作ります。この処理の前にDeconvolutionを使った場合、マスクをすでに作っているかと思います。しかしDeconvolutionは星雲に広くかけたいので星雲多め、今回は背景に広くかけたいので星雲少なめ、としたいので新たに作ることにします。MultiscaleLinearTransformにも独自にマスクを作る機能がありますが、カラー画像でうまく作る方法が見当たらなかったので、RangeMaskを使うことにしました。

リニアフェーズでまだストレッチをしていないので、画像のクローンを作成してクローンをストレッチしてマスクを作ることにします。最初に対象となる画像のタブをデスクトップにドラッグ&ドロップしてクローン画像を作ります。

クローンの作成
クローンの作成

次に作成したクローンをHistgramTransformationを使ってストレッチします。STFの情報をHTに移し、クローン画像に対してストレッチします。これでストレッチされたクローンができあがります。

クローンをストレッチ
クローンをストレッチ

ストレッチしたクローン画像を利用してRangeMaskでマスクを作ります。ProcessメニューからRangeMaskを選択してマスクを作ります。上述のように今回は背景へのノイズリダクションなので、星雲小さめにマスクを作りました。作成したマスクはクローンではなく、元の画像に対してセットしてください。Mask – Select Maskによりセットすることができます。マスクの使い方は、PixInsight基本フロー記事のRangeMask(マスクの設定)を参照ください。

こんな感じに星雲にマスクを設定しました。

星雲にマスクを設定
星雲にマスクを設定

MultiscaleLinearTransform (MLT)の実行

いよいよMLTの実行です。Process – NoiseReductionメニューからMultiscaleLinearTransformを実行します。・・といま気付いたのですがNoiseReductionメニューの上は、NoiseGenerationになっています。ノイズ生成ってどういうときに使うんだろう?気持ちがそっちにいってしまわないよう、気をとりなおしてMultiscaleLinearTransformを実行します。

MLT実行

ここから先のパラメーターはInside PixInsightの設定をまず試してみました。

AlgorithmをMultiscale linear transformに変更します。ただしStarletのままでも問題なく効果があるようです。Layerを一つ増やして5にします。

AlgorithmをMLTに、Layerを5にする

次にNoise Reductionの設定をします。Layersで対象のレイヤを選択して、ThresholdAmountIterationsを設定します。

レイヤーごとにThreshold, Amount, Iterationsを設定
レイヤーごとにThreshold, Amount, Iterationsを設定
  • Threshold:
    • 最大値としてどれくらいの強さまでノイズリダクションをかけるか設定します。小さいレイヤーには3-5程度が良いようです。大きくするとより多くのノイズがとれますが、元画像にダメージを与えます。
  • Amount:
    • ノイズをどれくらいの割合で削減するか決めます。1の場合、認識されたノイズを全て削減します。
  • Iterations:
    • ノイズリダクションを何回かけるか設定します。ノイズ削減効果が足りないときはAmountをあげるよりIterationsを増やす方が良いようです。

パラメータ設定は人それぞれに特徴がありますが、総じて言えるのは小さいレイヤーには強く、大きいレイヤーには弱く設定しています。今回は、Layer1から5まで順に次のように設定しました。

  • Layer 1: T=5, A=0.5, I=2
  • Layer 2: T=3, A=0.45, I=2
  • Layer 3: T=2.5, A=0.40, I=2
  • Layer 4: T=1.5, A=0.40, I=2
  • Layer 5: T=0.5, A=0.35, I=2
  • Layer R: 設定しない

信頼しているLight Vortex Astronomyの解説では下記の設定でした。Layer数は増やさず、またAmount0.5に固定。Iterationsはそれぞれ変更しています。

  • Layer 1: T=3, A=0.5, I=3
  • Layer 2: T=2, A=0.5, I=2
  • Layer 3: T=1, A=0.5, I=2
  • Layer 4: T=0.5, A=0.5, I=2
  • Layer R: 設定しない

より強度の強いノイズリダクションとして、次の設定も説明されていました。

  • Layer 1: T=4, A=0.5, I=4
  • Layer 2: T=2, A=0.5, I=3
  • Layer 3: T=1, A=0.5, I=3
  • Layer 4: T=0.5, A=0.5, I=2
  • Layer R: 設定しない

Light Vortex Astronomyによれば、ThresholdとIterationでコントロールし、Amountは1以下の数字にしておくことを推奨しています。Amountをあまりあげない、というのはInside PixInsightと同じですね。

最後にターゲットの設定です。カラー画像の場合はデフォルトのRGB/K componentsのままにします。

ターゲットの設定
ターゲットの設定

では実行してみましょう。ドキドキ・・・・

実行前がこちら。

MLTの実行前
MLTの実行前

実行結果がこちらです。

MLT実行後
MLT実行後
MLTの処理前と処理後
MLTの処理前と処理後

背景のノイズが綺麗になりました。私としてはまずは満足。リニアフェーズでノイズを削減することで、安心してストレッチ後のノンリニア処理を楽しむことができます。

ところでMLTを調査していると、あちこちに「Noise ReductionはReduction(削減)であって、Elimination(除去)ではない。露出時間を増やすことをまず考えなさい」という趣旨の記載がありました。「いや、わかるんですよ。わかるんですが、日本には雲という存在があって・・・」とWebブラウザに向かって謎に言い訳しています。

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