python学习——pandas扩展:傅里叶变换
导包,np
从numpy.fft导入fft、ifft
导入图片库PIL中的Image
In [1]:
import numpy as np
#fft傅里叶转换,ifft傅里叶反转
from numpy.fft import fft,ifft
#真实世界,时域 ndarray
#规律,频域 高低,
from PIL import Image
第一步读取数据
In [2]:
cat = Image.open('cat.png')
In [7]:
cat
Out[7]:
转换成int类型数据,int8 == 128
In [10]:
cat_data = np.fromstring(cat.tobytes(),dtype=np.int8)
# 之所以有负数,是因为int8<128,颜色值0~255
cat_data
Out[10]:
傅里叶转换,傅里叶转换的结果包含实数,和虚数
In [11]:
cat_data_fft = fft(cat_data)
#真实数据,变换成了频率,频域
cat_data_fft
Out[11]:
In [ ]:
# -7005918.98362136+12604783.28030717j 实数+虚数
# x^2 = 4 ---> -2 / 2
# x^2 = -4 --->虚数
将傅里叶的数据去除低频的波,设置为0
np.where(np.abs(fft_result)<1e5,0,fft_result)
In [14]:
#条件
cond = np.abs(cat_data_fft)<1e5
#根据条件获取索引
inds = np.where(cond)
#修改,将低频数据,设置为0
cat_data_fft[inds] = 0
使用傅里叶进行反转
In [15]:
cat_data_ifft = ifft(cat_data_fft)
cat_data_ifft
Out[15]:
获取实数
np.real()
In [16]:
cat_data_real = np.real(cat_data_ifft)
cat_data_real
Out[16]:
去除小数部分
In [17]:
cat_data_result = np.int8(cat_data_real)
In [18]:
cat_data_result
Out[18]:
将一维的数组,通过Image进行转换,图片
In [19]:
cat_outline = Image.frombytes(mode = cat.mode,size=cat.size,data=cat_data_result)
In [22]:
cat_outline
Out[22]:
In [16]:
cat
Out[16]: