Rauschentfernungsfilter#
Filter wie mean
, median
und Gaussian
ermöglichen die Entfernung von Rauschen aus Bildern.
Wir beginnen mit einer einzelnen Ebene des MRT-Beispieldatensatzes, der ziemlich verrauscht ist, und zoomen hinein.
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>

Nun wenden wir drei Filter an und vergleichen die resultierenden Bilder.
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("Mittelwert")
axs[0, 2].imshow(gaussian_filtered)
axs[0, 2].set_title("Gauß")
# 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>

Sie werden vielleicht zustimmen, dass das erste Bild Kanten deutlicher zeigt als die anderen beiden. Dies liegt daran, dass der Medianfilter kantenschonend ist.