Filter

Liste der Abschnitte ↓

Dieses Kapitel beschreibt Operatoren, die zum Filtern verwendet werden können.

Filter sind ein fester Bestandteil von fast jeder Aufgabe der Bildverarbeitung. Beispielsweise kann mean_imagemean_imageMeanImageMeanImageMeanImage zum Glätten von Bildern verwendet werden, edges_sub_pixedges_sub_pixEdgesSubPixEdgesSubPixEdgesSubPix extrahiert sub-pixel genau Kanten, und fft_imagefft_imageFftImageFftImageFftImage kann verwendet werden, um die Fourier-Transformation eines Bildes zu berechnen.

In diesem Kapitel werden wir einen genaueren Blick auf spezielle Probleme werfen: Der Verwendung eines Bildes mit einer reduzierten Domäne und der Problematik, was passiert, wenn mehrere Filter nacheinander auf ein Bild angewendet werden.

Filter, Masken und Domä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, da Grauwerte, die eigentlich außerhalb der Domäne liegen, auch als Input für den Filter benutzt werden. Um dies besser zu verstehen, müssen wir uns die Definition der Domäne in diesem speziellen Fall genauer ansehen: Für einen Filter definiert die Domäne, für welche Input-Pixel Output-Pixel berechnet werden müssen. Dennoch können auch Pixel außerhalb der Domäne (die innerhalb der Bildmatrix liegen) für die Verarbeitung genutzt werden.

Probleme, die von Grauwerten außerhalb der Bilddomäne verursacht werden

Operatoren, die ein Bild als Ergebnis zurückgeben, liefern nur Resultate für Pixel zurück, die in der Inputdomäne vorhanden waren.

Aus Performancegründen werden Pixel außerhalb der Bilddomäne 'undefiniert'. Diese undefinierten Pixel können 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_domainFullDomainFullDomainFullDomain führt zu Artefakten außerhalb der ursprünglichen Domäne.

Ein anderer Grund für Probleme sind undefinierte Pixel außerhalb der Domäne, falls zwei oder mehr Filter nacheinander angewendet werden, da die Filter auch die undefinierten Pixel an der Grenze der Domäne in ihre Berechnung mit einbeziehen. Das bedeutet, 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 eine Domäne gewählt wird, die bedeutend größer ist als der Bildteil, der tatsächlich benötigt wird. Nachdem ein Filter angewendet wurde, kann dann die Domäne um die halbe Filtergröße verkleinert werden (beispielsweise mit den Operatoren erosion_rectangle1erosion_rectangle1ErosionRectangle1ErosionRectangle1ErosionRectangle1 und reduce_domainreduce_domainReduceDomainReduceDomainReduceDomain). Damit werden die Bereiche des Bildes, die falsche Werte enthalten, ausgeschlossen, und erhöhen damit nicht den Fehler für die nächsten Filter.

  2. Eine andere Möglichkeit ist, die Domäne genauso groß wie benötigt festzulegen, und dann den Operator expand_domain_grayexpand_domain_grayExpandDomainGrayExpandDomainGrayExpandDomainGray 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 for jedem folgenden Filter wiederholt werden. Beachten Sie dabei, dass diese Option die Laufzeit beträchtlich erhöht.

    Das Resultat von expand_domain_grayexpand_domain_grayExpandDomainGrayExpandDomainGrayExpandDomainGray 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_domainFullDomainFullDomainFullDomain 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_domainCropDomainCropDomainCropDomain 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