降噪滤波器#
诸如mean、median和Gaussian等滤波器允许去除图像中的噪声。
我们从MRT示例数据集的单个平面开始,这个平面噪声相当大,我们将放大查看。
import numpy as np
from pyclesperanto_prototype import imshow
from skimage.filters import gaussian
from skimage import filters
import matplotlib.pyplot as plt
from skimage.morphology import disk
from skimage.io import imread
# open dataset and extract single plane
noisy_mri = imread('../../data/Haase_MRT_tfl3d1.tif')[90]
# zoom in by cropping a part out
noisy_mri_zoom = noisy_mri[50:100, 50:100]
fig, axs = plt.subplots(1, 2, figsize=(15,15))
axs[0].imshow(noisy_mri)
axs[1].imshow(noisy_mri_zoom)
<matplotlib.image.AxesImage at 0x25cc6124040>
现在我们应用三种滤波器并比较结果图像。
median_filtered = filters.median(noisy_mri, disk(1))
mean_filtered = filters.rank.mean(noisy_mri, disk(1))
gaussian_filtered = filters.gaussian(noisy_mri, sigma=1)
fig, axs = plt.subplots(2, 3, figsize=(15,10))
# first row
axs[0, 0].imshow(median_filtered)
axs[0, 0].set_title("Median")
axs[0, 1].imshow(mean_filtered)
axs[0, 1].set_title("Mean")
axs[0, 2].imshow(gaussian_filtered)
axs[0, 2].set_title("Gaussian")
# second row
axs[1, 0].imshow(median_filtered[50:100, 50:100])
axs[1, 1].imshow(mean_filtered[50:100, 50:100])
axs[1, 2].imshow(gaussian_filtered[50:100, 50:100])
<matplotlib.image.AxesImage at 0x25cc62cfb50>
你可能会同意,第一幅图像比其他两幅图像更突出地显示了边缘。这是因为中值滤波器具有保边特性。