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