Example #1
0
def get_image_views(bin_images, calibrations, with_ref_view=True):

    refs_angle_list = list()
    if with_ref_view:
        refs_angle_list = [routine_select_ref_angle(bin_images["side"])]

    image_views = list()
    for id_camera in bin_images:
        for angle in bin_images[id_camera]:
            projection = calibrations[id_camera].get_projection(angle)

            image_ref = None
            if id_camera == "side" and angle in refs_angle_list:
                image_ref = bin_images[id_camera][angle]

            inclusive = False
            if id_camera == "top":
                inclusive = True

            image_views.append(
                phm_obj.ImageView(bin_images[id_camera][angle],
                                  projection,
                                  inclusive=inclusive,
                                  image_ref=image_ref))

    return image_views
def get_image_views_cube_projected(with_ref=False):
    plant_number = 1
    # ==========================================================================
    # Create object
    voxels_size = 10
    voxels_position = phm_data.build_cube(cube_size=10,
                                          voxels_size=voxels_size,
                                          voxels_position=(0, 0, 0))

    assert len(voxels_position) == 1000
    volume = len(voxels_position) * (10**3)
    assert volume == 1000000

    # ==========================================================================
    calibrations = phm_data.calibrations(plant_number=plant_number)

    shape_image = (2454, 2056)
    image_views = list()
    for angle in range(0, 360, 30):
        projection = calibrations["side"].get_projection(angle)

        img = phm_mvr.project_voxel_centers_on_image(voxels_position,
                                                     voxels_size, shape_image,
                                                     projection)

        image_ref = None
        if with_ref:
            if angle == 0:
                img[:] = 0
            if angle == 90:
                image_ref = img

        iv = phm_obj.ImageView(img,
                               projection,
                               inclusive=False,
                               image_ref=image_ref)
        image_views.append(iv)

    return image_views
Example #3
0
def test_reconstruction_3d_1():

    # Load images binarize
    bin_images = phm_data.bin_images(plant_1_dir)
    calibrations = phm_data.calibrations(plant_1_dir)

    image_views = list()
    for id_camera in bin_images:
        for angle in bin_images[id_camera]:
            projection = calibrations[id_camera].get_projection(angle)
            iv = phm_obj.ImageView(bin_images[id_camera][angle],
                                   projection,
                                   inclusive=False,
                                   image_ref=None)
            image_views.append(iv)

    voxels_size = 64
    error_tolerance = 0
    vg = phm_mvr.reconstruction_3d(image_views,
                                   voxels_size=voxels_size,
                                   error_tolerance=error_tolerance)

    assert len(vg.voxels_position) > 0
Example #4
0
image_views = list()
for id_camera in bin_images:
    for angle in bin_images[id_camera]:
        projection = calibrations[id_camera].get_projection(angle)

        image_ref = None
        if id_camera == "side" and angle in refs_angle_list:
            image_ref = bin_images[id_camera][angle]

        inclusive = False
        if id_camera == "top":
            inclusive = True

        image_views.append(
            phm_obj.ImageView(bin_images[id_camera][angle],
                              projection,
                              inclusive=inclusive,
                              image_ref=image_ref))

# Do multi-view reconstruction
voxels_size = 16  # mm
error_tolerance = 0
voxel_grid = phm_mvr.reconstruction_3d(image_views,
                                       voxels_size=voxels_size,
                                       error_tolerance=error_tolerance)

# Save / Load voxel grid
voxel_tar_file = '/home/ubuntu/multiviewReconstruction/plant_{}_size_{}.npz'.format(
    plant_number, voxels_size)
voxel_grid.write(voxel_tar_file)

print(voxel_tar_file)
def segmentation(row):

    bin_images = dc.get_bin_images(row)
    calibrations = dc.get_calibrations(row)

    refs_angle_list = [_routine_select_ref_angle(bin_images["side"])]

    image_views = list()
    for id_camera in bin_images:
        for angle in bin_images[id_camera]:
            projection = calibrations[id_camera].get_projection(angle)

            image_ref = None
            if id_camera == "side" and angle in refs_angle_list:
                image_ref = bin_images[id_camera][angle]

            inclusive = False
            if id_camera == "top":
                inclusive = True

            image_views.append(
                phm_obj.ImageView(bin_images[id_camera][angle],
                                  projection,
                                  inclusive=inclusive,
                                  image_ref=image_ref))

    # ### 2.2 Do multi-view reconstruction
    voxels_size = 16  # mm
    error_tolerance = 0
    voxel_grid = phm_mvr.reconstruction_3d(image_views,
                                           voxels_size=voxels_size,
                                           error_tolerance=error_tolerance)

    #phm_display_notebook.show_voxel_grid(voxel_grid, size=1)

    # ## 4. Skeletonization
    #
    # ### 4.1 Compute Graph and the skeleton
    # Compute the skeleton of the plant voxelgrid

    # In[12]:

    graph = phm_seg.graph_from_voxel_grid(voxel_grid, connect_all_point=True)
    voxel_skeleton = phm_seg.skeletonize(voxel_grid, graph)

    # ### 2.3 Clean skeleton (filter small elements)

    # In[14]:

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

    #phm_display_notebook.show_skeleton(voxel_skeleton_denoised, size=1)

    # ## 5. Maize Segmentation
    #
    # ### 5.1 Process
    #
    # Voxel skeleton are segmented in several label "stem", "mature_leaf", "growing_leaf" and "unknow"

    # In[16]:

    vms = phm_seg.maize_segmentation(voxel_skeleton_denoised, graph)
    vmsi = phm_seg.maize_analysis(vms)
    return vmsi