Segmentation 3D#

0. Imports#

[1]:
import openalea.phenomenal.data as phm_data
import openalea.phenomenal.display.notebook as phm_display_notebook
import openalea.phenomenal.object as phm_obj
import openalea.phenomenal.segmentation as phm_seg
from openalea.phenotyping_data.fetch import fetch_all_data
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Cell In[1], line 2
      1 import openalea.phenomenal.data as phm_data
----> 2 import openalea.phenomenal.display.notebook as phm_display_notebook
      3 import openalea.phenomenal.object as phm_obj
      4 import openalea.phenomenal.segmentation as phm_seg

File ~/checkouts/readthedocs.org/user_builds/phenomenal/checkouts/v1.9.9/src/openalea/phenomenal/display/notebook.py:13
     10 from __future__ import division, print_function, absolute_import
     12 import numpy
---> 13 import ipyvolume
     15 from ._order_color_map import order_color_map
     16 # ==============================================================================

ModuleNotFoundError: No module named 'ipyvolume'

1. Prerequisites#

1.1 Load cloud point of voxel centers#

[2]:
plant_number = 2
voxels_size = 16
data_dir = fetch_all_data(f"plant_{plant_number}")
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[2], line 3
      1 plant_number = 2
      2 voxels_size = 16
----> 3 data_dir = fetch_all_data(f"plant_{plant_number}")

NameError: name 'fetch_all_data' is not defined
[3]:
bin_images = phm_data.bin_images(data_dir)
calibrations = phm_data.calibrations(data_dir)
voxel_grid = phm_data.voxel_grid(data_dir, voxels_size=voxels_size)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[3], line 1
----> 1 bin_images = phm_data.bin_images(data_dir)
      2 calibrations = phm_data.calibrations(data_dir)
      3 voxel_grid = phm_data.voxel_grid(data_dir, voxels_size=voxels_size)

NameError: name 'data_dir' is not defined

1.2 Display voxel grid#

[4]:
phm_display_notebook.show_voxel_grid(voxel_grid, size=1)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[4], line 1
----> 1 phm_display_notebook.show_voxel_grid(voxel_grid, size=1)

NameError: name 'phm_display_notebook' is not defined

2. Skeletonization#

2.1 Compute Graph and the skeleton#

Compute the skeleton of the plant voxelgrid

[5]:
graph = phm_seg.graph_from_voxel_grid(voxel_grid, connect_all_point=True)
voxel_skeleton = phm_seg.skeletonize(voxel_grid, graph)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[5], line 1
----> 1 graph = phm_seg.graph_from_voxel_grid(voxel_grid, connect_all_point=True)
      2 voxel_skeleton = phm_seg.skeletonize(voxel_grid, graph)

NameError: name 'phm_seg' is not defined

2.2 Display it#

[6]:
phm_display_notebook.show_skeleton(voxel_skeleton, with_voxel=True, size=1)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[6], line 1
----> 1 phm_display_notebook.show_skeleton(voxel_skeleton, with_voxel=True, size=1)

NameError: name 'phm_display_notebook' is not defined

2.3 Remove not enouth visible segment#

[7]:
# Select images
image_projection = list()
for angle in bin_images["side"]:
    projection = calibrations["side"].get_projection(angle)
    image_projection.append((bin_images["side"][angle], projection))

voxel_skeleton_denoised = phm_seg.segment_reduction(
    voxel_skeleton, image_projection, required_visible=5, nb_min_pixel=400
)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[7], line 3
      1 # Select images
      2 image_projection = list()
----> 3 for angle in bin_images["side"]:
      4     projection = calibrations["side"].get_projection(angle)
      5     image_projection.append((bin_images["side"][angle], projection))

NameError: name 'bin_images' is not defined

2.4 Display it#

[8]:
phm_display_notebook.show_skeleton(voxel_skeleton_denoised, size=1)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[8], line 1
----> 1 phm_display_notebook.show_skeleton(voxel_skeleton_denoised, size=1)

NameError: name 'phm_display_notebook' is not defined

3. Maize Segmentation#

3.1 Process#

Voxel skeleton are segmented in several label “stem”, “mature_leaf”, “growing_leaf” and “unknow”

[9]:
vms = phm_seg.maize_segmentation(voxel_skeleton_denoised, graph)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[9], line 1
----> 1 vms = phm_seg.maize_segmentation(voxel_skeleton_denoised, graph)

NameError: name 'phm_seg' is not defined

3.2 Write / Read#

[10]:
# Write
vms.write_to_json_gz("voxel_maize_segmentation.json")
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[10], line 2
      1 # Write
----> 2 vms.write_to_json_gz("voxel_maize_segmentation.json")

NameError: name 'vms' is not defined
[11]:
# Load
vms = phm_obj.VoxelSegmentation.read_from_json_gz("voxel_maize_segmentation.json")
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[11], line 2
      1 # Load
----> 2 vms = phm_obj.VoxelSegmentation.read_from_json_gz("voxel_maize_segmentation.json")

NameError: name 'phm_obj' is not defined

3.3 Display#

[12]:
phm_display_notebook.show_segmentation(vms, size=1)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[12], line 1
----> 1 phm_display_notebook.show_segmentation(vms, size=1)

NameError: name 'phm_display_notebook' is not defined

4. Maize Analysis#

4.1 Process#

[13]:
vmsi = phm_seg.maize_analysis(vms)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[13], line 1
----> 1 vmsi = phm_seg.maize_analysis(vms)

NameError: name 'phm_seg' is not defined

4.2 How to save analysis result :#

[14]:
vmsi.write_to_json_gz("voxel_maize_segmentation_info.json.gz")
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[14], line 1
----> 1 vmsi.write_to_json_gz("voxel_maize_segmentation_info.json.gz")

NameError: name 'vmsi' is not defined
[15]:
vmsi = phm_obj.VoxelSegmentation.read_from_json_gz(
    "voxel_maize_segmentation_info.json.gz"
)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[15], line 1
----> 1 vmsi = phm_obj.VoxelSegmentation.read_from_json_gz(
      2     "voxel_maize_segmentation_info.json.gz"
      3 )

NameError: name 'phm_obj' is not defined

4.3 Visualize results:#

[16]:
phm_display_notebook.show_segmentation(vmsi, size=1)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[16], line 1
----> 1 phm_display_notebook.show_segmentation(vmsi, size=1)

NameError: name 'phm_display_notebook' is not defined