Technologieaustausch

C: Ein kurzer Überblick über die filter2D-Funktion

2024-07-08

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

in OpenCVfilter2D Die Funktion ist ein sehr leistungsfähiges Werkzeug zum Falten von Bildern, um verschiedene lineare Filter anzuwenden. Diese Funktion verarbeitet jedes Pixel im Bild und modifiziert die Eigenschaften des Bildes, indem sie es mit einem angegebenen Faltungskern (oder Filter) faltet.Im Folgenden geht es darumfilter2DDetaillierte Einführung der Funktion:

Funktionsprototyp

In OpenCV,filter2DDer Prototyp der Funktion lautet wie folgt:

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

Parameterbeschreibung

  • Quelle: Bild eingeben.
  • dst: Ausgabebild und EingabebildsrcHaben die gleiche Größe und Anzahl der Kanäle.
  • Tiefe : Die gewünschte Tiefe des Ausgabebildes (Datentyp). Wenn es -1 ist, bedeutet dies, dass das Ausgabebild dieselbe Tiefe wie das Eingabebild hat.
  • Kernel : Faltungskern (oder Filter), bei dem es sich um eine einkanalige Gleitkommamatrix handelt. Diese Matrix definiert, wie Faltungsoperationen am Eingabebild durchgeführt werden.
  • Anker : Der Ankerpunkt des Kernels, der die relative Position des Filterpunkts im Kernel angibt. Der Ankerpunkt sollte sich innerhalb des Kernels befinden. Der Standardwert (-1, -1) bedeutet, dass sich der Ankerpunkt in der Mitte des Kernels befindet.
  • Delta: ein optionaler Wert, der beim Speichern gefilterter Pixel verwendet wirddstzuvor zu den gefilterten Pixeln hinzugefügt.
  • Rahmentyp : Pixelextrapolationsmethode, mit der Pixel außerhalb der Bildgrenze verarbeitet werden. Es bestimmt, wie die Grenzpixel verarbeitet werden, wenn der Faltungskern die Bildgrenze überschreitet.Zu den gängigen Optionen gehören:BORDER_CONSTANTBORDER_REPLICATEBORDER_REFLECTWarten.

Arbeitsprinzip

filter2D Die Funktion führt tatsächlich eine Faltungsoperation durch (obwohl sie technisch gesehen eher eine Korrelation als eine strikte Faltung berechnet, da kein Umdrehen des Kernels beteiligt ist). Bei der Faltungsoperation wird der Faltungskern über das Eingabebild „geschoben“, die entsprechenden Elemente jeder Untermatrix mit derselben Größe wie der Faltungskern multipliziert und anschließend die Ergebnisse addiert. Dieser Vorgang generiert einen neuen Pixelwert, der an der entsprechenden Stelle im Ausgabebild platziert wird. Während der Faltungskern über das gesamte Eingabebild gleitet, wird dieser Vorgang wiederholt, bis das vollständige Ausgabebild generiert ist.

Anwendungsszenarien

Durch Ändern des Faltungskernsfilter2DFunktionen können eine Vielzahl von Bildverarbeitungseffekten erzielen, einschließlich, aber nicht beschränkt auf:

  • Bildschärfung: Die Verwendung eines bestimmten Schärfungsfaltungskerns kann die Kanten des Bildes klarer machen.
  • mittlerer Filter: Durch die Verwendung des durchschnittlichen Faltungskerns kann das Bildrauschen reduziert werden, das Bild kann jedoch möglicherweise unscharf werden.
  • Gaußscher Filter : Gaußsche Filterung ist eine häufig verwendete Bildglättungstechnik, die Bildrauschen reduzieren und gleichzeitig Kanteninformationen beibehalten kann.Obwohlfilter2DDie Funktion selbst sorgt nicht direkt für die Generierung von Gaußschen Kerneln, kann aber übergeben werdengetGaussianKernelFunktion generiert einen Gaußschen Kernel und verwendetfilter2DFühren Sie eine Gaußsche Filterung durch.
  • Kantenerkennung: Durch das Entwerfen spezifischer Faltungskerne (z. B. Sobel-Operator, Laplace-Operator usw.) können Kanten im Bild erkannt werden.

Beispielcode

Das Folgende ist eine Verwendungfilter2DBeispielcode für die Mittelwertfilterung der Funktion (Python-Version):

#include