Last active
May 25, 2021 11:45
-
-
Save pourmand1376/c9235b0cbaa43451c10d4f41ddd39d94 to your computer and use it in GitHub Desktop.
Fast Fourier Transform Implementation with numpy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
import matplotlib.pyplot as plt | |
from skimage import color | |
def fft(length_x,width_y,v,y,image,inner=True): | |
expVector=np.exp(-2j*np.pi/width_y*(v@y)) if inner else np.exp(-2j*np.pi/length_x*(v@y)) | |
if inner: | |
return image @ expVector | |
else: | |
return expVector @ image | |
def fft2d(grayImage): | |
length_x = grayImage.shape[0] | |
width_y= grayImage.shape[1] | |
y=np.arange(width_y).reshape(1,-1) | |
v = np.arange(width_y).reshape(-1,1) | |
firstLevel=fft(length_x,width_y,v,y,grayImage,True) | |
u = np.arange(length_x).reshape(-1,1) | |
x = np.arange(length_x).reshape(1,-1) | |
return fft(length_x,width_y,u,x,firstLevel,False) | |
image=plt.imread('filename') | |
grayImage=color.rgb2gray(image) | |
transformedImage=fft2d(grayImage) | |
magnitude = np.log(np.abs(fourierimage)+1)) | |
angle = np.angle(fourierimage)) | |
f,axxr = plt.subplots(nrows=1,ncols=2,figsize=(15,15)) | |
axxr[0].imshow(magnitude),plt.title('Magnitude') | |
axxr[1].imshow(angle),plt.title('Angle') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This implementation only works with grayscale 2d images.