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
3.1415926535897967
Scipy文件输入/输出
随机生成数组,使用scipy中的io.savemat()保存
文件格式是.mat,标准的二进制文件
# i input
# o output
import scipy.io as io
data = np.random.random(size=(100,2))
data
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
导包,读取图片显示图片
gray_image = misc.face(gray=True)
plt.imshow(gray_image,cmap='gray')
shift移动坐标
# shift-->float类型,表示像素,不是比例
plt.imshow(ndimage.shift(gray_image,shift=200),cmap='gray')
plt.imshow(ndimage.shift(gray_image,shift=(100,200)),cmap='gray')
shift函数中mode参数的可选值:'constant', 'nearest', 'reflect', 'mirror' or 'wrap'
plt.imshow(ndimage.shift(gray_image,shift=(100,100),mode='constant'),cmap='gray')
<matplotlib.image.AxesImage at 0x205bdef0>
rotate旋转图片
plt.imshow(ndimage.rotate(gray_image,angle=70),cmap='gray')
<matplotlib.image.AxesImage at 0x1e669eb0>
zoom缩放图片
# zoom使用float,是一个比例值
plt.imshow(ndimage.zoom(gray_image,zoom=0.5))
# zoom使用元组,也只接受小数,表示height、width的缩放比例
plt.imshow(ndimage.zoom(gray_image,zoom=(0.3,0.5)))
<matplotlib.image.AxesImage at 0x1fe8dd50>
使用切片切割图片
图片进行过滤
添加噪声,对噪声图片使用ndimage中的高斯滤波、中值滤波、signal中维纳滤波进行处理
使图片变清楚
moon = plt.imread('moonlanding.png')
plt.imshow(moon,cmap='gray')
<matplotlib.image.AxesImage at 0x20911450>
加载图片,使用灰色图片misc.face()添加噪声
face = misc.face(gray=True)
plt.imshow(face)
face1 = face[0:512,-512:]
plt.imshow(face1)
noise = face1.std() * np.random.random(face1.shape)
plt.imshow((face1 + noise),cmap='gray')
<matplotlib.image.AxesImage at 0x213db7b0>
noise_face = face1 + noise
plt.imshow(ndimage.gaussian_filter(noise_face,sigma=1.5),cmap='gray')
plt.imshow(ndimage.median_filter(noise_face,size=3),cmap='gray')
gaussian高斯滤波参数sigma:高斯核的标准偏差
高斯分布就是正太分布
moon1 = ndimage.gaussian_filter(moon,sigma=3)
plt.imshow(moon1,cmap='gray')
<matplotlib.image.AxesImage at 0x20d221f0>
median中值滤波参数size:给出在每个元素上从输入数组中取出的形状位置,定义过滤器功能的输入
moon2 = ndimage.median_filter(moon,size=15)
plt.imshow(moon2,cmap='gray')
signal维纳滤波参数mysize:滤镜尺寸的标量
import scipy.signal as signal
# 类似傅里叶变换的一种算法
moon3 = signal.wiener(moon,mysize=5)
plt.imshow(moon3)
<matplotlib.image.AxesImage at 0x2236e230>
scipy详解的更多相关文章
- (转)scipy详解
原文:https://www.cnblogs.com/ws0751/p/8361353.html#top 登月图片消噪 scipy.fftpack模块用来计算快速傅里叶变换速度比传统傅里叶变换更快 ...
- Heapsort 堆排序算法详解(Java实现)
Heapsort (堆排序)是最经典的排序算法之一,在google或者百度中搜一下可以搜到很多非常详细的解析.同样好的排序算法还有quicksort(快速排序)和merge sort(归并排序),选择 ...
- 深度学习之卷积神经网络(CNN)详解与代码实现(一)
卷积神经网络(CNN)详解与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10430073.html 目 ...
- 基于模型的特征选择详解 (Embedded & Wrapper)
目录 基于模型的特征选择详解 (Embedded & Wrapper) 1. 线性模型和正则化(Embedded方式) 2. 基于树模型的特征选择(Embedded方式) 3. 顶层特征选择算 ...
- 【转载】 深度学习之卷积神经网络(CNN)详解与代码实现(一)
原文地址: https://www.cnblogs.com/further-further-further/p/10430073.html ------------------------------ ...
- 利用python求解物理学中的双弹簧质能系统详解
利用python求解物理学中的双弹簧质能系统详解 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的 ...
- 详解Python编程中基本的数学计算使用
详解Python编程中基本的数学计算使用 在Python中,对数的规定比较简单,基本在小学数学水平即可理解. 那么,做为零基础学习这,也就从计算小学数学题目开始吧.因为从这里开始,数学的基础知识列位肯 ...
- windows上安装Anaconda和python的教程详解
一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...
- Jupyter自定义设置详解
今天专门花时间总结梳理一下jupyter的一些高级设置,jupyter我已经介绍过一次基本内容了,Setup and Linux | James Chen's Blogs,尤其是如何在服务器运行jup ...
随机推荐
- 六.Protobuf3引入其他.proto文件
Protobuf3 使用其他消息类型 您可以使用其他消息类型作为字段类型.例如,假设您希望在每个SearchResponse消息中包含Result消息,为此,您可以在.proto中定义结果消息类型,然 ...
- 完成一个springboot项目的完整总结------三
这一次的总结是最关键的部分,主要涉及了ORM的三种操作,这些操作是项目的难点,三种操作包括多对一.多对多.一对多三种模式,接下来展示项目代码 1.多对一 clazz表对应grade表和charge表 ...
- js 全选反选
<th><input type="checkbox" id="checkall" name="checkall" oncl ...
- VS Code中配置Markdown
其实,对我来说是反过来的,我是为了使用Markdown而安装VS Code(虽然久仰大名) 安装VS Code 安装Markdown插件 使用篇 1. 安装vscode 之所以啰嗦一下,是因为据说安装 ...
- 移动端videojs视频插件使用直播流rtmp、hls、http-flv的注意事项
可以访问:https://videojs.com/ 下载对应的脚本包 特别注意的是 移动端videojs一般应用的直播流协议为HLS, RTMP协议一般是PC上使用,需要flash支持. HLS直播源 ...
- zookeeper先验知识(2PC+paxos)
一.2PC两阶段提交: 在分布式事务中,每个机器节点只能够明确知道自己事务操作的结果,是成功还是失败,而无法获取其他分布式节点的操作结果,因此在事务操作需要跨多个分布式节点时,需要引入一个协调者统一调 ...
- Vue模板语法(二)
Vue基础模板语法 二 1. 样式绑定 1.1 class绑定 使用方式:v-bind:class="expression" expression的类型:字符 ...
- terminal mvn 打包
命令: mvn clean install -Dmaven.test.skip=true
- 为什么 MySQL 索引要使用 B+树而不是其它树形结构?比如 B 树?
一个问题? InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万 为什么是这么多呢? 因为这是可以算出来的,要搞清楚这个问题,我们先从InnoDB索引数据结构.数据组织方式说起. ...
- YAML_16 debug检测
ansible]# ansible-playbook --syntax-check http.yml //检测语法 playbook: http.yml ansible]# ansible-play ...