scipy详解

Posted ws0751

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scipy详解相关的知识,希望对你有一定的参考价值。

登月图片消噪

 

scipy.fftpack模块用来计算快速傅里叶变换
速度比传统傅里叶变换更快,是对之前算法的改进
图片是二维数据,注意使用fftpack的二维转变方法

 
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt
%matplotlib inline
 
# scipy的快速傅里叶变换函数
from scipy.fftpack import fft2,ifft2
data = plt.imread(‘moonlanding.png‘)
 
 
fft_data = fft2(data)
 
# 滤波 过滤高频波
fft_data[np.where(np.abs(fft_data)>8e2)] = 0
 
# 转换回时域
ifft_data = ifft2(fft_data)
# ifft_data
# 获取实数部分
result = np.real(ifft_data)
 
plt.figure(figsize=(8,8))
plt.imshow(result,cmap=‘gray‘)
 
ifft_data.shape
 

数值积分,求解圆周率

求解圆周率

integrate 对函数(1 - x^2)^0.5进行积分

 

使用scipy.integrate进行积分,调用quad()方法

 
import scipy.integrate as integrate
 
 
def func_xy(x):
#     y = (1-x**2)**0.5
    return (1-x**2)**0.5
 
# 参数1: 是一个函数(指针),描述的是x和y之间的关系
# 参数2,3:是不规则图形在x轴上的起点和终点
# quad函数求面积
area,err = integrate.quad(func_xy,-1,1)
?
pi = area*2
pi
 
 
Out[4]:
3.1415926535897967
 

Scipy文件输入/输出

 

随机生成数组,使用scipy中的io.savemat()保存
文件格式是.mat,标准的二进制文件

In [57]:
 
 
 
 
 
# i input
# o output
import scipy.io as io
 
 
In [58]:
 
 
 
 
 
data = np.random.random(size=(100,2))
data
 
. . .
In [59]:
 
 
 
 
 
io.savemat(‘mydata‘,{‘data‘:data})
 
 
 

使用io.loadmat()读取数据

 
ndata = io.loadmat(‘mydata.mat‘)[‘data‘]

读写图片使用scipy中misc.imread()/imsave()

 
import scipy.misc as misc
plt.imshow(misc.face())
image = misc.face()
misc.imsave(‘mm.png‘,image)
plt.imshow(misc.imread(‘mm.png‘))
# `imsave` is deprecated in SciPy 1.0.0, and will be removed in 1.2.0.
from imageio import imwrite,imread
 
imwrite(‘mmm.png‘,image)
 

其他处理方式misc.imrotate\imresize\imfilter

# 处理图片旋转
rotate_image = misc.imrotate(image,angle=90)
 
