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 ...
随机推荐
- 1.什么是spring
spring框架是一个为java应用程序的开发提供了综合,广泛的基础性支持的java开源框架, 使得开发者不用去关心一些冗杂的基础性问题,从而可以更加专注于应用程序的开发. spring框架是一个分层 ...
- stm32的hal之串口库函数总结复习
1.串口的使用方法 在hal库中,有三个串口发送的函数 a.HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uin ...
- PostgreSQL 分区索引演进
PostgreSQL 分区表,操作性相当便捷. 但只能在创建时决定是否为分区表,并决定分区条件字段,普通表创建后,不能在修改为分区表. Note:通过其他方法也可转化为分区表. 和其他数据库一样,分区 ...
- 在新浪SAE上搭建微信公众号的python应用
微信公众平台的开发者文档https://www.w3cschool.cn/weixinkaifawendang/ python,flask,SAE(新浪云),搭建开发微信公众账号http://www. ...
- bzoj 3829: [Poi2014]FarmCraft 树形dp+贪心
题意: $mhy$ 住在一棵有 $n$ 个点的树的 $1$ 号结点上,每个结点上都有一个妹子. $mhy$ 从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装 $zhx$ 牌杀毒 ...
- tar归档压缩命令和zip归档 和7zip压缩命令;库文件归档ar命令
第一.tar 归档 tar -c 创建归档文件包 tar -x 释放归档文件包 tar -t 查看归档文件包 tar -v 显示归档包操作过程信息 tar -f 指定归档文件名 案例1:归档 /hom ...
- 《挑战30天C++入门极限》入门教程:实例详解C++友元
入门教程:实例详解C++友元 在说明什么是友元之前,我们先说明一下为什么需要友元与友元的缺点: 通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都生命成为pu ...
- Pytest权威教程21-API参考-03-夹具(Fixtures)
目录 夹具(Fixtures) @ pytest.fixture config.cache的 capsys capsysbinary capfd capfdbinary doctest_namespa ...
- ModuleNotFoundError: No module named 'pynvx'
bogon:faceswap-master macname$ pip3 install pynvx Collecting pynvx Downloading https://files.pythonh ...
- redis应用场景,缓存的各种问题
缓存 redis还有另外一个重要的应用领域——缓存 引用来自网友的图解释缓存在架构中的位置 默认情况下,我们的服务架构如下图,客户端请求service,然后service去读取mysql数据库 问题存 ...