PixInsightのBPPアルゴリズムによるSNRの違い

TL; DR

glasnsciです。射手座付近の領域を掲載する前に、蒼月城さんの動画を参考にPixInsightのBPPアルゴリズムを変えたときの信号雑音比(SNR)について検証しました。今回の処理に使った画像ではデモザイクとピクセル補完の組み合わせは、BilinearとBicubic B-splineの組み合わせが最もSNRがよくなると言えることがわかりました。

蒼月城さんの動画は良いぞ

蒼月城さんの動画はどれも非常に参考になるのでいつも興味深く見ています。今回はPixInsight/Astro Pixel Processor/Deep Sky Stackerのスタックの比較でした([APTips #013/ miscellaneous編] PI vs APP vs DSS No.1は誰だ! DSLR RAW Pre-processing 対決!)。

www.youtube.com

フムフム。なるほど、ソフトウェアによって処理時間とかノイズに差があるんだな~。まあ考えてみれば当たり前か~とボーッと眺めていました。ソフトウェアによって処理時間/ノイズに差が出るのは、処理のアルゴリズムによるんだなふーん。なるほど、完全に理解した。

蒼月城さんは動画の中でPIのアルゴリズムとDSSのアルゴリズムを揃えて処理していました。そういえば、ワタクシPIのBatch Pre-processを動かすときに、全部Auto(デフォルト値)から動かした記憶がありません。そのままです。動画では(蒼月城さんが処理していたデータでは)DeBayer MethodとPixel Interpolationの組み合わせは、BilinearとBicubic B-splineが一番SNRがよくなると紹介されていました。

が、果たして本当にそうでしょうか?少し疑ってみることにしましょう。

PixInsightのバッチ処理アルゴリズムでノイズに差が出るのか?

PIのDeBayer Methodは3つあります。現代のカメラのほとんどはベイヤー配列のセンサーを積んでいます。輝度情報のみ得ることができるCMOS/CCDセンサーにRGBのカラーフィルターを載せているため、色情報を得るにはフィルターの配列情報をもとに、復元処理が必要となります。これをDeBayerやDemosaicと言います。デモザイクの手法にはいくつかあり、PIでは下記の3つを選択できます。

  1. Superpixel
  2. Blinear
  3. VNG

pixinsight.com

対して、Pixel Interpolation(ピクセル補間)のアルゴリズムは全部で10ヶ。

  1. Nearest Neighbour
  2. Bilinear
  3. Bicubic Spline
  4. Bicubic B-spline
  5. Lanczos-3
  6. Lanczos-4
  7. Lanczos-5
  8. Mitchel-Netravali Filter
  9. Catmul-Rom Spline Filter
  10. Cubic B-spline Filter

pixinsight.com

PIのドキュメンテーションを確認するに、最近傍法とバイリニアは変なアーチファクトがでたりしてあまりよくなさそうです。バイキュービック法は少し発展したイメージ。Lanczosから以後は、すべて近隣のピクセルから色情報を持ってくる際の重み付けに使用する関数が異なります。全部紹介するのは面倒なので、各々確認してください。

さて、これらのデモザイク&ピクセル補間を変えた際にSNRがどのように変化するのか、念の為確認してみましょう。天文マニヤの人たちがやっている検証は頭を使うものばかりですが、今回は時間さえかければ浅学のワタクシにも十分触れる内容のはずです。SNRの測定にはAstrography by Herbert WalterからもらってきたSNR Viewのスクリプトを使います1(多分蒼月城さんもこのスクリプトだと思います)。RGB、CIE-Labで解析したいところですが、RGBチャンネルでノイズ解析する意味が今の所ないのでCIE-Lab色空間だけで解析することにします2。検証に使用した画像はCanon EOS 5D Mark IVの無改造機で撮影された画像23枚をスタックします。画像は拙作の射手座付近です。

f:id:fornax:20200913231057j:plain
検証に使用した画像

同時に、18枚のフラット画像、16枚のバイアスファイルをBPPで処理します。Cosmeticは無効化し、ピクセル補完処理のアルゴリズムのみ変化させます。ピクセル補完のパラメーターはClapming threshold: 30、Maximum Stars: 500、Noise Reduction: Disabledとします。

www.skypixels.at

SNR評価結果

SNR Viewでノイズ解析した結果を下表に示します。信号雑音比がdB値として出てきます。SNR Viewのドキュメンテーションでは、15 dBで31倍と言っているので、吐いている値はパワー値であることに留意したいです。3 dB違うとノイズの量が2倍違うことになります。また、判別の簡単のため、各チャンネルのmin/max値からセルに色付けしました。

Superpixel Bilinear VNG
L a b L a b L a b
Nearest Neighbour 29.27 63.05 62.22 43.44 75.44 76.60 41.38 84.71 84.59
Bilinear 30.10 66.27 65.35 45.99 78.05 78.52 43.46 87.01 86.73
Bicubic Spline 29.23 65.49 64.35 41.92 85.56 85.34 44.53 76.31 77.41
Bicubic B-spline 31.27 67.88 57.95 49.74 82.14 82.00 47.33 89.66 89.25
Lanczos-3 28.77 65.10 63.82 43.88 75.67 76.73 41.98 84.94 84.76
Lanczos-4 28.79 65.03 63.77 43.90 75.68 76.76 41.93 85.02 84.87
Lanczos-5 28.88 65.19 63.92 43.98 75.76 76.85 41.96 85.11 84.96
Mitchel-Netravali Filter 30.53 67.08 67.63 47.97 79.47 80.21 45.86 88.41 88.03
Catmul-Rom Spline Filter 29.77 67.63 66.54 46.22 78.26 78.46 43.98 86.88 86.56
Cubic B-spline Filter 32.36 57.30 58.47 38.52 83.95 83.30 37.83 89.32 88.93

グラフにしときます。このように結果を並べてみると、一目瞭然です。L画像のデモザイク手法はBilinear→VNG→Superpixelの順にSNRが良いです。しかしながら、abチャンネルではVNGがもっとも高くなります。ピクセル補間に関しても、Labで結果が異なります。LはCubic B-spline Filterが最も良く、Bicubic B-splineと僅差でした。一方で、abチャンネルはともにBicubic B-splineが最も良いです。

f:id:fornax:20200913220713p:plain
LチャンネルSNR(輝度ノイズ)
f:id:fornax:20200913220739p:plain
aチャンネルSNR(色ノイズ)
f:id:fornax:20200913220921p:plain
bチャンネルSNR(色ノイズ)

結果の解釈(考察と言うには雑)

デモザイク

デモザイクはSNRが良い順に L: Bilinear→VNG→Superpixel ab: VNG→Bilinear→Superpixel となりました。モザイクはおもに色情報の復元処理になりますが、天体画像だとものすごく高コントラストに色が変化する場所はたぶんすくないのでしょうね。VNGだと周辺ピクセルの勾配を考慮して色決定するので、もっともアーチファクトが現れにくいデモザイク手法ですから、abチャンネルでノイズが少なくなるのはうなずけると思います。

ピクセル補完

ここは、補間の重み付けが効いてるってのはよくわかりますけれど、種類が多すぎてどう議論して良いのかわかりません。とりあえずLanczos関数のようなsinc関数じみたやつは、補間時に重み付けが打ち消したりして変なアーチファクト出そうだなあって思いました(小学生の感想)。ウェーブレット変換に使ってるくらいですからそもそも小さい構造によく反応しそうです。それでノイズが消えませんていうのはおかしいような気もします(個人の見解です。)

そもそもピクセル補間なんて謎の技術なんですよ!あとは画像処理の専門家におまかせします。

まとめ

ノイズは一般的に輝度値が効くでしょうから、おそらくL画像が目立つことと思います。Lを積極的に低ノイズにして、次点で色ノイズも抑えていこうとすると、蒼月城さんの動画の通りBilinearとBicubic B-splineの組み合わせが最もSNRが良いと考えることができます。

承前というより免責したい

今回の検証は画像の種類が1種類だけなので、一般性には乏しいです。写っている対象や撮影したカメラによって差が出る可能性は十分にあります。例えば、コマごとに対象が流れていて、画像を回転する量が大きいときとかはまた違う結果になるかもしれません。あとは、星雲ばっかり写ってる画像じゃなくて星団だとまた違うとか、銀河だけ真ん中に写ってると結果に違いが出てきたりしそうです。

ほげほげ。わーるどかっぱずし。


  1. このSNRってどう評価してるのかすごく疑問です。

  2. 今回は、輝度ノイズと色ノイズとして分けて考えたいので、RGBではなく、CIE-Labにしました。実際、各色だけのピクセルを見たい、とかなったらRGBでもやってみます。RGBとは色空間は違いますが、モノクロセンサーでフィルターワークするようになったら必要になりそうですね。