d:\python3.6\lib\site-packages\ipykernel_launcher.py:1: DeprecationWarning: `imrotate` is deprecated!
`imrotate` is deprecated in SciPy 1.0.0, and will be removed in 1.2.0.
Use ``skimage.transform.rotate`` instead.
  """Entry point for launching an IPython kernel.
rotate_image
<matplotlib.image.AxesImage at 0x110b6630>
 
技术分享图片
 
# 调整图片大小
# 使用整数 百分比(0-100之间的数)
m1 = misc.imresize(image,size=50)
d:\python3.6\lib\site-packages\ipykernel_launcher.py:2: DeprecationWarning: `imresize` is deprecated!
`imresize` is deprecated in SciPy 1.0.0, and will be removed in 1.2.0.
Use ``skimage.transform.resize`` instead.
plt.imshow(m1)
# 0-1之间的小数,修改的是像素
m2 = misc.imresize(image,size=0.01)
plt.imshow(m2)
 
# 使用元组调整图像大小(填充、压缩的效果)
m3 = misc.imresize(image,size=(100,200))
plt.imshow(m3)
# 使用imfilter滤镜,处理图片效果
# ‘blur‘, ‘contour‘, ‘detail‘, ‘edge_enhance‘, ‘edge_enhance_more‘,‘emboss‘, ‘find_edges‘, ‘smooth‘, ‘smooth_more‘, ‘sharpen‘
m4 = misc.imfilter(image,ftype=‘edge_enhance‘)
plt.imshow(m4)
 

使用scipy.ndimage图片处理

 

使用scipy.misc.face(gray=True)获取图片,使用ndimage移动坐标、旋转图片、切割图片、缩放图片

 
import scipy.ndimage as ndimage
 

导包,读取图片显示图片

In [90]:
 
 
 
 
 
gray_image = misc.face(gray=True)
plt.imshow(gray_image,cmap=‘gray‘)
 
. . .
 

shift移动坐标

In [94]:
 
 
 
 
 
# shift-->float类型,表示像素,不是比例
plt.imshow(ndimage.shift(gray_image,shift=200),cmap=‘gray‘)
 
. . .
In [96]:
 
 
 
 
 
plt.imshow(ndimage.shift(gray_image,shift=(100,200)),cmap=‘gray‘)
 
. . .
 

shift函数中mode参数的可选值:‘constant‘, ‘nearest‘, ‘reflect‘, ‘mirror‘ or ‘wrap‘

In [115]:
 
 
 
 
 
plt.imshow(ndimage.shift(gray_image,shift=(100,100),mode=‘constant‘),cmap=‘gray‘)
 
 
Out[115]:
<matplotlib.image.AxesImage at 0x205bdef0>
 
技术分享图片
 

rotate旋转图片

In [102]:
 
 
 
 
 
plt.imshow(ndimage.rotate(gray_image,angle=70),cmap=‘gray‘)
 
 
Out[102]:
<matplotlib.image.AxesImage at 0x1e669eb0>
 
技术分享图片
 

zoom缩放图片

In [105]:
 
 
 
 
 
# zoom使用float,是一个比例值
plt.imshow(ndimage.zoom(gray_image,zoom=0.5))
 
. . .
In [108]:
 
 
 
 
 
# zoom使用元组,也只接受小数,表示height、width的缩放比例
plt.imshow(ndimage.zoom(gray_image,zoom=(0.3,0.5)))
 
 
Out[108]:
<matplotlib.image.AxesImage at 0x1fe8dd50>
 
技术分享图片
 

使用切片切割图片

 

图片进行过滤
添加噪声,对噪声图片使用ndimage中的高斯滤波、中值滤波、signal中维纳滤波进行处理
使图片变清楚

In [118]:
 
 
 
 
 
moon = plt.imread(‘moonlanding.png‘)
plt.imshow(moon,cmap=‘gray‘)
 
 
Out[118]:
<matplotlib.image.AxesImage at 0x20911450>
 
技术分享图片
 

加载图片,使用灰色图片misc.face()添加噪声

In [141]:
 
 
 
 
 
face = misc.face(gray=True)
plt.imshow(face)
 
. . .
In [144]:
 
 
 
 
 
face1 = face[0:512,-512:]
plt.imshow(face1)
 
. . .
In [147]:
 
 
 
 
 
noise = face1.std() * np.random.random(face1.shape)
 
 
In [149]:
 
 
 
 
 
plt.imshow((face1 + noise),cmap=‘gray‘)
 
 
Out[149]:
<matplotlib.image.AxesImage at 0x213db7b0>
 
技术分享图片
In [150]:
 
 
 
 
 
noise_face = face1 + noise
 
 
In [155]:
 
 
 
 
 
plt.imshow(ndimage.gaussian_filter(noise_face,sigma=1.5),cmap=‘gray‘)
 
. . .
In [156]:
 
 
 
 
 
plt.imshow(ndimage.median_filter(noise_face,size=3),cmap=‘gray‘)
 
. . .
 

gaussian高斯滤波参数sigma:高斯核的标准偏差

 

高斯分布就是正太分布

In [123]:
 
 
 
 
 
moon1 = ndimage.gaussian_filter(moon,sigma=3)
plt.imshow(moon1,cmap=‘gray‘)
 
 
Out[123]:
<matplotlib.image.AxesImage at 0x20d221f0>
 
技术分享图片
 

median中值滤波参数size:给出在每个元素上从输入数组中取出的形状位置,定义过滤器功能的输入

In [126]:
 
 
 
 
 
moon2 = ndimage.median_filter(moon,size=15)
plt.imshow(moon2,cmap=‘gray‘)
 
. . .
 

signal维纳滤波参数mysize:滤镜尺寸的标量

In [127]:
 
 
 
 
 
import scipy.signal as signal
 
 
In [128]:
 
 
 
 
 
# 类似傅里叶变换的一种算法
moon3 = signal.wiener(moon,mysize=5)
plt.imshow(moon3)
 
 
Out[128]:
<matplotlib.image.AxesImage at 0x2236e230>
 
技术分享图片



以上是关于scipy详解的主要内容,如果未能解决你的问题,请参考以下文章

scipy csr_matrix和csc_matrix函数详解

scipy之数据插值详解

scipy之数据插值详解

scipy之数据插值详解

(转) Java中的负数及基本类型的转型详解

详解Android WebView加载html片段