Filter

Liste der Abschnitte ↓

Filter sind ein fester Bestandteil von fast jeder Aufgabe der Bildverarbeitung. Sie können beispielsweise zum Glätten von Bildern (z.B. mit mean_imagemean_imageMeanImageMeanImageMeanImagemean_image), zum Extrahieren subpixelgenauer Kanten (z.B. mit edges_sub_pixedges_sub_pixEdgesSubPixEdgesSubPixEdgesSubPixedges_sub_pix), oder zur Verarbeitung des Frequenzraums eines Bildes (z.B. mit fft_imagefft_imageFftImageFftImageFftImagefft_image) verwendet werden.

Filteroperationen werden meist unter Verwendung einer Filtermaske durchgeführt, welche pixelweise über das Bild bewegt wird. Für jedes Pixel wird ein neuer Wert basierend auf dessen Nachbarschaft berechnet. Die Nachbarschaft wird durch Form und Größe der Filtermaske bestimmt (siehe Schema unten).

image/svg+xml image/svg+xml 200 200 200 200 200 96 96 96 40 image/svg+xml 200 96 200 200 96 96 96 40 40 image/svg+xml
(1) (2) (3) (4)
(1) Bild mit einer 3x3 Pixel großen Filtermaske (orange). (2) Zur Berechnung eines neuen Pixelwerts für das Pixel im Zentrum der Maske werden die Werte aller Pixel im Bereich der Maske berücksichtigt. (3) Die Maske wird pixelweise über das Bild geschoben. (4) In diesem Fall wird ein Medianfilter (siehe median_rectmedian_rectMedianRectMedianRectMedianRectmedian_rect) zur Berechnung des Ergebnisbildes verwendet.

Wie anhand des Funktionsprinzips von Filtermasken zu erkennen ist, muss auf die Behandlung von Pixeln an Bild- oder Domänenrändern besonders geachtet werden, da Teile der Filtermaske über die Domäne hinausragen. Einige damit verbundene Aspekte werden nachfolgend betrachtet.

Anwendung von Filtermasken bei reduzierten Bilddomänen

Wenn ein Filter, der eine Maske nutzt, auf ein Bild mit reduzierter Domäne angewendet wird, ist das Ergebnis an den Grenzen der Domäne eventuell überraschend. Das kommt daher, dass Grauwerte, die eigentlich außerhalb der Domäne liegen, auch als Input für den Filter benutzt werden (siehe Schema unten).

image/svg+xml image/svg+xml image/svg+xml image/svg+xml
(1) (2) (3) (4)
(1) Bild mit einer Region (gelb), auf die die Domäne reduziert werden soll. (2) Mit reduce_domainreduce_domainReduceDomainReduceDomainReduceDomainreduce_domain wird die Bilddomäne auf die gewählte Region reduziert. (3) Zur Berechnung eines neuen Pixelwert für das Pixel im Zentrum der Maske werden die Werte aller Pixel im Bereich der Maske berücksichtigt. Für Pixel im Randbereich der Domäne zählen dazu auch außerhalb gelegene Pixel. (4) Ergebnisbild nach Anwendung eines Medianfilters (siehe median_rectmedian_rectMedianRectMedianRectMedianRectmedian_rect).

Um dies besser zu verstehen, muss die Definition der Domäne in diesem speziellen Fall genauer betrachtet werden: Für einen Filter definiert die Domäne, für welche Eingabepixel Ausgabepixel berechnet werden müssen. Dennoch können auch Pixel außerhalb der Domäne (die innerhalb der Bildmatrix liegen) für die Berechnung berücksichtigt werden.

Probleme, die von Grauwerten außerhalb der Domäne des Eingabebildes verursacht werden

