编程实现在频域给图像添加周期噪声
时间: 2024-05-08 18:21:17 浏览: 89
首先,我们需要将图像转换到频域,可以使用快速傅里叶变换(FFT)实现。然后,在频域中,我们可以通过在频率域中添加正弦波来模拟周期噪声。
下面是 Python 代码实现:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取图像
img = cv2.imread('image.jpg', 0)
# 快速傅里叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
# 添加周期噪声
rows, cols = img.shape
crow, ccol = rows // 2, cols // 2
amplitude = 50 # 噪声振幅
freq = 0.05 # 噪声频率
for i in range(rows):
for j in range(cols):
# 计算到中心点的距离
d = np.sqrt((i - crow) ** 2 + (j - ccol) ** 2)
# 添加正弦波
fshift[i, j] += amplitude * np.sin(freq * d)
# 傅里叶逆变换,将频域图像转换为空域图像
f_ishift = np.fft.ifftshift(fshift)
img_back = np.fft.ifft2(f_ishift).real
# 显示结果
plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(img_back, cmap='gray')
plt.title('Result Image'), plt.xticks([]), plt.yticks([])
plt.show()
```
这段代码首先读取图像,然后使用 FFT 将图像转换到频域。然后,我们添加一个正弦波来模拟周期噪声,并使用逆 FFT 将频域图像转换回空域图像。最后,我们显示原始图像和添加噪声后的图像。
注意,频率和振幅的值可以根据需要进行调整。
阅读全文