scipy-图片处理

图片消噪

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)

 

猜你喜欢

转载自www.cnblogs.com/Deaseyy/p/11921654.html