Inpython3Descipy ndimageLe module offre unpercentile_filter()Fonction de,C'est une version générique du filtre médian.
Diagramme de bruit impulsif
from skimage.io import imread
import matplotlib.pylab as pylab
import numpy as np
pylab.rcParams['font.sans-serif'] = ['KaiTi']
pylab.rcParams['axes.unicode_minus'] = False
def plot_image(image, title=''):
pylab.title(title, size=15)
pylab.imshow(image)
pylab.axis('off')
lena = imread(r'D:\image_processing\image4\f.jpg')
noise = np.random.random(lena.shape)
lena[noise > 0.9] = 255
lena[noise < 0.1] = 0
plot_image(lena, 'Carte du bruit')
pylab.show()
Filtre médian
from skimage.io import imread
import matplotlib.pylab as pylab
import numpy as np
from scipy import signal, misc, ndimage
pylab.rcParams['font.sans-serif'] = ['KaiTi']
pylab.rcParams['axes.unicode_minus'] = False
def plot_image(image, title=''):
pylab.title(title, size=15)
pylab.imshow(image)
pylab.axis('off')
lena = imread(r'D:\image_processing\image4\f.jpg')
noise = np.random.random(lena.shape)
lena[noise > 0.9] = 255
lena[noise < 0.1] = 0
plot_image(lena, 'Carte du bruit')
pylab.show()
fig = pylab.figure(figsize=(20, 15))
i = 1
for p in range(25, 100, 25):
for k in range(5, 25, 5):
pylab.subplot(3, 4, i)
filtered = ndimage.percentile_filter(lena, percentile=p, size=(k, k, 1))
plot_image(filtered, str(p) + ' La taille du noyau est, ' + str(k) + 'x' + str(k))
i += 1
pylab.show()
Après avoir exécuté le code ci - dessus,Nous pouvons voir, Dans tous les filtres percentiles , Filtre médian de plus petite taille de noyau (Correspond à l'article50Percentile) Les meilleurs résultats pour éliminer le bruit impulsif , Et peu de détails d'image sont perdus en même temps .