मैं scipy.signal.fftconvolve
पाया, as also pointed out by magnus, लेकिन समय है कि यह n आयामी है पर एहसास नहीं था। चूंकि यह अंतर्निहित है और सही मूल्यों का उत्पादन करता है, यह आदर्श समाधान की तरह लगता है।
Example of 2D Convolution से
:
सही! दूसरी तरफ, एसटीएससीआई संस्करण, सीमाओं को सही बनाने के लिए कुछ अतिरिक्त काम की आवश्यकता है?
In [4]: stsci.convolve2d(a, b, fft = True)
Out[4]:
array([[-12., -12., -12.],
[-24., -24., -24.],
[-12., -12., -12.]])
(STScI विधि भी संकलन है, जो मैं के साथ (मैं सिर्फ बाहर टिप्पणी की गैर अजगर भागों), this जैसे कुछ कीड़े है असफल रहा था और आदानों (संशोधित करने की आवश्यकता है [1, 2] हो जाता है [[ । 1, 2]]), आदि तो मैं मेरे द्वारा स्वीकृत जवाब में निर्मित fftconvolve()
समारोह)
सहसंबंध के लिए बदल दिया, निश्चित रूप से, घुमाव के रूप में एक ही बात है, लेकिन एक इनपुट के साथ उलट:
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]])
और the latest revision का विस्तार किया गया है आंतरिक रूप से दो आकारों का उपयोग करके (और फिर मैंने using real FFT for real input और using 5-smooth lengths instead of powers of 2 द्वारा इसे और अधिक बढ़ाया: डी)।
टिप्पणी कि सटीक गणना का उपयोग कर (कोई FFT) वास्तव में उन्होंने कहा कि यह धीमी है :) अधिक बिल्कुल के रूप में एक ही है एन आयामी करने के लिए कोड में ले जाया गया, FFT आधारित पद्धति बहुत तेजी से करता है, तो हो सकता है आपके पास सिग्नल और लगभग उसी आकार का कर्नेल है (यदि कर्नेल इनपुट से बहुत छोटा है, तो एफएफटी वास्तव में प्रत्यक्ष गणना से धीमा हो सकता है)। –
आदर्श रूप से, एफएफटी एल्गोरिदम स्वचालित रूप से शून्य-पैडिंग चीजों का सही आकार के लिए सही आकार में ख्याल रखेगा। – endolith
ओह आप शून्य पैडिंग के बारे में बात नहीं कर रहे हैं, आप 2000x2000 छवि के साथ 5x5 छवि से मेल खाने के बारे में बात कर रहे हैं। एल्गोरिदम क्यों अनुमान लगा सकता है कि एफएफटी अधिक कुशल होगा और इसे किस तरह से तेज कर देगा? – endolith