logo

Génération de filtre gaussien en C++

Filtrage gaussien est largement utilisé dans le domaine du traitement d’images. Il est utilisé pour réduire le bruit d’une image. Dans cet article, nous allons générer un Noyau gaussien 2D.
G(x y)=frac{1}{2pi sigma ^{2}}e^{-frac{x^{2}+y^{2}}{2sigma ^{2}}}   
Where y is the distance along the vertical axis from the origin x is the distance along the horizontal axis from the origin and ? est l’écart type.

Qu’est-ce que le filtrage gaussien ?

Il fonctionne en appliquant un effet de flou à l'aide d'une fonction mathématique appelée fonction gaussienne qui donne plus de poids aux pixels centraux et moins à ceux environnants. This results in a natural-looking blur that helps remove unwanted details like grain or small artifacts. Le filtrage gaussien est largement utilisé comme étape de prétraitement dans des tâches telles que la reconnaissance d'objets de détection de contours et l'amélioration d'image, ce qui permet aux algorithmes de se concentrer plus facilement sur des fonctionnalités importantes.



Implémentation en C++  

C++
// C++ program to generate Gaussian filter #include  #include    #include    using namespace std; // Function to create Gaussian filter void FilterCreation(double GKernel[][5]) {  // initialising standard deviation to 1.0  double sigma = 1.0;  double r s = 2.0 * sigma * sigma;  // sum is for normalization  double sum = 0.0;  // generating 5x5 kernel  for (int x = -2; x <= 2; x++) {  for (int y = -2; y <= 2; y++) {  r = sqrt(x * x + y * y);  GKernel[x + 2][y + 2] = (exp(-(r * r) / s)) / (M_PI * s);  sum += GKernel[x + 2][y + 2];  }  }  // normalising the Kernel  for (int i = 0; i < 5; ++i)  for (int j = 0; j < 5; ++j)  GKernel[i][j] /= sum; } // Driver program to test above function int main() {  double GKernel[5][5];  FilterCreation(GKernel);  for (int i = 0; i < 5; ++i) {  for (int j = 0; j < 5; ++j)  cout << GKernel[i][j] << 't';  cout << endl;  } } 

Sortir: 

0.00296902 0.0133062 0.0219382 0.0133062 0.00296902   
0.0133062 0.0596343 0.0983203 0.0596343 0.0133062
0.0219382 0.0983203 0.162103 0.0983203 0.0219382
0.0133062 0.0596343 0.0983203 0.0596343 0.0133062
0.00296902 0.0133062 0.0219382 0.0133062 0.00296902 

Applications réelles du filtrage gaussien

améliorer la qualité des images et extraire des informations utiles :

  • Vision par ordinateur : Aide à détecter les bords et les formes en réduisant le bruit avant d'appliquer des algorithmes de détection.
  • Imagerie médicale : Utilisé pour lisser les examens IRM ou CT, facilitant ainsi l'identification des tissus et des anomalies.
  • Détection d'objet : prépare les images en supprimant les distractions permettant aux modèles de se concentrer sur les fonctionnalités clés.
  • Outils de retouche photo : Couramment utilisé pour appliquer effets de flou

Comparaison avec d'autres filtres

Voici comment Filtre gaussien se démarque des autres filtres courants :



  • Filtre de boîte (filtre moyen) : brouille l'image en donnant poids égal à tous les pixels environnants. Le filtre gaussien est meilleur car il donne plus de poids pour centrer les pixels créant un flou plus doux et plus naturel.
  • Filtre médian : Remplace chaque pixel par le médian de valeurs proches, ce qui est idéal pour supprimer bruit poivre et sel . Unlike Gaussian it doesn't blur the image as much but may distort edges.
  • Filtre bilatéral : Comme Gaussien mais considère également intensité des pixels les différences préservent bords tout en lissant. C'est plus avancé mais aussi plus lourd en calcul .

Filtrage gaussien 2D ou 1D

UN Filtre gaussien 2D peut être décomposé en deux filtres 1D — un horizontal et un vertical. Ceci s'appelle séparabilité et cela signifie que nous n'avons pas besoin d'appliquer un noyau 2D complet en même temps.

Pourquoi c'est important :

Au lieu de faire des calculs lourds avec un gros noyau 2D (par exemple 5×5), nous appliquons un Noyau 1D horizontalement alors le même noyau verticalement . This cuts down the computation time and gives the même résultat .

types de données de suite

Considérations relatives aux performances

Générer et appliquer un Noyau gaussien peut être coûteux en calcul surtout pour les grandes images ou les noyaux.



  • Complexité temporelle :
    • Pour un noyau de taille k × k appliqué à un n × n image la complexité temporelle est O(n² × k²) .
  • Optimisation – Filtres séparables :
    Les noyaux gaussiens sont séparable ce qui signifie qu'un filtre 2D peut être brisé deux filtres 1D : un horizontal et un vertical.
    • Cela réduit la complexité temporelle à O(n²×k) le faire beaucoup plus rapide pour les grains plus gros.

L'utilisation de filtres séparables est une astuce courante dans les systèmes du monde réel pour accélérer le filtrage gaussien sans perte de qualité.

Doit lire

  • Appliquer un filtre Gauss à une image avec Python
  • Comment générer un tableau gaussien 2D à l'aide de NumPy ?
  • Intégration des fonctions gaussiennes

Conclusion

Le filtrage gaussien est une technique simple mais puissante pour réduire le bruit et le flou de l'image en utilisant une moyenne pondérée lisse basée sur la fonction gaussienne. Dans cet article, nous avons généré un Noyau gaussien 2D et exploré son rôle dans divers applications du monde réel optimiser les performances en utilisant des filtres séparables. Le filtrage gaussien global est un outil fondamental en traitement d'image contribuant à améliorer la qualité de l’image et à permettre aux algorithmes de se concentrer plus facilement sur les détails visuels importants.