理想滤波器,高斯滤波器,巴特沃斯滤波器的高通代码
时间: 2023-07-09 21:09:28 浏览: 124
理想高通滤波器代码:
```python
import numpy as np
import matplotlib.pyplot as plt
def highpass_filter_ideal(image, cutoff):
#获取图像的大小
M, N = image.shape
#进行傅里叶变换
F = np.fft.fft2(image)
#将零频率分量移到频谱中心
F_shift = np.fft.fftshift(F)
#构造理想高通滤波器
H = np.zeros((M,N))
for i in range(M):
for j in range(N):
if np.sqrt((i-M//2)**2 + (j-N//2)**2) > cutoff:
H[i,j] = 1
#进行频域滤波
G_shift = H * F_shift
#将频谱移到左上角
G = np.fft.ifftshift(G_shift)
#进行傅里叶逆变换
g = np.real(np.fft.ifft2(G))
return g
```
高斯高通滤波器代码:
```python
import numpy as np
import matplotlib.pyplot as plt
def highpass_filter_gaussian(image, cutoff):
#获取图像的大小
M, N = image.shape
#进行傅里叶变换
F = np.fft.fft2(image)
#将零频率分量移到频谱中心
F_shift = np.fft.fftshift(F)
#构造高斯高通滤波器
H = np.zeros((M,N))
for i in range(M):
for j in range(N):
H[i,j] = 1 - np.exp(-((i-M//2)**2 + (j-N//2)**2)/(2*cutoff**2))
#进行频域滤波
G_shift = H * F_shift
#将频谱移到左上角
G = np.fft.ifftshift(G_shift)
#进行傅里叶逆变换
g = np.real(np.fft.ifft2(G))
return g
```
巴特沃斯高通滤波器代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
def highpass_filter_butterworth(image, cutoff, n):
#获取图像的大小
M, N = image.shape
#进行傅里叶变换
F = np.fft.fft2(image)
#将零频率分量移到频谱中心
F_shift = np.fft.fftshift(F)
#构造巴特沃斯高通滤波器
H = np.zeros((M,N))
for i in range(M):
for j in range(N):
D = np.sqrt((i-M//2)**2 + (j-N//2)**2)
H[i,j] = 1 / (1 + (cutoff/D)**(2*n))
#进行频域滤波
G_shift = H * F_shift
#将频谱移到左上角
G = np.fft.ifftshift(G_shift)
#进行傅里叶逆变换
g = np.real(np.fft.ifft2(G))
return g
```
其中,`image`是待滤波的图像,`cutoff`是滤波器的截止频率(理想滤波器和高斯滤波器),`n`是巴特沃斯滤波器的阶数。函数返回处理后的图像。
阅读全文