畳み込み関数を用いる¶
概要¶
2つの畳み込み関数を提供した。これらは以下のように導入されています
>>> from astropy.convolution import convolve, convolve_fft
そして両方として使われています
>>> result = convolve(image, kernel)
>>> result = convolve_fft(image, kernel)
convolve()
直接畳み込みアルゴリズムとして実現されています convolve_fft()
高速フーリエ変換(FFT)を用いる。したがって,前者は小さいカーネルに適用し,後者は大きなカーネルに適用した方がはるかに効率が良い.
入力画像とカーネルはリストまたは numpy
1、2、または3次元の配列(画像とカーネルの次元数は同じであるべき)。その結果1つは numpy
入力画像と同じ次元を持つ配列.畳み込みはつねに浮動小数点形式で行われる.
♪the convolve()
関数受容オプションの boundary=
配列のエッジで畳み込みを行うパラメータを記述する。の値 boundary
はい、そうです。
None
:カーネルが配列のエッジを超えている場合、結果値をゼロ(デフォルト)に設定します。'fill'
:配列境界外の値を定数に設定する.このオプションが指定されている場合は、使用すべきですfill_value=
パラメータは、デフォルトでゼロである。'wrap'
:境界は周期的であると仮定する.'extend'
:配列外部の値を最も近い配列値に設定する.
デフォルトの場合、カーネルは標準化されていません。畳み込みの前に正規化するためには、使用してください。
>>> result = convolve(image, kernel, normalize_kernel=True)
実例.¶
カスタマイズされたカーネルを有し、境界処理がない一次元アレイを平滑化する:
>>> import numpy as np
>>> convolve([1, 4, 5, 6, 5, 7, 8], [0.2, 0.6, 0.2])
array([1.4, 3.6, 5. , 5.6, 5.6, 6.8, 6.2])
上述したように、境界には‘EXTEND’アルゴリズムが使用される:
>>> convolve([1, 4, 5, 6, 5, 7, 8], [0.2, 0.6, 0.2], boundary='extend')
array([1.6, 3.6, 5. , 5.6, 5.6, 6.8, 7.8])
オリジナル配列にNaN値が存在する場合,カーネルを使用する:
>>> import numpy as np
>>> convolve([1, 4, 5, 6, np.nan, 7, 8], [0.2, 0.6, 0.2], boundary='extend')
array([1.6 , 3.6 , 5. , 5.75, 6.5 , 7.25, 7.8 ])
カーネルおよび配列は、リストとして指定することができます numpy
配列しています以下の例は、1次元配列をリストとしてどのように構成するかを示す。
>>> kernel = [0, 1, 0]
>>> result = convolve(spectrum, kernel)
リスト形式の2次元配列::
>>> kernel = [[0, 1, 0],
... [1, 2, 1],
... [0, 1, 0]]
>>> result = convolve(image, kernel)
リスト形式の3 D配列:
>>> kernel = [[[0, 0, 0], [0, 2, 0], [0, 0, 0]],
... [[0, 1, 0], [2, 3, 2], [0, 1, 0]],
... [[0, 0, 0], [0, 2, 0], [0, 0, 0]]]
>>> result = convolve(cube, kernel)
カーネル.カーネル¶
上の例ではカスタムカーネルを使用していますが astropy.convolution
内蔵カーネルも多く含まれていますので、ご参照ください 畳み込み核 それがそうです。