McCormik Validation#

Import Statement :#

First make sure you have installed pandas and ipyvolume. When using virtualenv and working in an activated virtual environment, the –sys-prefix option may be required to enable the extension and keep the environment isolated (i.e. jupyter nbextension enable –py widgetsnbextension –sys-prefix).

[1]:
%matplotlib inline

import matplotlib.pyplot as plt
import numpy
import pandas


import openalea.phenomenal.object as phm_obj
import openalea.phenomenal.mesh as phm_mesh
import openalea.phenomenal.segmentation as phm_seg
import openalea.phenomenal.display.notebook as phm_display_notebook
import openalea.phenomenal.data as phm_data
from openalea.phenotyping_data.fetch import fetch_all_data
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Cell In[1], line 11
      9 import openalea.phenomenal.mesh as phm_mesh
     10 import openalea.phenomenal.segmentation as phm_seg
---> 11 import openalea.phenomenal.display.notebook as phm_display_notebook
     12 import openalea.phenomenal.data as phm_data
     13 from openalea.phenotyping_data.fetch import fetch_all_data

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. Import McCormik data#

1.1 Select plant_number#

[2]:
data_dir = fetch_all_data("mccormick_plant_2") # only 1 or 2 available
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[2], line 1
----> 1 data_dir = fetch_all_data("mccormick_plant_2") # only 1 or 2 available

NameError: name 'fetch_all_data' is not defined
[3]:
vertices, faces, colors = phm_data.mesh_mccormik_plant(data_dir)
colors = colors[:, :3].astype(float) / 255.0
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[3], line 1
----> 1 vertices, faces, colors = phm_data.mesh_mccormik_plant(data_dir)
      2 colors = colors[:, :3].astype(float) / 255.0

NameError: name 'phm_data' is not defined

1.2 Viewing#

[4]:
phm_display_notebook.show_mesh(vertices, faces, color=colors)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[4], line 1
----> 1 phm_display_notebook.show_mesh(vertices, faces, color=colors)

NameError: name 'phm_display_notebook' is not defined

2. Phenomenal Measurements#

2.1 Voxelization#

[5]:
voxels_size = 4.0
voxels_position = phm_mesh.from_vertices_faces_to_voxels_position(
    vertices, faces, voxels_size=voxels_size
)
voxels_position = numpy.array(voxels_position)
voxel_grid = phm_obj.VoxelGrid(voxels_position, voxels_size)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[5], line 3
      1 voxels_size = 4.0
      2 voxels_position = phm_mesh.from_vertices_faces_to_voxels_position(
----> 3     vertices, faces, voxels_size=voxels_size
      4 )
      5 voxels_position = numpy.array(voxels_position)
      6 voxel_grid = phm_obj.VoxelGrid(voxels_position, voxels_size)

NameError: name 'vertices' is not defined

1.2 Viewing#

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

NameError: name 'phm_display_notebook' is not defined

2.3 Skeletonization#

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

NameError: name 'voxel_grid' is not defined
[8]:
# Display it
phm_display_notebook.show_skeleton(voxel_skeleton, with_voxel=True, size=0.4)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[8], line 2
      1 # Display it
----> 2 phm_display_notebook.show_skeleton(voxel_skeleton, with_voxel=True, size=0.4)

NameError: name 'phm_display_notebook' is not defined

2.4 Cereals Segmentation#

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

NameError: name 'voxel_skeleton' is not defined
[10]:
# Phenomenal measurements of each organs
pm_rows = [vo.info for vo in vmsi.voxel_organs] + [vmsi.info]
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[10], line 2
      1 # Phenomenal measurements of each organs
----> 2 pm_rows = [vo.info for vo in vmsi.voxel_organs] + [vmsi.info]

NameError: name 'vmsi' is not defined
[11]:
# Display it
phm_display_notebook.show_segmentation(vmsi, size=0.4)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[11], line 2
      1 # Display it
----> 2 phm_display_notebook.show_segmentation(vmsi, size=0.4)

NameError: name 'phm_display_notebook' is not defined

3. McCormik measurement#

[12]:
stem_color = (0, 1, 1)
index = numpy.apply_along_axis(numpy.array_equal, 1, colors, stem_color)
v = vertices[index]

mccm_rows = list()
row = dict()
row["mccm_label"] = "plant"
row["mccm_number_of_leaf"] = len(set(map(tuple, colors))) - 1
mccm_rows.append(row)

row = dict()
row["mccm_label"] = "stem"
row["mccm_length"] = numpy.max(v[:, 2]) - numpy.min(v[:, 0])
mccm_rows.append(row)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[12], line 2
      1 stem_color = (0, 1, 1)
----> 2 index = numpy.apply_along_axis(numpy.array_equal, 1, colors, stem_color)
      3 v = vertices[index]
      5 mccm_rows = list()

NameError: name 'colors' is not defined

4. Measures registration#

[13]:
def registration_row(pm_rows, sm_rows):
    def same_label(pm_row, sm_row):
        for label in ["stem", "plant"]:
            if pm_row["pm_label"] == label and sm_row["mccm_label"] == label:
                return True
        return False

    registered_row = list()
    for pm_row in pm_rows:
        for sm_row in sm_rows:
            if same_label(pm_row, sm_row):
                registered_row.append((pm_row, sm_row, 0))
                continue
            else:
                continue

    return registered_row
[14]:
labels = ["pm_label", "pm_length", "pm_number_of_leaf"]

rows = list()
for pm_row, mccm_row, d in registration_row(pm_rows, mccm_rows):
    for label in labels:
        if label in pm_row:
            mccm_row[label] = pm_row[label]
    rows.append(mccm_row)

df = pandas.DataFrame(rows)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[14], line 4
      1 labels = ["pm_label", "pm_length", "pm_number_of_leaf"]
      3 rows = list()
----> 4 for pm_row, mccm_row, d in registration_row(pm_rows, mccm_rows):
      5     for label in labels:
      6         if label in pm_row:

NameError: name 'pm_rows' is not defined

5. Measures Comparison#

[15]:
df_filtred_label = df[df["pm_label"] == "stem"]
plt.plot(df_filtred_label["mccm_length"], df_filtred_label["pm_length"], "g+")
df_filtred_label = df[df["pm_label"] == "plant"]
plt.plot(
    df_filtred_label["mccm_number_of_leaf"], df_filtred_label["pm_number_of_leaf"], "k+"
)

plt.xlabel("Phenomenal measurements")
plt.ylabel("McCormik measurements")

m = int(max([df[k].max() for k in ["pm_length", "mccm_length"]]))

plt.plot(range(m), range(m), "k--")
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[15], line 1
----> 1 df_filtred_label = df[df["pm_label"] == "stem"]
      2 plt.plot(df_filtred_label["mccm_length"], df_filtred_label["pm_length"], "g+")
      3 df_filtred_label = df[df["pm_label"] == "plant"]

NameError: name 'df' is not defined