Traitement d'image par Python 100 knock # 9 Filtre Gaussien

introduction

Salut, je suis Ramu. Cette fois, nous allons implémenter un filtre gaussien qui supprime le bruit dans l'image.

9ème: filtre gaussien

Le filtre gaussien est un filtre qui lisse l'image. En appliquant ce filtre, vous pouvez rendre l'image entière floue.

Dans ce filtre, les pixels périphériques du pixel d'intérêt sont pondérés par la distribution gaussienne, et plus le pixel central du filtre est proche, plus le poids est important. La pondération par distribution gaussienne est définie comme suit.

g(x,y) = \frac{1}{2\pi\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}}

Par exemple, les filtres suivants sont souvent utilisés pour les filtres gaussiens 3x3 et 5x5. Probablement, si vous spécifiez environ $ σ = 0,85 $ pour l'argument s, ce sera cette valeur.

\frac{1}{16} \frac{2}{16} \frac{1}{16}
\frac{2}{16} \frac{4}{16} \frac{2}{16}
\frac{1}{16} \frac{2}{16} \frac{1}{16}
\frac{1}{256} \frac{4}{256} \frac{6}{256} \frac{4}{256} \frac{1}{256}
\frac{4}{256} \frac{16}{256} \frac{24}{256} \frac{16}{256} \frac{4}{256}
\frac{6}{256} \frac{24}{256} \frac{36}{256} \frac{24}{256} \frac{6}{256}
\frac{4}{256} \frac{16}{256} \frac{24}{256} \frac{16}{256} \frac{4}{256}
\frac{1}{256} \frac{4}{256} \frac{6}{256} \frac{4}{256} \frac{1}{256}

En supposant que le pixel d'intérêt est le centre, la somme des produits des pixels périphériques et des valeurs de filtre correspondantes doit être remplacée par le pixel d'intérêt. Pour un filtre 3 × 3, $ I (x_0, y_0) × \ frac {1} {16} + I (x_0, y_1) × \ frac {2} {16} + ... I (x_2, y_2) × Remplacez la valeur de \ frac {1} {16} $ par le pixel d'intérêt.

De plus, comme le bord de l'image ne peut pas être filtré, 0 est utilisé pour les pixels inexistants. C'est ce qu'on appelle le remplissage 0.

Code source

gaussianFilter.py


import numpy as np
import cv2
import matplotlib.pyplot as plt


def gaussianFilter(img,k,s):
  w,h,c = img.shape
  size = k // 2

  #0 processus de remplissage
  _img = np.zeros((w+2*size,h+2*size,c), dtype=np.uint8)
  _img[size:size+w,size:size+h] = img.copy().astype(np.uint8)
  dst = _img.copy()

  #Création de filtres
  ker = np.zeros((k,k), dtype=np.float)
  for x in range(-1*size,k-size):
    for y in range(-1*size,k-size):
      ker[x+size,y+size] = (1/(2*np.pi*(s**2)))*np.exp(-1*(x**2+y**2)/(2*(s**2)))

  ker /= ker.sum()

  #Processus de filtrage
  for x in range(w):
    for y in range(h):
      for z in range(c):
        dst[x+size,y+size,z] = np.sum(ker*_img[x:x+k,y:y+k,z])

  dst = dst[size:size+w,size:size+h].astype(np.uint8)

  return dst


#Lecture d'image
img = cv2.imread('image.jpg')

#Filtre gaussien
#2ème argument: taille du filtre, 3ème argument: écart type(σ)
img = gaussianFilter(img,21,2)

#Enregistrer l'image
cv2.imwrite('result.jpg', img)
#Affichage de l'image
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()

ファイル名 ファイル名

L'image de gauche est l'image d'entrée et l'image de droite est l'image de sortie. Vous pouvez voir que le bruit ponctué est réduit.

en conclusion

Si vous avez des questions, n'hésitez pas à nous contacter. [Github] de imori_imori (https://github.com/yoyoyo-yo/Gasyori100knock/blob/master/Question_01_10/answers_py/answer_6.py) a la réponse officielle, veuillez donc vérifier cela également. .. De plus, comme python est un débutant, veuillez signaler toute erreur.

Recommended Posts

Traitement d'image par Python 100 knock # 9 Filtre Gaussien
Traitement d'image avec la binarisation Python 100 knocks # 3
100 traitement d'image par Python Knock # 2 Échelle de gris
Traitement d'image avec Python
Traitement d'image par Python 100 knock # 10 filtre médian
100 traitement d'image avec Python Knock # 8 Max Pooling
Traitement d'image par Python 100 knock # 12 motion filter
Traitement d'image avec Python 100 knocks # 7 pooling moyen
Traitement d'image avec Python (partie 2)
Traitement d'image avec Python (partie 1)
Traitement d'image avec Python (3)
[Python] Traitement d'image avec scicit-image
traitement d'image python
Traitement d'image 100 coups ①
Bases du traitement d'images binarisées par Python
Traitement d'image avec Python et OpenCV [Tone Curve]
Dessin avec Matrix-Reinventor of Python Image Processing-
Traitez facilement des images en Python avec Pillow
Traitement d'image léger avec Python x OpenCV
Traitement d'image par Python 100 knock # 4 Binarisation Otsu (méthode d'analyse de discrimination)
Traitement d'image avec MyHDL
Premier traitement d'image Python
Traitement d'image avec PIL
Démarrer avec Python avec 100 coups sur le traitement du langage
Traitement d'image à partir de zéro avec python (5) Transformation de Fourier
Traitement d'image à partir de zéro avec python (4) Extraction de contour
Traitement d'image avec la configuration de l'environnement Python pour Windows
Traitement d'image par filtre de lissage Python 100 knock # 11 (filtre moyen)
100 coups de traitement du langage avec Python 2015
Traitement d'image avec PIL (Pillow)
"Traitement Apple" avec OpenCV3 + Python3
Remarques sur le traitement d'images HDR et RAW avec Python
Édition d'image avec python OpenCV
Traitement du signal acoustique avec Python (2)
100 coups sur le traitement d'image !! (011-020) Début de partie
Traitement du signal acoustique avec Python
[Python] Filtrer les feuilles de calcul avec gspread
Tri des fichiers image avec Python (2)
Tri des fichiers image avec Python (3)
100 coups sur le traitement d'image !! (001 --010) Soigneusement et soigneusement
Tweet avec image en Python
Tri des fichiers image avec Python
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
Traitement d'image par python (Pillow)
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
Collection de traitement d'image en Python
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
[Jouons avec Python] Traitement d'image en monochrome et points
Découpez une image avec python
[Python] Traitement parallèle facile avec Joblib
100 traitements de langage avec Python
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
100 traitements de langage avec Python (chapitre 3)
Notes personnelles pour le traitement d'images python
Faisons du scraping d'images avec Python
Trouver la similitude d'image avec Python + OpenCV
Génération d'images dégradées avec Python [1] | np.linspace
Filtre médian utilisant xarray (filtre médian)
Traitement d'image par Python 100 knock # 10 filtre médian
mail html avec image à envoyer avec python
Traitement d'image par le remplacement du canal Python 100 Knock # 1