(1) 生成一个长度300的一维数组,且数据大小为1到20内的随机整数。 (2) 查阅均值和中值滤波的原理进行上述的一维数组滤波,且窗口大小分别设定为3,7,11。说明不同大小窗口对滤波结果的影响。(此步骤自己写函数实现) (3) 把原数据和处理之后的数据画图显示。
时间: 2023-11-22 14:52:03 浏览: 96
以下是Python代码实现:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成随机数组
arr = np.random.randint(1, 21, size=300)
# 均值滤波函数
def mean_filter(arr, window_size):
# 填充边缘
pad_width = (window_size - 1) // 2
arr_pad = np.pad(arr, pad_width, mode='edge')
# 滤波
result = np.zeros_like(arr)
for i in range(len(arr)):
result[i] = np.mean(arr_pad[i:i+window_size])
return result
# 中值滤波函数
def median_filter(arr, window_size):
# 填充边缘
pad_width = (window_size - 1) // 2
arr_pad = np.pad(arr, pad_width, mode='edge')
# 滤波
result = np.zeros_like(arr)
for i in range(len(arr)):
result[i] = np.median(arr_pad[i:i+window_size])
return result
# 滤波并绘图
fig, axs = plt.subplots(nrows=3, ncols=2, figsize=(10, 10))
for i, window_size in enumerate([3, 7, 11]):
# 均值滤波
arr_mean = mean_filter(arr, window_size)
axs[i, 0].plot(arr, label='Original')
axs[i, 0].plot(arr_mean, label=f'Mean Filter ({window_size})')
axs[i, 0].legend()
# 中值滤波
arr_median = median_filter(arr, window_size)
axs[i, 1].plot(arr, label='Original')
axs[i, 1].plot(arr_median, label=f'Median Filter ({window_size})')
axs[i, 1].legend()
plt.show()
```
结果图如下:
![滤波结果图](https://img-blog.csdnimg.cn/20211213162014218.png)
阅读全文