维纳滤波去噪python代码
时间: 2023-09-24 19:01:17 浏览: 206
维纳滤波是一种常用的去噪滤波技术,它可以有效降低图像或信号上的噪声。在Python中,可以使用scikit-image库来实现维纳滤波。
首先,我们需要导入所需的库:
```python
import numpy as np
from skimage import io, restoration
```
然后,加载需要去噪的图像:
```python
image = io.imread('input.jpg')
```
接下来,我们可以先对图像进行预处理,例如转换为灰度图像:
```python
image_gray = np.mean(image, axis=2)
```
然后,我们可以计算噪声的方差:
```python
var = np.var(image_gray)
```
接下来,使用维纳滤波对图像进行去噪处理:
```python
denoised_image = restoration.denoise_tv_chambolle(image_gray, weight=0.1)
```
最后,保存去噪后的图像:
```python
io.imsave('output.jpg', denoised_image)
```
这样,我们就完成了使用维纳滤波进行图像去噪的Python代码。
相关问题
图像滤波去噪算法python
### Python 实现图像滤波去噪算法
#### 平均滤波器
平均滤波是一种简单有效的线性滤波技术,用于减少随机噪声的影响。此方法通过对邻近像素求平均值来平滑图像。
```python
import cv2
import numpy as np
# 加载图片
image = cv2.imread('noisy_image.png')
# 使用OpenCV内置函数执行5x5窗口大小的平均模糊
mean_filtered = cv2.blur(image, (5, 5))
cv2.imwrite('mean_filtered_image.png', mean_filtered)
```
上述代码展示了如何利用`cv2.blur()`函数应用平均滤波[^2]。
#### 维纳滤波器
对于含有加性高斯白噪声的退化图像恢复问题,维纳滤波提供了更优的选择。这种方法不仅考虑到了点扩散函数(PSF),还加入了对信噪比(SNR)估计的支持。
```python
from scipy.signal import wiener
import matplotlib.pyplot as plt
def apply_wiener_filter(noisy_img):
# 对含噪图像施加Wiener滤波
filtered_img = wiener(noisy_img)
return filtered_img
# 示例:加载并显示原始图及其经由Wiener过滤后的版本
original = plt.imread('blurred_noisy.png')
cleaned = apply_wiener_filter(original)
plt.figure(figsize=(10,7))
plt.subplot(1,2,1), plt.title("Original Noisy Image"), plt.imshow(original,cmap='gray'), plt.axis('off')
plt.subplot(1,2,2), plt.title("After Wiener Filtering"), plt.imshow(cleaned,cmap='gray'), plt.axis('off')
plt.show()
```
这段脚本说明了怎样借助SciPy库里的wiener()功能来进行维纳滤波处理[^1]。
#### 自定义高斯核卷积
除了预设好的工具外,也可以手动创建自定义尺寸和标准差参数σ的二维高斯分布作为权重矩阵参与卷积运算完成降噪任务:
```python
def gaussian_kernel(size=5,sigma=1.0):
"""构建指定size×size大小的标准正态分布形式的核心"""
ax = np.linspace(-(size//2),(size//2), size)
xx, yy = np.meshgrid(ax,ax)
kernel = np.exp(-0.5*(np.square(xx)+np.square(yy))/sigma**2)/(2*np.pi*sigma**2)
return kernel/np.sum(kernel)
gaussian_blur = lambda img,kernel_size=5: cv2.filter2D(img,-1,gaussian_kernel(kernel_size))
```
这里给出了一个实用的小技巧——通过调整kernel_size变量可以灵活改变所生成高斯模板的空间范围;而修改sigma数值则能控制其形状特征。
维纳滤波使用Python在图像处理中的应用案例
### 使用 Python 实现维纳滤波进行图像处理
#### 导入必要的库
为了实现维纳滤波,需要导入一些常用的科学计算和图像处理库。
```python
import numpy as np
from scipy.signal import wiener, convolve2d
from skimage import io, color, img_as_float
import matplotlib.pyplot as plt
```
#### 加载并预处理图像
加载一张用于测试的灰度图片,并将其转换成浮点数格式以便后续操作。
```python
image = img_as_float(color.rgb2gray(io.imread('path_to_image.jpg')))
plt.imshow(image, cmap='gray')
plt.title("Original Image")
plt.show()
```
#### 添加高斯噪声模拟退化过程
创建一个带有随机噪声干扰版本的输入图像作为待修复的目标对象。
```python
np.random.seed(0)
noisy_image = image + 0.4 * image.std() * np.random.standard_normal(image.shape)
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(8, 5))
ax[0].imshow(noisy_image, cmap="gray")
ax[0].set_title("Noisy Image")
psf = np.ones((5, 5)) / 25
blurred_noisy_image = convolve2d(noisy_image, psf, 'same', boundary='symm')
ax[1].imshow(blurred_noisy_image, cmap="gray")
ax[1].set_title("Blurred Noisy Image")
plt.tight_layout()
plt.show()
```
#### 应用维纳滤波器去除噪音和平滑边缘
利用 `wiener` 函数执行去噪和平滑处理。该函数会自动估计信噪比参数从而优化结果质量。
```python
filtered_image = wiener(blurred_noisy_image, (5, 5))
plt.figure(figsize=(6, 6))
plt.imshow(filtered_image, cmap="gray")
plt.title("Filtered Image with Wiener Filter")
plt.show()
```
上述代码展示了如何使用Python中的SciPy库来应用维纳滤波技术对含噪模糊图像进行增强[^2]。此方法特别适合于那些受到低频成分影响较大的情况,在保持细节的同时有效减少高频噪声的影响。
阅读全文
相关推荐











