scipy.fftpack模块用来计算快速傅里叶变换
图片是二维数据,注意使用fftpack的二维转变方法
from scipy.fftpack import fft2, ifft2
1.使用傅里叶变换把图片转化为频率
2.频率超过一定的阈值,我们认为是噪点,赋值为0
3.把频率还原为图片.
4.显示最终的效果.
moon_fft = fft2(moon) # 傅里叶变换, 图片转化为频率
np.abs(moon_fft)
threshold = 8e2 # 设置过滤的阈值 ,
res = np.where(np.abs(moon_fft) > threshold, 0 , moon_fft) # 频率绝对值 超过该阈值,认为是噪点,赋值为0
moon_ifft = ifft2(res) # 傅里叶逆变换 将过滤后的结果转换回来
moon_clean = np.real(moon_ifft) # 只取实部
数值积分,求解圆周率
import scipy.integrate as integrate
half_pi, deviation = integrate.quad(lambda x: (1-x ** 2)**0.5, -1, 1) # 半个pi , 误差
Scipy文件输入/输出
导包: from scipy import io / import scipy.io as io
io.savemat()
使用scipy中的io.savemat()保存数组 文件格式是.mat,标准的二进制文件
io.savemat('moon_clean.mat', mdict={'data': moon_clean})
io.loadmat()
使用io.loadmat()读取数据
moon_mdict = spio.loadmat('moon_clean.mat')
moon_clean = moon_mdict['data']
PIL
from PIL import Image,ImageFilter
cat = Image.open('../data/cat.jpg')
cat.filter(ImageFilter.BLUR) # 模糊处理
cat.filter(ImageFilter.CONTOUR) # 轮廓
图片处理
from scipy import ndimage
ndimage用于处理多维图片
shift移动坐标
# mode : {'reflect', 'constant', 'nearest', 'mirror', 'wrap'}
face_shift = ndimage.shift(face, (200,300,0),mode='constant')
rotate旋转图片
face_rotate = ndimage.rotate(face,90, mode='mirror') # angle : 旋转角度
zoom缩放图片
face_zoom = ndimage.zoom(face,(2,3)) # 使用灰白图片
切割图片
face_split = face[200:500,500:800]
图片进行过滤
添加噪声,对噪声图片使用ndimage中的高斯滤波、中值滤波、signal中维纳滤波进行处理 使图片变清楚
使用灰色图片添加噪声
face_noise = face.copy().astype(np.float64) face_noise += face_noise.std() * 0.5 * np.random.randn(*face.shape)
-
高斯滤波sigma:高斯核的标准偏差
face_gaussian = ndimage.gaussian_filter(face_noise,sigma=1) # sigma 标准差 越大范围取得越大,反之
-
中值滤波参数size:给出在每个元素上从输入数组中取出的形状位置,定义过滤器功能的输入
face_median = ndimage.median_filter(face_noise,size=4)
-
signal维纳滤波mysize:滤镜尺寸的标量
face_wiener = wiener(face_noise, mysize=5)