Ein weiterer Aspekt, den es zu beachten gilt ist die Behandlung von Pixeln außerhalb der Domäne des Eingabebildes. Der Parameter 'init_new_image'"init_new_image""init_new_image""init_new_image""init_new_image""init_new_image" des Operators set_systemset_systemSetSystemSetSystemSetSystemset_system bestimmt, wie diese Pixel behandelt werden. Werden die Pixel mit 0 initialisiert, dann führt systemunabhängig jede Programmausführung immer zum gleichen Ergebnis. Andernfalls bleiben die Pixel undefiniert. Während die Laufzeit dadurch verbessert wird, können undefinierte Pixel von System zu System unterschiedlich sein, zum Beispiel abhängig davon, ob Parallelisierung aktiv ist oder nicht. Es wird lediglich garantiert, dass sie auf identischen Systemen bei wiederholter Programmausführung konsistent sind. In bestimmten Fällen können diese 'undefinierten' Pixel zu Problemen führen. Das Vergrößern des resultierenden Bildes auf die komplette Domäne mit full_domainfull_domainFullDomainFullDomainFullDomainfull_domain führt zu Artefakten außerhalb der ursprünglichen Domäne.

Probleme, die durch aufeinander folgende Filteroperationen verursacht werden

Werden zwei oder mehr Filter nacheinander angewendet, verstärkt sich die Auswirkung von undefinierten oder unerwarteten Pixelwerten (siehe die vorherigen Abschnitte) auf das Ergebnisbild. Das kommt daher, dass der Fehler mit jedem nachfolgenden Filter größer wird, von der Grenze beginnend zur Mitte hin. Im Folgenden werden vier verschiedene Methoden betrachtet, wie diese Probleme gelöst werden können.

Artefakte an der Grenze der Domäne, nachdem nacheinander zwei Filter angewendet wurden.
  1. Fehler, die durch undefinierte Pixel verursacht werden, können leicht vermieden werden, indem beispielsweise der Filtermaske entsprechend eine dilatierte Domäne (siehe Morphologie / Grauwerte), gewählt wird. Werden mehrere Filter nacheinander angewendet, so kann die Bilddomäne im voraus den Filtergrößen entsprechend dilatiert werden. Werden beispielsweise mehrere rechteckige Filtermasken beliebiger Größe aufeinanderfolgend verwendet, dann kann die entsprechende Höhen- oder Breitendimension der Dilatationsmaske unter Berücksichtigung der einzelnen Filtermaskendimensionen und der Anzahl Filteroperationen berechnet werden:

    .

    Nach den Filteroperationen kann die Bilddomäne wieder auf die ursprüngliche Größe reduziert werden (z.B. mit reduce_domainreduce_domainReduceDomainReduceDomainReduceDomainreduce_domain).

  2. Eine andere Möglichkeit ist, die Domäne genauso groß wie benötigt festzulegen, und dann den Operator expand_domain_grayexpand_domain_grayExpandDomainGrayExpandDomainGrayExpandDomainGrayexpand_domain_gray aufzurufen. Dann werden die Pixel innerhalb der Grenze nach außen kopiert. Damit werden Fehler vermieden, die von undefinierten Pixel außerhalb der Domäne verursacht werden. Danach kann die Domäne wieder auf ihre ursprüngliche Größe reduziert werden. Dieser Prozess sollte vor jedem folgenden Filter wiederholt werden. Beachten Sie dabei, dass diese Option die Laufzeit beträchtlich erhöht.

    Das Resultat von expand_domain_grayexpand_domain_grayExpandDomainGrayExpandDomainGrayExpandDomainGrayexpand_domain_gray sieht aus, als ob die Grenze mehrmals kopiert und außen angefügt wird.
  3. Falls die Laufzeit kein Thema ist, kann vor der Anwendung des ersten Filters der Operator full_domainfull_domainFullDomainFullDomainFullDomainfull_domain aufgerufen werden. Dann ist das gesamte Bild als Domäne definiert, und undefinierte Pixel werden komplett vermieden.

  4. Alternativ dazu kann auch der Operator crop_domaincrop_domainCropDomainCropDomainCropDomaincrop_domain aufgerufen werden, bevor ein Filter eingesetzt wird. Dieser schneidet das Bild auf die Größe der Domäne zu - die Domäne deckt damit ein komplettes neues Bild ab. Beachten Sie allerdings, dass sich damit das Koordinatensystem des zugeschnittenen Bildes im Vergleich zum ursprünglichen Bild ändert, was alle folgenden Anwendungen betrifft, die sich auf das Bildkoordinatensystem beziehen (z. B. die Berechnung des Schwerpunktes).


Liste der Abschnitte