我们知道,scipy 是基于numpy 的,在这里我们详细探索一下scipy在图片上的应用。scipy.fftpack模块用来计算快速傅里叶变换,其速度比传统傅里叶变换更快,是对之前的算法的改进。我们知道,黑白图片是二维数据,所以在使用时,我们要注意使用fftpack的二维转变方法。
# 登月图片,噪声,白色的圆环,圆环里面和外面图片的背景,圆环就像山峰凸起----圆环处的频率突然变高
# 消除噪声,就将频率高的地方频率降低
import numpy as np
from scipy.fftpack import fft2,ifft2
import matplotlib.pyplot as plt
from PIL import Image
# 第一步:plt读取图片,二维的图片
moon = plt.imread('./moonlanding.png')
display(moon.dtype,moon)
Out[]:
dtype('float32')
array([[0.04705882, 0. , 0.23921569, ..., 0. , 0.00392157,
0.53333336],
[0. , 0. , 0.6784314 , ..., 0.10196079, 0.2901961 ,
0. ],
[0.72156864, 0.10980392, 0.6039216 , ..., 0. , 0.21568628,
1. ],
...,
[0.00392157, 0. , 1. , ..., 1. , 1. ,
0.95686275],
[0. , 0. , 0.15686275, ..., 0. , 0. ,
0.3529412 ],
[1. , 0.52156866, 0.04705882, ..., 0. , 0. ,
1. ]], dtype=float32)
#把图片转换成RGB格式的,这样显示出来的信息
#图片是png的,png的颜色代表是从0-1的,要转换成RPG需要乘以255,转换成int8,
np.uint8(moon.reshape(-1)*255)[:100]
Out[]:
array([ 12, 0, 61, 119, 0, 0, 130,