维纳滤波python代码
时间: 2023-07-09 16:51:58 浏览: 68
以下是一个简单的维纳滤波的 Python 实现:
```python
import cv2
import numpy as np
def wiener_filter(img, kernel, K):
# 对图像和卷积核进行傅里叶变换
img_fft = np.fft.fft2(img)
kernel_fft = np.fft.fft2(kernel, s=img.shape)
kernel_fft_conj = np.conj(kernel_fft)
# 计算滤波器的权重
weight = kernel_fft_conj / (np.abs(kernel_fft) ** 2 + K)
# 对频谱进行滤波
img_filtered_fft = weight * img_fft
img_filtered = np.real(np.fft.ifft2(img_filtered_fft))
return img_filtered.astype(np.uint8)
```
其中,`img` 是输入的图像,`kernel` 是卷积核,`K` 是维纳滤波器的截止频率。
使用方法:
```python
img = cv2.imread("test.jpg", cv2.IMREAD_GRAYSCALE)
kernel = np.ones((3, 3)) / 9 # 均值滤波器作为卷积核
img_filtered = wiener_filter(img, kernel, K=0.01)
cv2.imshow("Original Image", img)
cv2.imshow("Filtered Image", img_filtered)
cv2.waitKey(0)
cv2.destroyAllWindows()
```