आप/अनुवाद के लिए संपत्ति की पहचान -1 डी में बदलने वाले। 2 डी के लिए, यह थोड़ा अलग है लेकिन एक ही सिद्धांत पर आधारित है।
x0,y0
पारी लागू करना चाहते हैं होगा: 2 डी में अनुवाद को प्राप्त करने, इस अनुवाद/पाली संपत्ति है, जो के रूप में परिभाषित किया जाता है। इस प्रकार, x0
का सकारात्मक मूल्य आपके 2 डी सिग्नल को दाईं ओर स्थानांतरित करेगा, जबकि ऋणात्मक मान बाईं ओर स्थानांतरित होगा। इसी प्रकार, y0
का सकारात्मक मूल्य आपकी 2 डी छवि को नीचे की ओर ले जाएगा, जबकि ऋणात्मक मान ऊपर की ओर बढ़ जाएगा।
इसलिए, 2 डी में अपने फूरियर ट्रांसफॉर्म को देखते हुए, आपको एक्सपोनेंट को अतिरिक्त शब्द जोड़ना होगा। इसके अतिरिक्त, N
द्वारा सामान्यीकृत या आपके 2 डी सिग्नल का आकार होना चाहिए। यह माना जा रहा है कि आपके 2 डी सिग्नल में पंक्तियों और स्तंभों की संख्या समान है। यदि यह मामला नहीं है, तो आपको u*x0
लेना होगा और आप स्तंभों की संख्या से विभाजित होंगे और v*y0
पंक्तियों की संख्या से विभाजित होंगे।
अब, आप अपने उपरोक्त कोड में F
के बारे में उलझन में हैं क्योंकि आप सुनिश्चित नहीं हैं कि इसे 2 डी में कैसे परिभाषित किया जाए। आपको 2 डी ग्रिड में प्रत्येक बिंदु के लिए आवृत्ति मान परिभाषित करना होगा। आपके fftshift
कॉल के कारण, हम -100 और 99 के बीच x
और y
मानों को परिभाषित करेंगे, क्योंकि आपका 2 डी सिग्नल 200 x 200 आकार का है और यह हमारे 2 डी सिग्नल को मध्य में केंद्रित करेगा। यह वास्तव में fftshift
कर रहा है। इसी तरह, ifftshift
fftshift
द्वारा किए गए केंद्र को पूर्ववत करता है। इन बिंदुओं को 2 डी में परिभाषित करने के लिए, मैं meshgrid
का उपयोग करता हूं। एक बार जब आप इन बिंदुओं को परिभाषित कर लेंगे, तो आप (x,y)
सह-समन्वय की प्रत्येक जोड़ी लेंगे, फिर उपरोक्त संपत्ति में दिखाई देने के साथ जटिल घातीय बनाएं।
इस प्रकार, इस कोड में आपके कोड को संशोधित करना होगा। ध्यान रखें कि मैंने आपके मूल कोड में अनावश्यक fftshift
और ifftshift
कॉल से छुटकारा पा लिया है। आप fft
पर कॉल करेंगे, फिर स्पेक्ट्रम को केंद्र में fftshift
करें। मैंने आपके वैरिएबल input
को in
में भी बदल दिया है, input
MATLAB में एक फ़ंक्शन है, और हम अनजाने में फ़ंक्शन को चर के साथ छाया नहीं करना चाहते हैं।
मैंने x
शिफ्ट को -35 में भी परिभाषित किया है, और y
शिफ्ट -50 में स्थानांतरित किया गया है। इसका मतलब यह होगा कि परिणामी संकेत बाईं ओर 35 तक और 50 तक ऊपर जाएगा।
इसलिए :
in=peaks(200); %// Define input signal
H=fftshift(fft2(in)); %// Compute 2D Fourier Transform
x0=-35; %// Define shifts
y0=-50;
%// Define shift in frequency domain
[xF,yF] = meshgrid(-100:99,-100:99);
%// Perform the shift
H=H.*exp(-1i*2*pi.*(xF*x0+yF*y0)/200);
%// Find the inverse Fourier Transform
IF_image=ifft2(ifftshift(H));
%// Show the images
figure;
subplot(1,2,1);
imshow(in);
subplot(1,2,2);
imshow(real(IF_image));
लें टिप्पणी है कि मैं असली परिणामी छवि के घटक का प्रदर्शन किया। यह इस तथ्य के कारण है कि एक बार जब आप व्यस्त फूरियर ट्रांसफॉर्म लेते हैं, तो कुछ संख्यात्मक अपर्याप्तता हो सकती है और सिग्नल का जटिल हिस्सा वास्तव में काफी छोटा होता है। सिग्नल के वास्तविक घटक का उपयोग करके हम इसे अनदेखा कर सकते हैं।
आप देख सकते हैं, छवि ठीक शिफ्ट किया था, के रूप में संपत्ति ऊपर देखा द्वारा सत्यापित:
इस छवि को मैं हो रही है। यदि आप अलग-अलग बदलावों को निर्दिष्ट करना चाहते हैं, तो आपको अपने स्वाद के अनुरूप x0
और y0
को बदलने की आवश्यकता है। आपके मामले में, आप y0 = 0
निर्दिष्ट करेंगे, तो x0
जो कुछ भी आप चाहते हैं वह क्षैतिज अनुवाद चाहते हैं।
बस इतना कह रहा है, 'सर्किफ्ट' का उपयोग करना आसान नहीं है? – bla
हां, यह है। लेकिन सिद्धांत रूप में, यह वर्णित विधि का उपयोग करके किया जा सकता है, जिसमें मुझे रूचि है। (: – Pythonice
@ सेसिलियागुएरा - मैं 'सर्किफ्ट' से सहमत हूं, लेकिन मुझे लगता है कि आप इसे फूरियर ट्रांसफॉर्म के अनुवाद/शिफ्ट संपत्ति के प्रदर्शन के रूप में कर रहे हैं। किसी भी तरह से, मैंने एक उत्तर लिखा है। – rayryeng