2017-11-14 30 views
1

私はデータキューブを 'キューブ'と呼んでいます。私はガウスのカーネルで各2Dスライスを畳み込む必要があります。データキューブのガウス畳み込み

ただし、次のコードを使用すると、各スライスの弱いピクセルを希釈する正規化ガウスカーネルが使用されます。

各ピクセルガウスを 'max(Gaussian)'で除算して、各ピクセルがピクセル強度に対して畳み込まれるようにする方法はありますか?

import numpy as np 
from astropy.convolution import convolve, Gaussian2DKernel 

std = 2 

gauss_kernel = Gaussian2DKernel(std) 

for i in range(len(cube[:,0,0])): 
     cube[i,:,:] = convolve(cube[i,:,:], gauss_kernel/np.max(gauss_kernel)) 
+0

畳み込み後に結果をスライスで分割してもほとんど同じ効果が得られませんか? – Evert

+0

本当にわかりません。私がここで起こっていることは、各要素(またはピクセル)に対して、隣接する要素にまたがって広がる結果の畳み込みガウスが正規化されることです。このため、上位値の要素は、下位値のピクセルとは異なる影響を受けます。しかし、私が必要とするのは、要素が元の値を保持することですが、次にガウスの形で他の要素にぼかしを広げます。畳み込み後のスライスでの分割は、各要素を1に設定するだけでしょうか? – user8188120

+0

投稿したソリューションは、ピーク正規化ガウス分布とどのように畳み込むかを示しています。デフォルトでは、積分正規化ガウス関数と畳込みが行われます。ほかに何が欲しいですか?キューブ内の各チャンネルを平滑化する一般的な使用例については、http://spectral-cube.readthedocs.io/en/latest/smoothing.html#spatial- smoothingを使用することができます。 – keflavich

答えて

1

あなたがすでに投稿した解決策は、ピーク正規化ガウスとどのように畳み込むかを示しています。あなたのコメントから、 "ピーク"が周囲のデータポイントの影響を受けないように思えます。厳密には、それは不可能です。畳み込みの意味は、すべてピクセルが広がります。

正規化された畳み込みについては、astropyが実装しています(http://docs.astropy.org/en/stable/convolution/index.htmlを参照)。周囲のピクセルがNANに設定されている限り、それらは近隣のピクセルに何も寄与しません。空のピクセルが空白になっている場合は、周囲の空のピクセルにぼかしたいピクセルがほんのわずかですが、空のピクセルをNaNに設定してください。この例を参照してください:http://docs.astropy.org/en/stable/convolution/index.html#using-astropy-s-convolution-to-replace-bad-data

1

あなたの問題は高レベルのカーネルと畳み込みに関連していると私は信じています。

いくつかの配列があるとします。あなたがconv(arr,kernel)をすれば、あなたが戻ってARRを取得する必要がありますので

arr = np.ones((5,5)) 

は、そして、あなたはこの場合にも、いくつかの2D畳み込みカーネル

kernel = [[0,0,0], 
      [0,1,0], 
      [0,0,0]] 

を持って、それは、アイデンティティカーネルです。

カーネルを1Dボックスブラーカーネルに変更した場合はどうなりますか?古い値は1で、コンボリューション後にそれが1*arr[3,2] + 1*arr[3,3] + 1*arr[3,4] = 3になります -

kernel = [[0,1,0], 
      [0,1,0], 
      [0,1,0]] 

あなたはarrバックのぼやけたバージョン、1の要素(3,3)を考えてみましょうピーク、すなわち配列を取得するために期待するべきではありません。代わりに、kernelは、その中央の列に沿って0.33を持っていた場合、あなたは各要素の1/3になるだろう、と値が1

これは、畳み込みカーネルのいくつかの分類を区別残る - 非正規化なものがありますし、それらの値は、ユニットピークであり、1の最大値を有するもの、及び(値の全ての合計)1.

全エネルギーの和を有する単位エネルギーあるもの非拘束でありますあなたのイメージは、正規化されていない、または単位ピークカーネルで変化します。単位エネルギーカーネルと畳み込むと、画像内の全エネルギーは前と後とで同じになります。あなたのコメントに対処するには

は、各画素がピクセル強度に畳み込ま相対的であるように、「最大(ガウス)」と言うによるガウスの各画素を分割する方法はありますか?

あなたが望む行動が暗いもの(バックグラウンド)以上にぼやけする明るいもの(星)のためであれば、それは自然に起こります。または、より具体的には、の高コントラストコントラストの低いものよりも物事がぼやけています。カメラを想像してみてください。それはDSLRやあなたの電話機なんか他のものかもしれません。青くて曇りのない空が見えない場合は、教えてください。星に焦点が外れている場合は、教えてください。

畳み込みのピクセルの値に何らかの重み付けをしたい場合は、データを複製し、各ピクセルを適切な重みでスケールし、変更したデータをカーネルで畳み込む必要があります。

+0

本当に有益でした!私はあなたが正しいと思っています。ある意味では、プロセスに関する知識が不足していることが問題であり、実際には畳み込みはうまく動作します。 – user8188120

関連する問題