असतत फूरियर रूपांतरण के लिए शून्य आवृत्ति को केंद्रित करना


11

मैं एक इमेज प्रोसेसिंग एप्लिकेशन पर काम कर रहा हूं जो धुंधला हो जाना / तेज करने के लिए असतत फूरियर ट्रांसफॉर्म का उपयोग करता है। आवेदन अधिक या कम काम कर रहा है, लेकिन यांत्रिकी के बारे में कुछ अभी भी मुझे भ्रमित कर रहा है।

विशेष रूप से, यह है कि शून्य आवृत्तियों को केंद्रित करने की प्रक्रिया कैसे की जा रही है।

उदाहरण मैंने इनपुट छवि (greyscale intensities के) को प्रीप्रोसेस किया है, इसे इनपुट छवि के बराबर आकार के मैट्रिक्स के साथ गुणा करके, जिनके मान हैं , जहां पंक्ति है, है कॉलम, इसलिए और एक पैटर्न x y 1 - 1(1)x+yxy11

नोटों के अनुसार, यह और अक्ष पर फ़्लिप करके मैट्रिक्स के चतुष्कोणों को स्वैप करने के बराबर है ।xy

मैं समझता हूं कि ऐसा क्यों किया गया है, और मैं यह समझना चाहता हूं कि मैं समझता हूं कि मेरे पास मेरा कोड / फूरियर सामान काम कर रहा है, मुझे अभी समझ में नहीं आया कि इनपुट मैट्रिक्स को 1 / -1 से गुणा करना शून्य आवृत्ति घटक को 0 के आसपास केंद्रित करना क्यों है।

धन्यवाद


आप गोंजालेज द्वारा डिजिटल इमेज प्रोसेसिंग से अध्याय 4, 4.6-कार्यान्वयन में कुछ संदर्भ पा सकते हैं (मेरे पास दूसरा संस्करण है)। आशा है ये मदद करेगा।
हकुनामी

जवाबों:


18

ओह! क्या मस्त चाल है! यह सजा प्रमेय के कारण काम करता है (अर्थात, स्थानिक / समय डोमेन में गुणा आवृत्ति डोमेन में कनवल्शन के बराबर है।)

यह और अक्ष पर नहीं फहरा रहा है, यह फूरियर ट्रांसफॉर्म की छवि को घुमा रहा है (एक सिलेंडर के चारों ओर आधे रास्ते को स्थानांतरित करने के बारे में सोचें)। यहाँ चाल यह है कि स्थानिक डोमेन में -1,1 बारी-बारी से उच्चतम आवृत्ति के साथ एक संकेत है। तो उस छवि का फूरियर रूपांतरण आवृत्ति डोमेन में एक बिंदु है। एकल बिंदु से बातचीत शून्य आवृत्ति से बिंदु की ऑफसेट द्वारा छवि को स्थानांतरित करने (घूमने) के बराबर है।xy

यहाँ एक परीक्षण छवि है: परीक्षण छवि। यह फूरियर रूपांतरण जैसा दिखता है:परीक्षण छवि का फूरियर रूपांतरण

यदि आप प्रत्यावर्ती छवि के फूरियर रूपांतरण को लेते हैं चेकरबोर्ड छवि, तो इसका परिणाम फूरियर रूपांतरण के केंद्र में एक बिंदु पर होता है यहाँ छवि विवरण दर्ज करें:। (याद रखें कि हमने अपना रोटेशन अभी तक नहीं किया है, इसलिए फूरियर ट्रांसफॉर्म का केंद्र उच्च आवृत्तियों और कम आवृत्तियों अभी भी कोनों पर हैं।) लेकिन यह "रोटेशन कर्नेल है!" इस रोटेशन कर्नेल के साथ बातचीत सब कुछ नीचे और दाईं ओर ले जाती है (लेकिन नीचे दाईं ओर गिरने वाली चीजें ऊपर बाईं ओर घूमती हैं।)

रोटेशन कर्नेल के साथ मूल छवि को हल करना (छवि डोमेन में) आपको देता है:, आक्षेपित छविजबकि घूर्णन कर्नेल के साथ फूरियर रूपांतरण छवि को हल करते हुए (आवृत्ति डोमेन में) आपको देता है घुमाया फूरियर रूपांतरण:।

और हम जांच कर सकते हैं छवि डोमेन बिसात द्वारा testimage गुणा देता है कि गुणन छविहै, जो एक फूरियर का बदलना है: फिर से फूरियर परिवर्तन घुमाया


मैं उलझन में हूं। यह एक समान fftshiftकार्य को लागू करने के लिए दृढ़ संकल्प का उपयोग कर रहा है ? क्या सिर्फ 4 क्वाड्रंट को सीधे सीधे पुनर्व्यवस्थित करना कम्प्यूटेशनल रूप से सस्ता नहीं है?
एंडोलिथ

2
यहां कोई प्रत्यक्ष रूप से दोषी नहीं है। यह फूरियर डोमेन में एक कनवल्शन के बराबर प्राप्त करने के लिए छवि डोमेन में पिक्सेल-वार गुणा का उपयोग कर रहा है। हाँ, fftshiftबहुत महंगा नहीं है, लेकिन इस चाल में बेहतर कैश व्यवहार हो सकता है। पिक्सेलवाइज़ गुणा वास्तव में बस हर दूसरे पिक्सेल के संकेत को फ़्लिप कर रहा है। इतनी आसानी से वेक्टर करना, पढ़ना-संशोधित करना-लिखना एक गारंटीकृत कैश हिट है, और प्रोसेसर के लिए रीड्स को प्रीफ़ैच करना आसान है।
भटकते हुए

ओह ठीक है, यह एक साइन फ्लिप है, असली गुणा नहीं।
एंडोलिथ

परीक्षण छवि का फूरियर रूपांतरण (दूसरी छवि) ऐसा क्यों दिखता है? मैं वास्तव में दो छवि देखता हूं, एक के ऊपर एक काला।
हकुनामी

10

तर्क के उत्तर भटकना सही और विस्तृत है। बस सोचा था कि आप चित्रों के बजाय कुछ गणित देखना चाहते हैं:

(1)k=ejωω2π(k/2)

इसका प्रभाव यह है कि शून्य आवृत्ति - जो पहले 0 सूचकांक पर थी - अब आधी छवि चौड़ाई (या ऊंचाई पर है, इस पर निर्भर करता है कि आप स्तंभों या पंक्तियों को गुणा करते हैं)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.