logo

Gaußsche Filtergenerierung in C++

Gaußsche Filterung wird häufig im Bereich der Bildverarbeitung eingesetzt. Es wird verwendet, um das Rauschen eines Bildes zu reduzieren. In diesem Artikel werden wir eine generieren 2D-Gaußscher Kernel. Der 2D-Gauß-Kernel folgt der unten angegebenen Gauß-Verteilung. 
G(x y)=frac{1}{2pi sigma ^{2}}e^{-frac{x^{2}+y^{2}}{2sigma ^{2}}}   
Dabei ist y der Abstand entlang der vertikalen Achse vom Ursprung, x der Abstand entlang der horizontalen Achse vom Ursprung und ? ist die Standardabweichung.

Was ist Gaußsche Filterung?

Gaußsche Filterung ist eine Technik, die in der Bildverarbeitung verwendet wird, um Bilder zu glätten und Rauschen zu reduzieren. Es funktioniert durch Anwenden eines Unschärfeeffekts mithilfe einer mathematischen Funktion namens Gaußsche Funktion, die den zentralen Pixeln mehr Gewicht und den umliegenden Pixeln weniger Gewicht verleiht. Dies führt zu einer natürlich wirkenden Unschärfe, die dabei hilft, unerwünschte Details wie Körnung oder kleine Artefakte zu entfernen. Die Gaußsche Filterung wird häufig als Vorverarbeitungsschritt bei Aufgaben wie Kantenerkennung, Objekterkennung und Bildverbesserung verwendet, um es Algorithmen zu erleichtern, sich auf wichtige Merkmale zu konzentrieren.



Implementierung in 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;  } } 

Ausgabe: 

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 

Reale Anwendungen der Gaußschen Filterung

Gaußsche Filter werden in vielen Alltagstechnologien verwendet Bildqualität verbessern Und nützliche Informationen extrahieren :

  • Computer Vision : Hilft bei der Erkennung von Kanten und Formen durch Reduzierung des Rauschens vor der Anwendung von Erkennungsalgorithmen.
  • Medizinische Bildgebung : Wird zur Glättung von MRT- oder CT-Scans verwendet, um die Identifizierung von Gewebe und Anomalien zu erleichtern.
  • Objekterkennung : Bereitet Bilder vor, indem Ablenkungen entfernt werden, damit sich die Models auf die wichtigsten Funktionen konzentrieren können.
  • Fotobearbeitungswerkzeuge : Wird häufig zur Bewerbung verwendet Unschärfeeffekte Machen Sie Bilder weicher oder reduzieren Sie die Körnigkeit, um ein saubereres Aussehen zu erzielen.

Vergleich mit anderen Filtern

Hier erfahren Sie, wie Gaußscher Filter hebt sich von anderen gängigen Filtern ab:



  • Boxfilter (Durchschnittsfilter) : Verwischt das Bild durch Nachgeben gleiches Gewicht auf alle umliegenden Pixel. Der Gaußsche Filter ist besser, weil er gibt mehr Gewicht auf mittlere Pixel Dadurch entsteht eine glattere, natürlichere Unschärfe.
  • Medianfilter : Ersetzt jedes Pixel durch das mittlere von Werten in der Nähe, was sich hervorragend zum Entfernen eignet Salz-und-Pfeffer-Geräusch . Im Gegensatz zur Gaußschen Methode wird das Bild nicht so stark verwischt, es können jedoch Kanten verzerrt werden.
  • Bilateraler Filter : Wie Gauß, berücksichtigt aber auch Pixelintensität Unterschiede bewahren Kanten beim Glätten. Es ist fortgeschrittener, aber auch mehr rechenintensiv .

2D vs. 1D Gaußsche Filterung

A 2D-Gauß-Filter kann unterteilt werden in zwei 1D-Filter – eine horizontale und eine vertikale. Das nennt man Trennbarkeit und das bedeutet, dass wir nicht sofort einen vollständigen 2D-Kernel anwenden müssen.

Warum es wichtig ist:

Anstatt umfangreiche Berechnungen mit einem großen 2D-Kernel (z. B. 5×5) durchzuführen, wenden wir a an 1D-Kernel horizontal dann die gleichen Kernel vertikal . Dies verkürzt die Rechenzeit und ergibt die gleiches Ergebnis .

Java-Aufzählungen

Leistungsüberlegungen

Generieren und Anwenden einer Gaußscher Kernel kann sein rechenintensiv insbesondere für große Bilder oder Kernel.



  • Zeitkomplexität :
    • Für einen Kernel der Größe k × k angewendet auf eine n × n Bild die Zeitkomplexität ist O(n² × k²) .
    • Dies liegt daran, dass jede Pixeloperation eine Schleife über den gesamten Kernel erfordert.
  • Optimierung – Trennbare Filter :
    Gaußsche Kerne sind trennbar Dies bedeutet, dass ein 2D-Filter aufgebrochen werden kann zwei 1D-Filter : eine horizontale und eine vertikale.
    • Dies reduziert die zeitliche Komplexität auf O(n² × k) es machen viel schneller für größere Kerne.

Die Verwendung trennbarer Filter ist in realen Systemen ein gängiger Trick, um die Gaußsche Filterung ohne Qualitätsverlust zu beschleunigen.

Muss gelesen werden

  • Wenden Sie mit Python einen Gauß-Filter auf ein Bild an
  • Wie erstelle ich mit NumPy ein 2D-Gaußsches Array?
  • Integration von Gaußschen Funktionen

Abschluss

Die Gaußsche Filterung ist eine einfache, aber leistungsstarke Technik für Reduzierung von Bildrauschen und Unschärfe unter Verwendung eines glatten gewichteten Durchschnitts basierend auf der Gaußschen Funktion. In diesem Artikel haben wir eine erstellt 2D-Gaußscher Kernel und erforschte seine Rolle in verschiedenen reale Anwendungen wie Computer Vision, medizinische Bildgebung und Fotobearbeitung. Wir haben es auch mit anderen Filtern verglichen und Möglichkeiten besprochen Leistung optimieren Verwendung trennbarer Filter. Insgesamt ist die Gaußsche Filterung eine grundlegendes Werkzeug in der Bildverarbeitung Dies trägt dazu bei, die Bildqualität zu verbessern und erleichtert es Algorithmen, sich auf wichtige visuelle Details zu konzentrieren.