示例#1
0
def segment_2d(model_fname, contrast_type, input_size, im_in):
    """Segment data using 2D convolutions."""
    seg_model = nn_architecture_seg(height=input_size[0],
                                    width=input_size[1],
                                    depth=2 if contrast_type != 't2' else 3,
                                    features=32,
                                    batchnorm=False,
                                    dropout=0.0)
    seg_model.load_weights(model_fname)

    seg_crop = zeros_like(im_in, dtype=np.uint8)

    data_norm = im_in.data
    x_cOm, y_cOm = None, None
    for zz in range(im_in.dim[2]):
        pred_seg = seg_model.predict(np.expand_dims(
            np.expand_dims(data_norm[:, :, zz], -1), 0),
                                     batch_size=BATCH_SIZE)[0, :, :, 0]
        pred_seg_th = (pred_seg > 0.5).astype(int)
        pred_seg_pp = post_processing_slice_wise(pred_seg_th, x_cOm, y_cOm)
        seg_crop.data[:, :, zz] = pred_seg_pp

        if 1 in pred_seg_pp:
            x_cOm, y_cOm = center_of_mass(pred_seg_pp)
            x_cOm, y_cOm = np.round(x_cOm), np.round(y_cOm)

    return seg_crop.data
示例#2
0
def segment_2d(model_fname, contrast_type, input_size, im_in):
    """Segment data using 2D convolutions."""
    seg_model = nn_architecture_seg(height=input_size[0],
                                    width=input_size[1],
                                    depth=2 if contrast_type != 't2' else 3,
                                    features=32,
                                    batchnorm=False,
                                    dropout=0.0)
    seg_model.load_weights(model_fname)

    seg_crop = zeros_like(im_in, dtype=np.uint8)

    data_norm = im_in.data
    x_cOm, y_cOm = None, None
    for zz in range(im_in.dim[2]):
        pred_seg = seg_model.predict(np.expand_dims(np.expand_dims(data_norm[:, :, zz], -1), 0),
                                     batch_size=BATCH_SIZE)[0, :, :, 0]
        pred_seg_th = (pred_seg > 0.5).astype(int)
        pred_seg_pp = post_processing_slice_wise(pred_seg_th, x_cOm, y_cOm)
        seg_crop.data[:, :, zz] = pred_seg_pp

        if 1 in pred_seg_pp:
            x_cOm, y_cOm = center_of_mass(pred_seg_pp)
            x_cOm, y_cOm = np.round(x_cOm), np.round(y_cOm)

    return seg_crop.data
def segment_2d(model_fname, contrast_type, input_size, fname_in, fname_out):
    """Segment data using 2D convolutions."""
    seg_model = nn_architecture_seg(height=input_size[0],
                                    width=input_size[1],
                                    depth=2 if contrast_type != 't2' else 3,
                                    features=32,
                                    batchnorm=False,
                                    dropout=0.0)
    seg_model.load_weights(model_fname)

    image_normalized = Image(fname_in)
    seg_crop = image_normalized.copy()
    seg_crop.data *= 0
    seg_crop.changeType('uint8')

    data_norm = image_normalized.data
    x_cOm, y_cOm = None, None
    # for zz in list(reversed(range(image_normalized.dim[2]))):
    for zz in range(image_normalized.dim[2]):
        pred_seg = seg_model.predict(
            np.expand_dims(np.expand_dims(data_norm[:, :, zz], -1),
                           0))[0, :, :, 0]
        pred_seg_th = (pred_seg > 0.5).astype(int)

        pred_seg_pp = post_processing_slice_wise(pred_seg_th, x_cOm, y_cOm)
        seg_crop.data[:, :, zz] = pred_seg_pp

        if 1 in pred_seg_pp:
            x_cOm, y_cOm = center_of_mass(pred_seg_pp)
            x_cOm, y_cOm = np.round(x_cOm), np.round(y_cOm)
    seg_crop.setFileName(fname_out)
    seg_crop.save()

    return seg_crop.data
示例#4
0
    parser.add_argument("binary_seg")
    args = parser.parse_args()

    input_dir = args.input_dir
    output_dir = args.output_dir
    seg_model_fname = args.seg_model_fname
    contrast_type = args.contrast_type
    binary_seg = True if args.binary_seg == 'True' else False

    # build model
    BATCH_SIZE = 4
    input_size = (64, 64)

    seg_model = nn_architecture_seg(height=input_size[0],
                                    width=input_size[1],
                                    depth=2,
                                    features=32,
                                    batchnorm=True,
                                    dropout=0.0)
    seg_model.load_weights(seg_model_fname)

    # segment image
    for name in os.listdir(input_dir):
        if not '.DS_Store' in name:
            fname_image = input_dir + name
            parent, stem, ext = sct.extract_fname(fname_image)

            # import image
            image = Image(fname_image)
            image.save(output_dir + stem + '_im' + ext)

            # crop image