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 ...
随机推荐
- brief 程序注释
/** * @brief Acceleration (g's) in body frame. * Embedded MPL defines gravity as positive accelerati ...
- 版本管理工具:GIT
ps:项目以前一直用的svn,现在自己写代码,需要进行版本控制,学习git. 入门:推荐廖雪峰老师的git入门教程. github 上的这个项目收录了很多git教程:很全面
- 堆以及stl堆的使用
概念 性质: 1.堆是一颗完全二叉树,用数组实现. 2.堆中存储数据的数据是局部有序的. 最大堆:1.任意一个结点存储的值都大于或等于其任意一个子结点中存储的值. 2.根结点存储着该树 ...
- linux下新磁盘创建lvm、扩容lvm
1.首先查看磁盘fdisk -l2.进入磁盘fdisk /dev/sdbn 创建新磁盘p 创建主分区创建分区ID 1-4为主分区根据提示选择磁盘开始位置(默认空格就好)选择结束位置(新增磁盘大小)t ...
- 网络 IP
参考原文 http://blog.csdn.net/dan15188387481/article/details/49873923 1. 原始的IP地址表示方法及其分类(近几年慢慢淘汰) IP ...
- django项目部署服务器后无法发送邮箱 错误信息:Connection unexpectedly closed
使用配置: python 3.7 + django 2.2.1 发送邮件模块 : from django.core.mail import send_mail 服务器:Centos7 阿里云轻 ...
- Set的常用实现类HashSet和TreeSet
Set HashSet public static void main(String[] args) { //不可以重复 并且是无序的 //自然排序 从A-Z //eqauls从Object继 ...
- ClickHouse 分布式高可用集群搭建(转载)
一.ClickHouse安装方式: 源码编译安装 Docker安装 RPM包安装 为了方便使用,一般采用RPM包方式安装,其他两种方式这里不做说明. 二.下载安装包 官方没有提供rpm包,但是Alti ...
- Kafka+kylin——kylin2.5.0流式构建
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/a_drjiaoda/article/d ...
- suds
Suds: 是一个轻量级的SOAP客户端 pip install suds 可以访问webservice 选择公网的Webservice,http://www.webxml.com.cn/webser ...