Пример #1
0
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
Пример #2
0
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)