Trennung sich berührender Objekte
Ein häufiger Anwendungsfall für den Watershed-Algorithmus ist die Trennung sich berührender Objekte. In diesem Notebook werden wir Objekte in Binärbildern trennen, die eine rundliche Form haben und sich gegenseitig berühren.
Ausgangspunkt dafür ist ein Binärbild, das beispielsweise durch Schwellenwertbildung erstellt wurde.
|
shape | (70, 70) |
dtype | uint8 |
size | 4.8 kB |
min | 8 | max | 255 |
|
<__array_function__ internals>:180: RuntimeWarning: Converting input from bool to <class 'numpy.uint8'> for compatibility.
|
nsbatwm made image
shape | (70, 70) |
dtype | bool |
size | 4.8 kB |
min | False | max | True |
|
Wir können dann die sich berührenden Objekte trennen, indem wir nur das Binärbild berücksichtigen. Der zugrunde liegende Algorithmus zielt darauf ab, ähnliche Ergebnisse wie ImageJs binärer Watershed-Algorithmus zu produzieren, und die Implementierung hier funktioniert auch in 3D.
|
nsbatwm made image
shape | (70, 70) |
dtype | bool |
size | 4.8 kB |
min | False | max | True |
|
Die Funktion split_touching_objects
hat auch einen Parameter sigma
, der es ermöglicht zu steuern, wie aggressiv Objekte getrennt werden sollen. Um mehr Trennungen vorzunehmen, geben Sie eine kleinere Zahl als 3.5 ein, was der Standardwert ist.
|
nsbatwm made image
shape | (70, 70) |
dtype | bool |
size | 4.8 kB |
min | False | max | True |
|
Es ist auch möglich, ein Labelbild als Ergebnis zu erhalten. Beachten Sie, dass in diesem Fall die schwarze Linie/Lücke zwischen den Objekten nicht vorhanden sein wird.
|
n-sitk made image
shape | (70, 70) |
dtype | uint32 |
size | 19.1 kB |
min | 0 | max | 13 |
|