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 |
|