【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')

原图:
在这里插入图片描述

稍微去噪后:
在这里插入图片描述

二、定积分求圆周率Π

#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位,效果还不错
在这里插入图片描述

三、其他积分题练习

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

在这里插入图片描述

#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,可见其结果基本正确!
在这里插入图片描述

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

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

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

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

部分参考来源:

千锋教育

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值