畳み込み関数を用いる

概要

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 内蔵カーネルも多く含まれていますので、ご参照ください 畳み込み核 それがそうです。