【Python】傅里叶变化去除图片噪声,定积分求圆周率(Scipy,fft,integrate)

一、傅里叶去除图片噪声

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.fftpack as fft
# %matplotlib inline
# %matplotlib QT5
#1 傅里叶去除图片噪声
moon_data = plt.imread('moonlanding.png') #ndarray
#plt.figure(figsize=(12,11))    #调整图片显示大小
#plt.imshow(moon_data,cmap = 'gray')  #autumn
print(moon_data.shape)  #二维  黑白
moon_fft = fft.fft2(moon_data)
print(moon_fft.min())
moon_fft2 = np.where(np.abs(moon_fft)>1e3,0,moon_fft)
moon_ifft = fft.ifft2(moon_fft2)  #逆变化
moon_result = np.real(moon_ifft)
plt.figure(figsize=(12,11))
plt.imshow(moon_result,cmap = 'gray')

原图:
【Python】傅里叶变化去除图片噪声,定积分求圆周率(Scipy,fft,integrate)_第1张图片

稍微去噪后:
【Python】傅里叶变化去除图片噪声,定积分求圆周率(Scipy,fft,integrate)_第2张图片

二、定积分求圆周率Π

#2 求积分  求pi
#x**2 + y**2 = 1 #圆心在原点  y = (1 - x**2)^0.5
#pi = 面积*2
x = np.linspace(-1,1,1000)
f = lambda x : (1 - x**2)**0.5
plt.figure(figsize = (4,4) )
plt.plot(x,f(x),x,-f(x),'b')
import scipy.integrate as integrate
pi_1,err = integrate.quad(f,-1,1)  #积分值 误差
print("pi:",pi_1*2)
#pi: 3.141592653589797

精确到小数点后14位,效果还不错
【Python】傅里叶变化去除图片噪声,定积分求圆周率(Scipy,fft,integrate)_第3张图片

三、其他积分题练习

同理,我们可以试着求一些其他的积分问题:
而且步骤基本都是固定的,关键是确定函数,和积分区间.
这里拿《接力题典1800》的题来练练手

【Python】傅里叶变化去除图片噪声,定积分求圆周率(Scipy,fft,integrate)_第4张图片

#x = np.linspace(0,1,1000)  #确定积分范围(1000可理解为细分1000个等距区间)
x = np.linspace(0,0.9999,1000) #这里积分上限不能选取到1
f = lambda x : (x/(1-x))**0.5 #确定函数,最关键的一步
plt.plot(x,f(x)) #绘制图形
import scipy.integrate as integrate
ans,err = integrate.quad(f,0,1)  #积分值 误差

注意:
这里积分上限取到1会报错:RuntimeWarning: divide by zero encountered in true_divide

结果:
结果是pi/2,可见其结果基本正确!
【Python】傅里叶变化去除图片噪声,定积分求圆周率(Scipy,fft,integrate)_第5张图片

要是积分里有三角函数怎么办?NumPy 三角函数

要是遇到对数怎么办?np.log(x)

只要多尝试,都是有办法的

那么,可以说,但凡想验证个积分题的结果大致范围,这个方法都能实现!

部分参考来源:

千锋教育

你可能感兴趣的:(Python)