python实现对一副带有噪声的图像采用两种以上空域和频域的滤波方法实现平滑处理
时间: 2024-05-29 12:12:35 浏览: 102
基于空域和频域两种滤波实现图像去噪含Matlab源码
以下是一些Python代码,演示如何使用两种以上的空域和频域滤波器对一幅带有噪声的图像进行平滑处理:
# 导入必要的库
import numpy as np
import cv2
from matplotlib import pyplot as plt
# 读入图像并显示
img = cv2.imread('noisy_image.jpg',0)
plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
# 空间域滤波:中值滤波
median = cv2.medianBlur(img,5)
plt.subplot(2,2,2),plt.imshow(median,cmap = 'gray')
plt.title('Median Filtered Image'), plt.xticks([]), plt.yticks([])
# 空间域滤波:均值滤波
mean = cv2.blur(img,(5,5))
plt.subplot(2,2,3),plt.imshow(mean,cmap = 'gray')
plt.title('Mean Filtered Image'), plt.xticks([]), plt.yticks([])
# 频域滤波:高通滤波
fft = np.fft.fft2(img)
fft_shift = np.fft.fftshift(fft)
rows, cols = img.shape
crow, ccol = int(rows/2), int(cols/2)
fft_shift[crow-30:crow+30, ccol-30:ccol+30] = 0
ifft_shift = np.fft.ifftshift(fft_shift)
ifft = np.fft.ifft2(ifft_shift)
magnitude_spectrum = 20*np.log(np.abs(ifft))
plt.subplot(2,2,4),plt.imshow(magnitude_spectrum, cmap = 'gray')
plt.title('High Pass Filtered Image'), plt.xticks([]), plt.yticks([])
plt.show()
在这里,我们首先读入一张带有噪声的图像,并使用cv2.medianBlur和cv2.blur函数分别进行了中值滤波和均值滤波。然后,我们使用numpy和cv2库进行了频域滤波,使用了高通滤波器来去除低频噪声,并使用np.log函数对输出进行了对数变换以显示频谱的细节。
在这个例子中,我们使用了两种空域滤波器和一种频域滤波器。但是,还可以使用其他类型的滤波器,例如高斯滤波器、双边滤波器等等。最终选择哪种滤波器取决于噪声的类型和强度,以及需要平滑的图像细节。
阅读全文