2012-11-15 31 views
6

मेरे पास एक छवि है जिसे मैं एफएफटी का उपयोग कर आवृत्ति डोमेन में बदलना चाहता हूं, ऐसा लगता है कि जावा के लिए पुस्तकालयों की कमी है लेकिन मुझे दो मिल गए हैं। एक JTransforms है और दूसरा कम ज्ञात था और इसका कोई नाम नहीं है।छवि पर JTransforms FFT

कम ज्ञात व्यक्ति के साथ 2 डी केवल दो की शक्तियों की लंबाई वैल्यू हो सकता है लेकिन FastFourierTransform.fastFT(real, imaginary, true); जैसे विधियों का उपयोग करना आसान था, वास्तविक रूप से प्रत्येक पिक्सेल मानों से भरा युगल की 2 डी सरणी और काल्पनिक भाग 2 डी जेरो से भरा एक ही आकार सरणी। बूलियन मान आगे या विपरीत रूपांतरण पर निर्भर करेगा। यह मेरे लिए समझ में आया और यह दो आवश्यकताओं की शक्ति को छोड़कर काम करता था जो मैंने किए गए किसी भी बदलाव को बर्बाद कर दिया था (मैंने शुरुआत में छवि के चारों ओर काली जगह को दो की सबसे नज़दीकी शक्ति में फिट करने के लिए जोड़ा), जो मैं संघर्ष कर रहा हूं वह काम कर रहा है JTransforms के समकक्ष तरीकों का उपयोग करने के लिए और ऐसा करने में किसी भी मार्गदर्शन की सराहना करेंगे। मैं बताऊंगा कि मैं वर्तमान में क्या कर रहा हूं।

मेरा मानना ​​है कि प्रासंगिक वर्ग DoubleFFT_2D होगा, इसके निर्माता को कई पंक्तियां और कॉलम लेते हैं जिन्हें मैं अपनी छवि की चौड़ाई और ऊंचाई मानता हूं। क्योंकि मेरी छवि में कोई काल्पनिक भाग नहीं है, मुझे लगता है कि मैं doubleFFT.realForwardFull(real); का उपयोग कर सकता हूं जो काल्पनिक भागों को शून्य के रूप में मानता है और वास्तविक 2 डी सरणी को पिक्सल से भरा करता है। दुर्भाग्य से यह बिल्कुल काम नहीं करता है। जावाडॉक the input array must be of size rows*2*columns, with only the first rows*columns elements filled with real data बताता है लेकिन मुझे नहीं लगता कि यह मेरी छवि से कैसे संबंधित है और मुझे इस आवश्यकता को पूरा करने के लिए क्या करना होगा।

लंबी और खराब स्पष्टीकरण के बारे में खेद है, अगर कोई अतिरिक्त जानकारी की आवश्यकता है तो मुझे इसे प्रदान करने में खुशी होगी।

JTransforms पुस्तकालय और डॉक्स यहां पाया जा सकता: https://sites.google.com/site/piotrwendykier/software/jtransforms

उत्तर

5

यह बहुत बुरा JTransforms के लिए दस्तावेज़ है ऑनलाइन अन्य उपलब्ध ज़िपित download से नहीं है। यह बहुत पूर्ण और सहायक है, आपको इसे देखना चाहिए!

अपने प्रश्न का उत्तर देने के लिए: DoubleFFT_2D.realForwardFull(double[][] a) वास्तविक संख्याओं (आपके पिक्सेल) की एक श्रृंखला लेता है। हालांकि, एफएफटी के परिणाम में प्रत्येक इनपुट मान के लिए दो आउटपुट मान होंगे - प्रत्येक आवृत्ति बिन का असली और काल्पनिक हिस्सा। यही कारण है कि आपकी इनपुट सरणी वास्तविक छवि सरणी के रूप में दोगुनी होनी चाहिए, जिसमें से आधा खाली/शून्य से भरा हुआ है।

ध्यान दें कि सभी FFT कार्यों a का उपयोग न केवल निवेश के लिए, लेकिन यह भी उत्पादन के लिए - इसका मतलब है वहाँ में किसी भी छवि डेटा खो जाएगा, तो यह वैसे भी एक अलग/बड़ा सरणी में कॉपी करना वांछनीय हो सकता है!

इसके बजाय आपके परिदृश्य के लिए आसान और स्पष्ट फिक्स DoubleFFT_2D.realForward(double[][] a) का उपयोग करना होगा। यह केवल सकारात्मक स्पेक्ट्रम की गणना करेगा, क्योंकि नकारात्मक पक्ष इसके लिए सममित होगा। ऐसा इसलिए है क्योंकि आपके इनपुट मान वास्तविक हैं।

इसके अलावा, JTransforms में RealFFTUtils_2D वर्ग है, जो यह बहुत आसान आप बाद में सरणी :)

+0

असल में से अपने परिणाम पुनः प्राप्त करने के लिए कर देगा की जाँच, ऐसा लगता है (नए) डॉक्स GitHub पर अभी ऑनलाइन हैं : http://wendykierp.github.io/JTransforms/apidocs/ –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^