scipy.fftpack模塊用來計算快速傅里葉變換
速度比傳統傅里葉變換更快,是對以前算法的改進
圖片是二維數據,注意使用fftpack的二維轉變方法html
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
求解圓周率python
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
隨機生成數組,使用scipy中的io.savemat()保存
文件格式是.mat,標準的二進制文件app
# i input
# o output
import scipy.io as io
data = np.random.random(size=(100,2))
data
io.savemat('mydata',{'data':data})
使用io.loadmat()讀取數據dom
ndata = io.loadmat('mydata.mat')['data']
讀寫圖片使用scipy中misc.imread()/imsave()ide
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)
rotate_image
# 調整圖片大小
# 使用整數 百分比(0-100之間的數)
m1 = misc.imresize(image,size=50)
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.misc.face(gray=True)獲取圖片,使用ndimage移動座標、旋轉圖片、切割圖片、縮放圖片spa
import scipy.ndimage as ndimage
導包,讀取圖片顯示圖片3d
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')
rotate旋轉圖片
plt.imshow(ndimage.rotate(gray_image,angle=70),cmap='gray')
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)))
使用切片切割圖片
圖片進行過濾
添加噪聲,對噪聲圖片使用ndimage中的高斯濾波、中值濾波、signal中維納濾波進行處理
使圖片變清楚
moon = plt.imread('moonlanding.png')
plt.imshow(moon,cmap='gray')
加載圖片,使用灰色圖片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')
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')
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)