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

只要多嘗試,都是有辦法的

那麼,可以說,但凡想驗證個積分題的結果大致範圍,這個方法都能實現!

部分參考來源:

千鋒教育

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章