Partage de technologie

C : Un bref aperçu de la fonction filter2D

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

dans OpenCVfilter2D La fonction est un outil très puissant pour convoluer des images afin d'appliquer divers filtres linéaires. Cette fonction traite chaque pixel de l'image et modifie les caractéristiques de l'image en la convoluant avec un noyau de convolution (ou filtre) spécifié.Ce qui suit concernefilter2DIntroduction détaillée de la fonction :

prototype de fonction

Dans OpenCV,filter2DLe prototype de la fonction est le suivant :

void cv::filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel,  
                  Point anchor = Point(-1,-1), double delta = 0,  
                  int borderType = BORDER_DEFAULT);

Description du paramètre

  • source: Image d’entrée.
  • heure d'été: Image de sortie et image d'entréesrcAvoir la même taille et le même nombre de canaux.
  • profondeur : La profondeur souhaitée de l’image de sortie (type de données). Lorsqu'il vaut -1, cela signifie que l'image de sortie a la même profondeur que l'image d'entrée.
  • noyau : Noyau de convolution (ou filtre), qui est une matrice à virgule flottante monocanal. Cette matrice définit comment effectuer des opérations de convolution sur l'image d'entrée.
  • ancre : Le point d'ancrage du noyau, qui indique la position relative du point de filtre dans le noyau. Le point d'ancrage doit être situé dans le noyau ; la valeur par défaut (-1,-1) signifie que le point d'ancrage est situé au centre du noyau.
  • delta: Une valeur facultative qui sera utilisée lors du stockage des pixels filtrés dansdstprécédemment ajouté aux pixels filtrés.
  • Type de bordure : Méthode d'extrapolation de pixels, utilisée pour traiter les pixels en dehors des limites de l'image. Il détermine comment les pixels limites sont traités lorsque le noyau de convolution dépasse la limite de l'image.Les options courantes incluentBORDER_CONSTANTBORDER_REPLICATEBORDER_REFLECTattendez.

principe de fonctionnement

filter2D La fonction effectue en fait une opération de convolution (bien que techniquement, elle calcule une corrélation plutôt qu'une convolution stricte puisqu'il n'y a pas de retournement du noyau impliqué). L'opération de convolution consiste à « faire glisser » le noyau de convolution sur l'image d'entrée, en multipliant les éléments correspondants de chaque sous-matrice de même taille que le noyau de convolution, puis en additionnant les résultats. Ce processus génère une nouvelle valeur de pixel qui est placée à l'emplacement correspondant dans l'image de sortie. Lorsque le noyau de convolution glisse sur toute l'image d'entrée, ce processus est répété jusqu'à ce que l'image de sortie complète soit générée.

Scénarios d'application

En changeant le noyau de convolution,filter2DLes fonctions peuvent obtenir une variété d'effets de traitement d'image, y compris, mais sans s'y limiter :

  • Netteté de l'image: L'utilisation d'un noyau de convolution de netteté spécifique peut rendre les bords de l'image plus clairs.
  • filtre moyen: L'utilisation du noyau de convolution moyen peut réduire le bruit de l'image, mais peut rendre l'image floue.
  • Filtre gaussien : Le filtrage gaussien est une technique de lissage d'image couramment utilisée qui peut réduire le bruit de l'image tout en conservant les informations de contour.Bien quefilter2DLa fonction elle-même ne fournit pas directement la génération de noyaux gaussiens, mais peut être passéegetGaussianKernella fonction génère un noyau gaussien et utilisefilter2DEffectuez un filtrage gaussien.
  • détection de bord: En concevant des noyaux de convolution spécifiques (tels que l'opérateur de Sobel, l'opérateur laplacien, etc.), les bords de l'image peuvent être détectés.

Exemple de code

Ce qui suit est une utilisationfilter2DExemple de code pour le filtrage moyen de la fonction (version Python) :

#include