convolve_fft¶
- astropy.convolution.convolve_fft(array, kernel, boundary='fill', fill_value=0.0, nan_treatment='interpolate', normalize_kernel=True, normalization_zero_tol=1e-08, preserve_nan=False, mask=None, crop=True, return_fft=False, fft_pad=None, psf_pad=None, min_wt=0.0, allow_huge=False, fftn=<function fftn>, ifftn=<function ifftn>, complex_dtype=<class 'complex'>)[ソース]¶
Ndarrayとn-カーネルを畳み込みする.以下を含む畳み込み画像を返す
shape = array.shape
それがそうです。カーネルが真ん中にあると仮定する.convolve_fft
非常に似ていますconvolve
それが代わりになったからですNaN
補間関数としてカーネルを用いた補間を有する元の画像中の値。しかし、それはまた、実装に固有の多くの追加オプションを含む。convolve_fft
とは異なりscipy.signal.fftconvolve
いくつかの点で治療することができます
NaN
値はゼロであるか、またはその上に補間される。inf
values are treated asNaN
これは、FFT速度を向上させるために、最も近いより速いサイズに充填することを選択することができる。これらのサイズはNumpyとScipyの実現に最適化されています
fftconvolve
デフォルトでもそれらが使用され、他の外部関数を使用する場合(以下参照)、結果が異なる可能性があります。これは唯一効果的です。
mode
‘Same’(すなわち,同じ形状配列を返す)である.自分のFFTを使うことができます例えば pyFFTW あるいは…。 pyFFTW3 これは性能を向上させる可能性があります。具体的にはあなたのシステム構成に依存します。PyFFTW 3はスレッド化されているため,多核計算機上で顕著な性能優位が生じる可能性があるが,コストはより多くのメモリを必要とする.指定
fftn
そしてifftn
デフォルト値をカバーするためのキーワード、すなわちnumpy.fft.fftn
そしてnumpy.fft.ifftn
それがそうです。♪thescipy.fft
関数はまた、より良い性能およびマルチスレッドオプションを提供します。
- パラメータ
- 配列. :
numpy.ndarray
numpy.ndarray
これに畳む配列
kernel
それがそうです。1、2、および3 Dアレイのみがテストされたにもかかわらず、任意の次元であってもよい。- 核 :
numpy.ndarray
あるいは…。astropy.convolution.Kernel
Numpy.ndarrayやAsterpy.Curolution.Kernel 核を畳む。次元数は配列の次元数に適合すべきである.これらの次元は やめて! すべての方向に奇数でなければなりませんこれは非FFTとは違います
convolve
機能します。以下の条件を満たせば,カーネルは標準化される.normalize_kernel
もう設置しました。真ん中にあると仮定します(すなわち、カーネルが非対称である場合、シフトを引き起こす可能性があります)- boundary{‘Fill’,‘WRAP’},オプション
境界をどのように処理するかを示すフラグ:
‘Fill’:配列境界外の値をFILL_VALUE(デフォルト値)に設定する
‘WRAP’:周期的境界
♪the
None
FFTによる畳み込みは‘EXTEND’パラメータをサポートしていない- fill_value浮動、オプション
BORDINE=‘FILL’を用いた場合に配列外部で使用する値
- nan_treatment{‘内挿’,‘充填’}
interpolate
これにより、画像およびカーネル内のNaN(画像中でNaNの画素)を無視した各位置におけるカーネルが再正規化される。fill
NaN画素を固定値で置き換える(デフォルトゼロですので、参照されたい)fill_value
)畳み込みの前に。カーネルの総和がゼロに等しい場合、NaN補間は不可能であり、異常を引き起こすことに留意されたい。- normalize_kernel呼び出し可能またはブーリアンタイプであれば、オプションで
指定すると,カーネルをそれを割って仕様化する関数である.例えば
normalize_kernel=np.sum
カーネルは、以下のように修正されることを意味します。kernel = kernel / np.sum(kernel)
それがそうです。Trueであれば,デフォルトではnormalize_kernel = np.sum
それがそうです。- normalization_zero_tol浮動、オプション
カーネルはゼロの絶対許容差とは異なるかどうか.カーネルの総和がゼロであれば,この精度の範囲では仕様化できない.デフォルト値は“1 e-8”です。
- preserve_nanブルル.
畳み込みを行った後、もともとNaNだった画素は再びNaNになるべきですか?
- maskなしまたはndarray
A "mask" array. Shape must match
array
, and anything that is masked (i.e., not 0/False
) will be set to NaN for the convolution. IfNone
, no masking will be performed unlessarray
is a masked array. Ifmask
is notNone
andarray
is a masked array, a pixel is masked of it is masked in eithermask
orarray.mask
.- cropブル値、オプション
デフォルトで有効です。入力画像とカーネル内の大きい方の画像を返す.画像とカーネルが反対方向に非対称であれば,2方向に最大の画像を返す.例えば、入力画像が形状を有する場合 [100、3] 形のあるナッツです [6,6] 出力は [100,6] それがそうです。
- return_fftブル値、オプション
戻ります。
fft(image)*fft(kernel)
畳み込みではなくifft(fft(image)*fft(kernel))
)である。PSDを作るのに有用です。- fft_padブル値、オプション
デフォルトで有効です。ゼロパディング画像は、最も近いサイズまで、FFTをより効率的に実行することをサポートし、一般に、値は、最初の3~5個の素数に因数分解されることができる。使用
boundary='wrap'
これは無効になります- psf_padブル値、オプション
ゼロ充填画像は、平滑化されたときのエッジサラウンドを回避するために、少なくとも画像サイズの合計である。デフォルトの場合、これは以下のように有効になります
boundary='fill'
しかしブールオプションでカバーすることができますboundary='wrap'
そしてpsf_pad=True
互換性がありません。- min_wt浮動、オプション
もし無視したら
NaN
/ゼロでは、この値よりも重みが小さいすべての格子点を強制的にNaN
(格子点の重みは no 隣人を無視して1.0).もし…。min_wt
ゼロであれば、すべてのゼロ重みの重点はゼロに設定され、そうではない。NaN
(そうでなければ,1/0=NaNであるから).以下の例を参照されたい。- allow_hugeブル値、オプション
FFTで大型アレイを使用することは許可されていますか?Falseであれば,アレイやカーネルサイズが1 GB以上の場合に異常を引き起こす.
- fftn呼び出してもいいです。オプションです。
FFT関数です。あなた自身のfft、例えばfftw 3ラッパやScipyのfftnを使用するように書き換えることができます。
fft=scipy.fftpack.fftn
それがそうです。- ifftn呼び出してもいいです。オプションです。
逆FFT関数。同じ方法で書き換えることができます
fttn
それがそうです。- complex_dtype複雑なタイプ、オプション
使用する複雑なデータタイプです。
numpy
64から256までの一連のオプションがあります。
- 配列. :
- 返品
- defaultNdarray
array
…と絡むkernel
それがそうです。もし…。return_fft
設定されていれば戻りますfft(array) * fft(kernel)
それがそうです。クロッピングが設定されていない場合は画像に戻るが、入力サイズではなくFFTパディングサイズを使用する。
- 賃上げをする
- ValueError:
パディング後の配列が1 GBより大きい場合、この異常が引き起こされます。
allow_huge
本当ですか。
参考
convolve
Convolveはこのコードの非FFTバージョンである.これはメモリ効率が高く,小さいカーネルに対してはより高速にすることができる.
注意事項
使用
psf_pad=True
大きなPSFとは,生成されるデータが大きくなり,大量のメモリを消費する可能性がある.詳細については、公開されているhttps://githubb.com/avospy/avospy/ull/4366およびhttps://githubb.com/avospy/avospy/ull/11533での更新を参照されたい。実例.
>>> convolve_fft([1, 0, 3], [1, 1, 1]) array([0.33333333, 1.33333333, 1. ])
>>> convolve_fft([1, np.nan, 3], [1, 1, 1]) array([0.5, 2. , 1.5])
>>> convolve_fft([1, 0, 3], [0, 1, 0]) array([ 1.00000000e+00, -3.70074342e-17, 3.00000000e+00])
>>> convolve_fft([1, 2, 3], [1]) array([1., 2., 3.])
>>> convolve_fft([1, np.nan, 3], [0, 1, 0], nan_treatment='interpolate') array([1., 0., 3.])
>>> convolve_fft([1, np.nan, 3], [0, 1, 0], nan_treatment='interpolate', ... min_wt=1e-8) array([ 1., nan, 3.])
>>> convolve_fft([1, np.nan, 3], [1, 1, 1], nan_treatment='interpolate') array([0.5, 2. , 1.5])
>>> convolve_fft([1, np.nan, 3], [1, 1, 1], nan_treatment='interpolate', ... normalize_kernel=True) array([0.5, 2. , 1.5])
>>> import scipy.fft # optional - requires scipy >>> convolve_fft([1, np.nan, 3], [1, 1, 1], nan_treatment='interpolate', ... normalize_kernel=True, ... fftn=scipy.fft.fftn, ifftn=scipy.fft.ifftn) array([0.5, 2. , 1.5])
>>> fft_mp = lambda a: scipy.fft.fftn(a, workers=-1) # use all available cores >>> ifft_mp = lambda a: scipy.fft.ifftn(a, workers=-1) >>> convolve_fft([1, np.nan, 3], [1, 1, 1], nan_treatment='interpolate', ... normalize_kernel=True, fftn=fft_mp, ifftn=ifft_mp) array([0.5, 2. , 1.5])