def export_all_contours(contours, data_path, overlay_path, crop_size=100, num_classes=4, num_phases=5 ): print('\nProcessing {:d} images and labels ...\n'.format(len(contours))) images = np.zeros((len(contours), num_phases, crop_size, crop_size, 1)) masks = np.zeros((len(contours), 1, crop_size, crop_size, num_classes)) for idx, contour in enumerate(contours): img, mask = read_contour(contour, data_path, num_classes, 5, 20, 2) #draw_contour(contour, data_path, overlay_path) img = center_crop_3d(img, crop_size=crop_size) mask = center_crop_3d(mask, crop_size=crop_size) images[idx] = img masks[idx] = mask return images, masks
def export_all_contours(contours, data_path, overlay_path, crop_size, contour_type, num_classes=4, num_phases=5, phase_dilation=1, num_phases_in_cycle=30): print('\nProcessing {:d} images and labels ...\n'.format(len(contours))) if num_classes == 2: num_classes = 1 total_number = 0 for volume_ctr in contours: total_number += volume_ctr.total_number images = np.zeros((total_number, num_phases, crop_size, crop_size, 1)) masks = np.zeros((total_number, 1, crop_size, crop_size, num_classes)) idx = 0 for contour in contours: vol, vol_mask = read_contour(contour, data_path, num_phases, num_phases_in_cycle, phase_dilation, contour_type=contour_type, return_mask=True) #draw_contour(contour, data_path, overlay_path, type=contour_type) p, w, h, s, d = vol.shape for i in range(0, s): img = vol[:, :, :, i, :] mask = vol_mask[:, :, :, i, :] img = np.swapaxes(img, 1, 2) mask = np.swapaxes(mask, 1, 2) img = center_crop_3d(img, crop_size=crop_size) mask = center_crop_3d(mask, crop_size=crop_size) images[idx] = img masks[idx] = mask idx = idx + 1 return images, masks
def create_submission(cases, data_path, output_path, contour_type='i'): weight_t = 'model_logs/sunnybrook_a_unetres_inv_time.h5' weight_s = 'model_logs/sunnybrook_i_unetres_inv.h5' crop_size = 128 num_phases = 3 num_classes = 2 input_shape = (num_phases, crop_size, crop_size, 1) input_shape_s = (crop_size, crop_size, 1) model_s = unet_res_model_Inv(input_shape, num_classes, nb_filters=16, transfer=True, contour_type=contour_type, weights=weight_s) model_t = unet_res_model_time(input_shape, num_classes, nb_filters=16, n_phases=num_phases, transfer=True, contour_type=contour_type, weights=weight_t) for idx, case in enumerate(cases): print('\nPredict image sequence {:d}'.format(idx)) images, _, file_names = read_all_contour(case, data_path, num_classes) images_crop = center_crop_3d(images, crop_size=crop_size) pred_masks = model_s.predict(images_crop, batch_size=32, verbose=1) p, h, w, d = images.shape for idx in range(p): image = images[idx, ...] tmp = pred_masks[idx, :] out_file = file_names[idx] tmp = reshape(tmp, to_shape=(h, w, d)) tmp = np.where(tmp > 0.5, 255, 0).astype('uint8') tmp2, coords, hierarchy = cv2.findContours(tmp.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) if not coords: print('\nNo detection in case: {:s}; image: {:s}'.format( case, out_file)) coords = np.ones((1, 1, 1, 2), dtype='int') output_full_path = os.path.join(output_path, case) p = re.compile("dcm") out_file = p.sub('jpg', out_file) draw_image_overlay(image, out_file, output_full_path, contour_type, coords)