[PYTHON] Méthode de division de la crête d'eau dans une image 3D à l'aide de ImageJ

Contexte

Ces dernières années, il est devenu plus facile d'acquérir des images tridimensionnelles, mais les bibliothèques de traitement d'image utilisées pour les images tridimensionnelles ne sont pas substantielles. Cette fois, je voulais utiliser une méthode de division de région appelée Watershed pour les images 3D, alors je l'ai recherchée et j'ai trouvé qu'une fonction permettant d'effectuer des opérations de morphologie 3D était implémentée dans le plug-in du logiciel de traitement d'image Fiji (Fiji est juste imageJ). Alors j'ai essayé. De ce qui suit, nous avons résumé la méthode d'introduction et comment utiliser la fonction.

environnement

Introduction au plug-in

Téléchargez MorphoLibJ 1.3.1.jar depuis https://github.com/ijpb/MorphoLibJ/releases. Pour installer avec GUI, ouvrez Fidji et faites glisser et déposez le fichier téléchargé. Si vous installez à partir du terminal, vous pouvez mettre MorphoLibJ_-1.3.1.jar sous /Applications/Fiji.app/plugins/. Voir ci-dessous pour la documentation de ce plug-in. http://imagej.net/MorphoLibJ#Watershed_segmentation

une fonction

Tout d'abord, j'ai créé l'image suivante sur python, qui est utilisée comme exemple d'utilisation de la fonction.

import numpy as np
import skimage.io as skimage
img = np.zeros((100, 100, 100))
for i in range(100):
    for j in range(100):
       for k in range(100):
          if (i - 40)**2 + (j - 40)**2 + (k - 40)**2 < 400:
             img[i][j][k] = 255
          if (i - 60)**2 + (j - 60)**2 + (k - 60)**2 < 900:
             img[i][j][k] = 255
skimage.imsave('example.tif', img.astype(uint8))

example.jpg

À partir de là, nous résumerons des exemples d'utilisation de fonctions à l'aide de cette image. Visualize utilise également la visionneuse 3D du plugin.

Distance Tranceform Watershed 3D

Plugin > MorphoLibJ > Binary Images > Distance Transform Watershed 3D

watershedGUI.jpg

Cette fois, le résultat de l'exécution avec l'option spécifiée dans la figure ci-dessus est indiqué ci-dessous.

watershed.jpg

Les valeurs d'image sont étiquetées pour chaque objet. Cependant, dans cet état, il est difficile de voir la différence même si elle est visualisée, donc la fonction qui effectue l'étiquetage couleur sera décrite ci-après.

Labels to RGB

Plugin > MorphoLibJ > Label images > Labels to RGB

labelingGUI,jpg.png

Personnellement, il est bon que la carte des couleurs ait des cornes dorées. Le résultat de l'exécution avec l'option spécifiée dans la figure ci-dessus est indiqué ci-dessous.

labeling.jpg

On peut voir que lorsque deux objets sont fusionnés à l'origine, la zone est divisée par bassin versant.

Considération

J'ai essayé de vérifier quantitativement la pertinence des objets divisés.

objet le volume[voxel] 元のle volume[voxel] Pourcentage[%]
vert 31922 33493 95.31
Bleu 104973 113040 92.86

A ce moment, le volume d'origine représente une valeur obtenue en calculant le volume à partir du rayon déterminé lors de la création de l'image. Le ratio a été calculé à partir de $ \ frac {volume} {volume original} \ fois 100 $.

De ce résultat, on peut voir qu'il n'est divisé en aucun des deux objets. Transformation de la distance du bassin versant En 3D, la distance est le paramètre qui affecte le plus la précision de la division, mais il peut être préférable d'utiliser le rapport obtenu ici comme l'un des indices lors de l'optimisation de ce paramètre.

Recommended Posts

Méthode de division de la crête d'eau dans une image 3D à l'aide de ImageJ
Charger des images à partir d'une URL à l'aide de Pillow dans Python 3
Essayez d'utiliser une classe orientée objet dans R (méthode R6)
Déterminer le seuil à l'aide de la méthode P-tile en python
Télécharger des images à l'aide de demandes
Afficher les images avec Matplotlib
Méthode Simplex (méthode unique) en Python
Graphique 2D dans matplotlib
Méthode privée en python
Collectez des images à l'aide d'icrawler
Appel de méthode avec __getattr__
[Blender Python] Afficher les images sur la vue 3D en utilisant OpenGL (bgl)