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