2、以图像Fig0219(a)为对象,先进行运动模糊,再添加高斯噪声,之后使用维纳滤波进行复原。
时间: 2024-05-01 08:23:00 浏览: 84
首先,我们需要导入必要的库和加载图像:
```python
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('Fig0219(a).tif', 0)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.show()
```
接下来,我们可以定义一个函数来进行运动模糊。
```python
def motion_blur(image, kernel_size=15, angle=45):
# 生成运动模糊核
kernel = np.zeros((kernel_size, kernel_size))
kernel[int((kernel_size - 1) / 2), :] = np.ones(kernel_size)
kernel = cv2.warpAffine(kernel, cv2.getRotationMatrix2D((kernel_size / 2 - 0.5, kernel_size / 2 - 0.5), angle, 1.0), (kernel_size, kernel_size))
kernel = kernel / np.sum(kernel)
# 应用运动模糊核
output = cv2.filter2D(image, -1, kernel)
output = np.uint8(output)
return output
```
然后,我们可以使用这个函数来进行运动模糊:
```python
blurred = motion_blur(img)
plt.imshow(blurred, cmap='gray')
plt.title('Blurred Image')
plt.show()
```
现在,我们将添加高斯噪声:
```python
blurred = np.float32(blurred)
noisy = blurred + 25 * np.random.randn(*blurred.shape)
noisy = np.uint8(np.clip(noisy, 0, 255))
plt.imshow(noisy, cmap='gray')
plt.title('Noisy Image')
plt.show()
```
最后,我们将使用维纳滤波器来去除噪声和模糊:
```python
# 计算维纳滤波器
psf = np.ones((kernel_size, kernel_size)) / kernel_size ** 2
psf = cv2.warpAffine(psf, cv2.getRotationMatrix2D((kernel_size / 2 - 0.5, kernel_size / 2 - 0.5), angle, 1.0), (kernel_size, kernel_size))
psf /= np.sum(psf)
eps = 1e-3
deconvolved = cv2.deconvolve(noisy, psf)[0]
deconvolved = np.uint8(np.clip(deconvolved, 0, 255))
plt.imshow(deconvolved, cmap='gray')
plt.title('Restored Image')
plt.show()
```
这样就完成了图像的运动模糊、高斯噪声和维纳滤波复原。完整代码如下:
阅读全文