Scipy(または別の人気のあるライブラリ)に組み込まれているFFTベースの2D相互相関または畳み込み関数はありますか?
次のような関数があります。
scipy.signal.correlate2d
_-「convolveND
によって実装された直接メソッドは、大きなデータの場合は遅くなります」scipy.ndimage.correlate
_-「配列は、正確な計算を使用して(つまり、FFTではなく)指定されたカーネルと相関しています。」scipy.fftpack.convolve.convolve
_、私にはよくわかりませんが、間違っているようですnumarrayには correlate2d()
関数と_fft=True
_スイッチ がありましたが、numarrayがnumpyに折りたたまれていて、この関数が含まれているかどうかがわかりません。
_scipy.signal.fftconvolve
_、 magnusによっても指摘されている を見つけましたが、それがn-次元であることを当時は認識していませんでした。組み込みで適切な値を生成するため、理想的なソリューションのようです。
2D畳み込みの例 から:
_In [1]: a = asarray([[ 1, 2, 3],
...: [ 4, 5, 6],
...: [ 7, 8, 9]])
In [2]: b = asarray([[-1,-2,-1],
...: [ 0, 0, 0],
...: [ 1, 2, 1]])
In [3]: scipy.signal.fftconvolve(a, b, mode = 'same')
Out[3]:
array([[-13., -20., -17.],
[-18., -24., -18.],
[ 13., 20., 17.]])
_
正しい!一方、STSCIバージョンでは、境界を正しくするために追加の作業が必要ですか?
_In [4]: stsci.convolve2d(a, b, fft = True)
Out[4]:
array([[-12., -12., -12.],
[-24., -24., -24.],
[-12., -12., -12.]])
_
(STSCIメソッドもコンパイルが必要ですが、これは失敗しました(Python以外の部分をコメントアウトしました)、 this のようなバグがあり、入力を変更すると([1、2]は[[1 、2]])など。そこで、受け入れた回答を組み込みのfftconvolve()
関数に変更しました。)
もちろん、相関は畳み込みと同じですが、1つの入力が逆になります。
_In [5]: a
Out[5]:
array([[3, 0, 0],
[2, 0, 0],
[1, 0, 0]])
In [6]: b
Out[6]:
array([[3, 2, 1],
[0, 0, 0],
[0, 0, 0]])
In [7]: scipy.signal.fftconvolve(a, b[::-1, ::-1])
Out[7]:
array([[ 0., -0., 0., 0., 0.],
[ 0., -0., 0., 0., 0.],
[ 3., 6., 9., 0., 0.],
[ 2., 4., 6., 0., 0.],
[ 1., 2., 3., 0., 0.]])
In [8]: scipy.signal.correlate2d(a, b)
Out[8]:
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[3, 6, 9, 0, 0],
[2, 4, 6, 0, 0],
[1, 2, 3, 0, 0]])
_
最新のリビジョン は、内部で2の累乗のサイズを使用することで高速化されました(その後、 実際の入力に実際のFFTを使用 と 5を使用)でさらに高速化されました-2の累乗ではなく滑らかな長さ :D)。
scipy.signal.fftconvolve、signal.convolve、signal.correlateを見てください(signal.correlate2dがありますが、中央に配置されていない、シフトされた配列を返すようです)。
私はあなたがscipy.stsciパッケージが欲しいと思います:
http://docs.scipy.org/doc/scipy/reference/stsci.html
In [30]: scipy.__version__
Out[30]: '0.7.0'
In [31]: from scipy.stsci.convolve import convolve2d, correlate2d
Scipyでこのパッケージのステータスを追跡できなくなりましたが、ユーザーの便宜のために、stsci_pythonリリースパッケージの一部としてndimageが含まれていることはわかっています。
http://www.stsci.edu/resources/software_hardware/pyraf/stsci_python/current/download
または、必要に応じてリポジトリからプルできるはずです。
https://www.stsci.edu/svn/ssb/stsci_python/stsci_python/trunk/ndimage/
Overlap-addメソッド を使用するScipy 1.4以降、 scipy.signal.oaconvolve があることに注意してください。