01简介
- Scipy依赖于Numpy
- Scipy提供了真正的矩阵
- Scipy包含的功能:最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等
- Scipy是高端科学计算工具包
- Scipy由一些特定功能的子模块组成
02-输入输出
输入:
from scipy import io as spio
import numpy as np
a = np.ones((3,3))
#mat文件是标准的二进制文件
spio.savemat('./data/file.mat',mdict={'a':a})
#读取图片
from scipy import misc
data = misc.imread('./data/moon.png')
输出:
#读取保存的文件
data = spio.loadmat('./data/file.mat')
data['a']
#保存图片
misc.imsave('./data/save.png',arr=data)
03-图片处理
使用Scipy中的ndimage/misc进行处理
导包提取数据处理数据
from scipy import misc,ndimage
#原始图片
face = misc.face(gray=True)
#移动图片坐标
shifted_face = ndimage.shift(face, (50, 50))
#移动图片坐标,并且指定模式
shifted_face2 = ndimage.shift(face, (-200, 0), mode='wrap')
#旋转图片
rotated_face = ndimage.rotate(face, -30)
#切割图片
cropped_face = face[10:-10, 50:-50]
#对图片进行缩放
zoomed_face = ndimage.zoom(face, 0.5)
faces = [shifted_face,shifted_face2,rotated_face,cropped_face,zoomed_face]
绘制图片
plt.figure(figsize = (12,12))
for i,face in enumerate(faces):
plt.subplot(1,5,i+1)
plt.imshow(face,cmap = plt.cm.gray)
plt.axis('off')
图片过滤
导包处理滤波
from scipy import misc,ndimage
import numpy as np
import matplotlib.pyplot as plt
face = misc.face(gray=True)
face = face[:512, -512:] # 做成正方形
noisy_face = np.copy(face).astype(np.float)
#噪声图片
noisy_face += face.std() * 0.5 * np.random.standard_normal(face.shape)
#高斯过滤
blurred_face = ndimage.gaussian_filter(noisy_face, sigma=1)
#中值滤波
median_face = ndimage.median_filter(noisy_face, size=5)
#signal中维纳滤波
from scipy import signal
wiener_face = signal.wiener(noisy_face, (5, 5))
titles = ['noisy','gaussian','median','wiener']
faces = [noisy_face,blurred_face,median_face,wiener_face]
绘制图片
plt.figure(figsize=(12,12))
plt.subplot(141)
plt.imshow(noisy_face,cmap = 'gray')
plt.title('noisy')
plt.subplot(142)
plt.imshow(blurred_face,cmap = 'gray')
plt.title('gaussian')
plt.subplot(143)
plt.imshow(median_face,cmap = 'gray')
plt.title('median')
plt.subplot(144)
plt.imshow(wiener_face,cmap = 'gray')
plt.title('wiener')
plt.show()