def test_segmentation(self): """Test automatic segmentation Expected: NotImplementedError """ scan = self.SCAN_TYPE(dicom_path=self.dicom_dirpath) tissue = FemoralCartilage() tissue.find_weights(SEGMENTATION_WEIGHTS_FOLDER) dims = scan.get_dimensions() input_shape = (dims[0], dims[1], 1) model = get_model(SEGMENTATION_MODEL, input_shape=input_shape, weights_path=tissue.weights_filepath) # automatic segmentation currently not implemented with self.assertRaises(NotImplementedError): scan.segment(model, tissue)
def test_t1_rho_map(self): scan = self.SCAN_TYPE(dicom_path=self.dicom_dirpath) scan.interregister(target_path=QDESS_ECHO1_PATH, target_mask_path=TARGET_MASK_PATH) # run analysis with femoral cartilage, without mask tissue = FemoralCartilage() map1 = scan.generate_t1_rho_map(tissue, TARGET_MASK_PATH) assert map1 is not None, "map should not be None" # add mask to femoral cartilage and run nr = NiftiReader() tissue.set_mask(nr.load(TARGET_MASK_PATH)) map2 = scan.generate_t1_rho_map(tissue) assert map2 is not None, "map should not be None" # map1 and map2 should be identical assert (map1.volumetric_map.is_identical(map2.volumetric_map))
def test_quant_val_fitting(self): """Test quantitative fitting (T1-rho, T2)""" scan = self.SCAN_TYPE(dicom_path=self.dicom_dirpath) actions = [scan.generate_t1_rho_map, scan.generate_t2_map] for action in actions: tissue = FemoralCartilage() map1 = action(tissue, MANUAL_SEGMENTATION_MASK_PATH) assert map1 is not None, "%s: map1 should not be None" % str( action) nr = NiftiReader() tissue.set_mask(nr.load(MANUAL_SEGMENTATION_MASK_PATH)) map2 = action(tissue) assert map2 is not None, "%s: map2 should not be None" % str( action) # map1 and map2 should be identical assert map1.volumetric_map.is_identical( map2.volumetric_map ), "%s: map1 and map2 should be identical" % str(action)
def get_vargin(self): vargin = dict() vargin[pipeline.TISSUES_KEY] = [FemoralCartilage()] vargin[pipeline.DICOM_KEY] = DESS_003_DICOM_PATH vargin[pipeline.SAVE_KEY] = DESS_003_DICOM_PATH vargin[pipeline.LOAD_KEY] = None vargin[pipeline.EXT_KEY] = 'dcm' vargin[pipeline.SEGMENTATION_MODEL_KEY] = 'unet2d' vargin[pipeline.SEGMENTATION_WEIGHTS_DIR_KEY] = './weights' vargin[pipeline.ACTION_KEY] = 'segment' vargin[pipeline.SEGMENTATION_BATCH_SIZE_KEY] = 32 vargin[pipeline.T2_KEY] = False return vargin
def get_vargin(self): vargin = dict() vargin[pipeline.TISSUES_KEY] = [FemoralCartilage()] vargin[pipeline.DICOM_KEY] = CUBEQUANT_DICOM_PATH vargin[pipeline.SAVE_KEY] = SAVE_PATH vargin[pipeline.EXT_KEY] = 'dcm' vargin[pipeline.T1_RHO_Key] = False vargin[pipeline.INTERREGISTERED_FILES_DIR_KEY] = None vargin[pipeline.ACTION_KEY] = None vargin[pipeline.TARGET_SCAN_KEY] = None vargin[pipeline.TARGET_MASK_KEY] = None vargin[pipeline.LOAD_KEY] = None return vargin
def test_loading_data(self): vargin = self.get_vargin() vargin[pipeline.T2_KEY] = True scan = pipeline.handle_dess(vargin) mask = scan.tissues[0].mask t2_map = scan.t2map pipeline.save_info(vargin[pipeline.SAVE_KEY], scan) fc = FemoralCartilage() fc.load_data(vargin[pipeline.SAVE_KEY]) mask2 = fc.__mask__ assert ((mask == mask2).all())
def test_femoral_cartilage(self): if not os.path.isdir(SAVE_PATH): self.segment_dess() vargin = { 'dicom': None, 'save': 'dicoms/healthy07/data', 'load': 'dicoms/healthy07/data', 'ext': 'dcm', 'gpu': None, 'scan': 'tissues', 'fc': True, 't2': 'dicoms/healthy07/data/dess_data/t2.h5', 't1_rho': None, 't2_star': None, 'tissues': [FemoralCartilage()] } tissues = pipeline.handle_tissues(vargin) for tissue in tissues: tissue.save_data(vargin[pipeline.SAVE_KEY])
mask_filepath_left = repo_folder + 'data/005/LEFT/fc/fc.nii.gz' t2_filepath_right = repo_folder + 'data/005/RIGHT/dess_data/t2.nii.gz' mask_filepath_right = repo_folder + 'data/005/RIGHT/fc/fc.nii.gz' sub_id = 7 scan_id = 1 #weights_dir = '/home/marco.b215/msk_pipeline_data/weights' ## inizializzare mappa t2 e femoral cartilage t2_par = QuantitativeValues(2) dess_l = Dess(dicom_path_l) fc_l = FemoralCartilage() fc_l.pid = sub_id fc_l.scan = scan_id dess_r = Dess(dicom_path_r) fc_r = FemoralCartilage() fc_r.pid = sub_id fc_r.scan = scan_id fc_r.medial_to_lateral = True dess_l.t2map = load_nifti(t2_filepath_left) dess_r.t2map = load_nifti(t2_filepath_right) fc_l.__mask__ = load_nifti(mask_filepath_left) fc_r.__mask__ = load_nifti(mask_filepath_right)
import argparse import os import time import defaults import file_constants as fc from models.get_model import SUPPORTED_MODELS from models.get_model import get_model from msk import knee from scan_sequences.cones import Cones from scan_sequences.cube_quant import CubeQuant from scan_sequences.dess import Dess from tissues.femoral_cartilage import FemoralCartilage from utils.quant_vals import QuantitativeValues as QV SUPPORTED_TISSUES = [FemoralCartilage()] SUPPORTED_QUANTITATIVE_VALUES = [QV.T2, QV.T1_RHO, QV.T2_STAR] DEBUG_KEY = 'debug' DICOM_KEY = 'dicom' MASK_KEY = 'mask' SAVE_KEY = 'save' LOAD_KEY = 'load' EXT_KEY = 'ext' GPU_KEY = 'gpu' SCAN_KEY = 'scan' DESS_SCAN_KEY = 'dess' CUBEQUANT_SCAN_KEYS = ['cubequant', 'cq'] CONES_KEY = 'cones'