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