天文はかせ幕下

従来比最強のスターリダクション!?

Adam Blockさんのyoutubeで,非常にシンプルで効果的なStarReduction(以下SR)の方法が紹介されていました.考案者は B. Blanshenさんという方だそうです.

この方法では,星を小さくしたい元画像に対してStarnet2やStarXTerminatorを使った星消し画像を用意し,PixelMathの上手い数式をつかって二つをブレンドすることで,StarReductionを実現しています.

今までの方法では,星の間にブリッジが発生したり,輝星の周りがぼやけたりという欠点がありましたが,この方法ではそれが避けられています.さらに1パラメータで強弱が調整できます

早速やり方をみて行きましょう.使用するためにはPixinsightが必要です.

導入方法

まず,以下のGoogleDrive

https://drive.google.com/drive/folders/138L6Z2vbTzNAutbfe5cuhL9Pl0-iltRp

より,BillsStarReductionMethods_V2.xpsmをダウンロードしてください(ダウンロードが面倒くさい方は,以下に示す数式をコピペするだけでもOKです).

このファイルを開くと次のようなインスタンスが開きます

これらはPixelMathの数式が入ったインスタンスです.縦に並んだ3つのインスタンスいづれかを今回は使います.ここでは一番上の

を使ってみます.インスタンスをクリックするとPixelMathが開きます.そこには以下のような数式が書かれています

/* Star Reduction using PixelMath, by Bill Blanshan -

Transfer Method - V2 */

S= 0.15 ;// <--To reduce stars size more, lower "S" value

Img1= Starless ;// <--Starless image name, yours must match

/*

Drag bottom left arrow over to the image you require star reduction

Enjoy!!

*/

//equations

f1= ~( (~mtf(~S,$T)/~mtf(~S,Img1) )*~Img1); //Transfer method

max(Img1,f1)

ちなみに,二つ目のインスタンスには

/* Star Reduction using PixelMath, by Bill Blanshan -

Halo Method - V2 */

S= 0.15 ;// <--To reduce stars size more, lower "S" value

Img1= Starless ;// <--Starless image name, yours must match

/*

Drag bottom left arrow over to the image you require star reduction

Enjoy!!

*/

//equations

f2= ( (~(~$T/~Img1)-~(~mtf(~S,$T)/~mtf(~S,Img1) ) )*~Img1);

f3= (~(~$T/~Img1)-~(~mtf(~S,$T)/~mtf(~S,Img1) ) );

max(Img1,$T-mean(f2,f3))

三つ目は以下の通り.

/* Star Reduction using PixelMath, by Bill Blanshan -

Star Method - V2 */

Img1= Starless ;// <--Starless Image name

I= 1 ;// <--number of iterations, between 1-3

M= 1 ;// <--Method mode; 1=Strong; 2=Moderate; 3=Soft reductions

/* Drag bottom left arrow over to the image you require star reduction

Note:

Strong mode produces smaller sharp stars while removing small stars

Moderate mode still has sharp stars and some smaller stars

Soft mode is a simple star reduction of the original image */

//equations:

E1= $T*~(~(Img1/$T)*~$T); //iteration-1

E2= max(E1,($T*E1)+(E1*~E1) );

 

E3= E1*~(~(Img1/E1)*~E1); //iteration-2

E4= max(E3,($T*E3)+(E3*~E3) );

 

E5= E3*~(~(Img1/E3)*~E3); //iteration-3

E6= max(E5,($T*E5)+(E5*~E5) );

 

E7= iif(I==1,E1,iif(I==2,E3,E5)); // Strong reduction mode

E8= iif(I==1,E2,iif(I==2,E4,E6)); // Moderate reduction mode

 

E9= mean(

$T-($T-iif(I==1,E2,iif(I==2,E4,E6) ) ),

$T*~($T-iif(I==1,E2,iif(I==2,E4,E6) ) ) ); //soft reduction mode

max(Img1,iif(M==1,E7,iif(M==2,E8,E9) ) )

これらの式の意味は,まだ理解していません.でもとにかく使ってみましょう.

使用方法と結果

(3つ目のインスタンスを例外として)上の数式で3行目にあるパラメータ” S ”が効果の強さを表します.この値が小さいほど星が小さくなります.S=0.5がニュートラルで星の大きさが変化しません.

画像に適用するためには,あらかじめStarNet2などを使って生成した星消し画像を用意しておき”Starless”と名前を付けておきます

この状態で,PixelMathの▲を元画像にドラッグ&ドロップするだけで,処理はおしまいです.

結果を見てみます

右が使用前,左が使用後です.左上のあたりを拡大してみると

こんな感じ.北天ではもっとも星が密集している北アメリカ周辺ですが,きれいに星を小さく出来ているようです.

従来方法との比較

この方法の副作用について,まだ十分に検証出来てはいません.しかし,顧問が試した範囲では,従来の方法の欠点が克服されていました

 

たとえばMT(明るさの最小値)を使うSRでは,微光星の間に架橋が発生してしまう欠点がありました.

星の間に架橋が発生した例

今回の方法では,MTを使用していないので,その心配はなさそうです.実際,同じ領域を見てみますと,確かに架橋は抑えられています.

星が楕円なのは,ガイドエラーです

 

また,AdamBlockさんの開発したスクリプト”Ez StarReduction”は,ドーナツ型のマスクを使用するために,明るい星の周りが不自然にボンヤリするという欠点がありました.今回の方法ではその点も改善されています

右が”Ez StarReduction”の適用後で,中心の星の周りがすこしボケています.左の方は今回の方法の適用後で,中心星の周りに不自然さはありません.

終わりに

というわけで,世界にはアイデアの優れた方が居るのですねえ.数式の意味が理解出来たら,また更新します.

ちなみに,効果の強さを表すパラメータ S は,HistogramTransformationの中間スライダの値に関係しています.中間スライダを右に寄せて,例えば0.85とすると以下のように画像が暗くなります.この時の星の大きさを最終画像に適用したかったら,

S=1-0.85=0.15

とすればよいようです.なんともわかりやすい

後日追記

PixelMathの数式の意味ですが,Twitterでおののきももやすさんが教えてくれました.

分かってみれば簡単でした.要は

(元画像の反転)/(星消し画像の反転)

という計算で(星だけ画像の反転)を作っておいて,それをmtf関数で暗くしたあと,星消し画像とスクリーン合成する.という考え方のようです.