scipy.ndimage.

binary_opening#

scipy.ndimage.binary_opening(input, structure=None, iterations=1, output=None, origin=0, mask=None, border_value=0, brute_force=False, *, axes=None)[Quelle]#

Mehrdimensionale binäre Öffnung mit dem gegebenen Strukturelement.

Die *Öffnung* eines Eingabebildes mit einem Strukturelement ist die *Dilatation* der *Erosion* des Bildes mit dem Strukturelement.

Parameter:
inputarray_like

Binäre array_like, die geöffnet werden soll. Nicht-Null (True) Elemente bilden die zu öffnende Teilmenge.

structurearray_like, optional

Strukturelement, das für die Öffnung verwendet wird. Nicht-Null-Elemente werden als True betrachtet. Wenn kein Strukturelement angegeben wird, wird ein Element mit einer quadratischen Konnektivität von eins generiert (d.h. nur benachbarte Pixel sind mit dem Zentrum verbunden, diagonal verbundene Elemente sind keine Nachbarn).

iterationsint, optional

Der Erosionsschritt der Öffnung, gefolgt vom Dilatationsschritt, wird jeweils iterations mal wiederholt (standardmäßig eins). Wenn iterations kleiner als 1 ist, wird jede Operation wiederholt, bis sich das Ergebnis nicht mehr ändert. Es werden nur ganzzahlige Iterationszahlen akzeptiert.

outputndarray, optional

Array mit derselben Form wie input, in das die Ausgabe geschrieben wird. Standardmäßig wird ein neues Array erstellt.

originint oder Tupel von ints, optional

Platzierung des Filters, standardmäßig 0.

maskarray_like, optional

Wenn eine Maske angegeben wird, werden nur die Elemente mit einem True-Wert an der entsprechenden Maskenposition bei jeder Iteration modifiziert.

Hinzugefügt in Version 1.1.0.

border_valueint (wird zu 0 oder 1 konvertiert), optional

Wert am Rand im Ausgabearray.

Hinzugefügt in Version 1.1.0.

brute_forceboolean, optional

Speicherbedingung: Wenn False, werden nur die Pixel, deren Wert in der letzten Iteration geändert wurde, als Kandidaten für die Aktualisierung in der aktuellen Iteration verfolgt; wenn True, werden alle Pixel unabhängig davon, was in der vorherigen Iteration passiert ist, als Kandidaten für die Aktualisierung betrachtet. Standardmäßig False.

Hinzugefügt in Version 1.1.0.

axestuple von int oder None

Die Achsen, über die der Filter angewendet wird. Wenn None, wird input über alle Achsen gefiltert. Wenn ein origin-Tupel angegeben wird, muss seine Länge mit der Anzahl der Achsen übereinstimmen.

Rückgabe:
binary_openingndarray vom Typ bool

Öffnung des Inputs durch das Strukturelement.

Hinweise

Die *Öffnung* [1] ist eine mathematische morphologische Operation [2], die aus der Abfolge einer Erosion und einer Dilatation des Inputs mit demselben Strukturelement besteht. Die Öffnung entfernt daher Objekte, die kleiner als das Strukturelement sind.

Zusammen mit der *Schließung* (binary_closing) kann die Öffnung zur Rauschunterdrückung verwendet werden.

Referenzen

Beispiele

>>> from scipy import ndimage
>>> import numpy as np
>>> a = np.zeros((5,5), dtype=int)
>>> a[1:4, 1:4] = 1; a[4, 4] = 1
>>> a
array([[0, 0, 0, 0, 0],
       [0, 1, 1, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 0, 0, 0, 1]])
>>> # Opening removes small objects
>>> ndimage.binary_opening(a, structure=np.ones((3,3))).astype(int)
array([[0, 0, 0, 0, 0],
       [0, 1, 1, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 0, 0, 0, 0]])
>>> # Opening can also smooth corners
>>> ndimage.binary_opening(a).astype(int)
array([[0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 1, 1, 1, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0]])
>>> # Opening is the dilation of the erosion of the input
>>> ndimage.binary_erosion(a).astype(int)
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
>>> ndimage.binary_dilation(ndimage.binary_erosion(a)).astype(int)
array([[0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 1, 1, 1, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0]])