Filtrage bilatéral en Python

Aditya Raj 15 février 2024
  1. Qu’est-ce que le filtrage bilatéral
  2. Étapes pour effectuer un filtrage bilatéral en Python
  3. la fonction bilateralFilter() en Python
  4. Utilisez la fonction bilateralFilter() pour effectuer un filtrage bilatéral en Python
Filtrage bilatéral en Python

Le filtrage est utilisé pour traiter les images dans les applications de vision par ordinateur. Cet article traitera de la mise en œuvre du filtrage bilatéral en Python à l’aide du module OpenCV.

Qu’est-ce que le filtrage bilatéral

Le filtrage bilatéral est une technique de filtrage lissant. Il s’agit d’un filtre non linéaire et réducteur de bruit qui remplace chaque valeur de pixel par la valeur de pixel moyenne pondérée des voisins.

Le filtrage bilatéral est également appelé filtrage préservant les bords car il ne fait pas la moyenne du pixel sur les bords.

Étapes pour effectuer un filtrage bilatéral en Python

Pour effectuer un filtrage bilatéral, nous effectuons principalement quatre tâches.

  1. Nous remplaçons chaque pixel de l’image par la moyenne pondérée de ses voisins.

  2. La pondération de chaque voisin est déterminée par sa distance par rapport au pixel actuel. Nous attribuons à chaque pixel un poids où les pixels les plus proches obtiennent le poids le plus élevé et les pixels distants reçoivent le poids le plus faible.

    Pour effectuer cette tâche, nous utilisons un paramètre spatial.

  3. La pondération du voisin dépend également de la différence d’intensité des pixels. Les pixels avec une intensité similaire au pixel actuel se voient attribuer plus de poids, tandis que les pixels avec de grandes différences d’intensité se voient attribuer des poids moindres.

    Pour effectuer cette tâche, nous utilisons un paramètre de plage.

  4. En augmentant le paramètre spatial, vous pouvez lisser les plus grandes caractéristiques de l’image. En revanche, si vous augmentez le paramètre de plage, le filtrage bilatéral se comporte comme un filtrage gaussien.

la fonction bilateralFilter() en Python

Nous pouvons effectuer un filtrage bilatéral en Python en utilisant le module OpenCV en utilisant la fonction bilateralFilter(). La syntaxe de la fonction bilateralFilter() est la suivante.

bilateralFilter(src, d, sigmaColor, sigmaSpace, borderType)

Ici,

  • Le paramètre src prend l’image source à traiter en argument d’entrée.

  • Le paramètre d prend le diamètre du voisinage dans lequel les pixels sont à considérer lors du filtrage.

  • Le paramètre sigmaColor est la valeur du filtre sigma dans l’espace colorimétrique. Avoir une valeur plus élevée de sigmaColor signifie que les couleurs les plus éloignées dans l’espace colorimétrique sont prises en compte lors du filtrage.

    Le paramètre sigmaColor doit contenir une valeur dans la plage de sigmaSpace.

  • Le paramètre sigmaSpace désigne la valeur de sigma dans le domaine spatial. Une valeur plus élevée de sigmaSpace signifie que les pixels les plus éloignés du pixel courant sont pris en compte lors du filtrage.

    Le paramètre sigmaSpace doit contenir une valeur dans la plage de sigmaColor.

  • Le paramètre borderType permet de définir un mode d’extrapolation des pixels hors image tout en filtrant les pixels dans les limites de l’image.

Utilisez la fonction bilateralFilter() pour effectuer un filtrage bilatéral en Python

Voici les étapes pour effectuer un filtrage bilatéral en Python.

  • Tout d’abord, nous allons importer cv2.
  • Ensuite, nous allons ouvrir une image en utilisant la fonction imread(), qui prend le chemin du fichier d’une image comme argument d’entrée et renvoie un tableau représentant l’image.
  • Nous stockerons le tableau dans une variable img.
  • Après avoir chargé l’image, nous utiliserons la fonction bilateralFilter() pour effectuer un fonctionnement bilatéral en Python. Après exécution, la fonction bilateralFilter() renvoie un tableau contenant l’image traitée.
  • Après avoir obtenu l’image traitée, nous l’enregistrerons dans le système de fichiers à l’aide de la fonction imwrite(), qui prend une chaîne contenant le nom de fichier du fichier de sortie comme premier argument d’entrée et le tableau contenant l’image traitée comme deuxième entrée. dispute. Après l’exécution de la fonction, le fichier est enregistré dans le système de fichiers.

Vous trouverez ci-dessous l’image que nous utiliserons pour effectuer un filtrage bilatéral en Python.

motif

Voici le code pour effectuer un filtrage bilatéral en Python.

import cv2

img = cv2.imread("pattern.jpg")
output_image = cv2.bilateralFilter(img, 15, 100, 100)
cv2.imwrite("processed_image.jpg", output_image)

Voici l’image de sortie après avoir effectué un filtrage bilatéral sur l’image d’entrée :

image traitée en python avec filtre bilatéral

Dans l’image donnée, vous pouvez observer que les caractéristiques des bandes ont été floues dans l’image de sortie. En effet, les pixels voisins de chaque pixel sont pris en compte lors de la création du pixel de sortie.

La moyenne des pixels donne un effet de flou et les caractéristiques sont floues.

Comparé au filtrage gaussien, le filtrage bilatéral préserve les bords. Par conséquent, lors des opérations de lissage, vous pouvez toujours utiliser le filtrage bilatéral si vous avez besoin de préserver les contours de votre image.

Auteur: Aditya Raj
Aditya Raj avatar Aditya Raj avatar

Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.

GitHub