Example #1
0
 def writeStatsToYAML(self, filename='hist_stats.yaml'):
     logger.debug('writeStatsToYAML')
     
     gr = self.stats['Graph']
     for i in gr:
         logger.info('Processing edge num '+str(i))
         try:
             gr[i]['lengthEstimationPoly'] = float(gr[i]['lengthEstimationPoly'])
         except:
             logger.warning('lengthEstimationPoly not a number')
             gr[i]['lengthEstimationPoly'] = None
             
         try:
             gr[i]['lengthEstimationSpline'] = float(gr[i]['lengthEstimationSpline'])
         except:
             logger.warning('lengthEstimationSpline not a number')
             gr[i]['lengthEstimationSpline'] = None
         
         try:
             self.stats['lengthEstimation'] = float(gr[i]['lengthEstimation'])
         except:
             logger.warning('lengthEstimation not a number')
             gr[i]['lengthEstimation'] = None
         
         try:
             gr[i]['lengthEstimationPixel'] = float(gr[i]['lengthEstimationPixel'])
         except:
             logger.warning('lengthEstimationPixel not a number')
             gr[i]['lengthEstimationPixel'] = None
     self.stats['Graph'] = gr
     
     misc.obj_to_file(self.stats, filename=filename, filetype='yaml')
Example #2
0
def update_by_plan(filename="~/lisa_data/.update_plan.yaml", update_periode_days=10):
    """
    :return: True or False
    """

    filename = op.expanduser(filename)

    retval = False
    now = datetime.datetime.now() 
    try:
        # this import is necessary here. This module requires scipy and it is 
        # not installed yet
        import misc
        data = misc.obj_from_file(filename)

        string_date = data['update_datetime']
        dt = datetime.datetime.strptime(string_date, "%Y-%m-%d %H:%M:%S.%f")
        dt_delta = datetime.timedelta(days=update_periode_days)
        if now > (dt + dt_delta):
            retval = True
            data['update_datetime'] = str(now)
            misc.obj_to_file(data, filename)

        # data['update_datetime'] = 
    except:
        retval = True
        data = {}
        data['update_datetime'] = str(now)
        import lisa_data
        lisa_data.create_lisa_data_dir_tree()
        misc.obj_to_file(data, filename)

    return retval
Example #3
0
def get_subdirs(dirpath, wildcard='*', outputfile='experiment_data.yaml'):

    dirlist = []
    if os.path.exists(dirpath):
        logger.info('dirpath = ' + dirpath)
        # print completedirpath
    else:
        logger.error('Wrong path: ' + dirpath)
        raise Exception('Wrong path : ' + dirpath)

    dirpath = os.path.abspath(dirpath)
    # print 'copmpletedirpath = ', completedirpath
    # import pdb; pdb.set_trace()
    dirlist = {
        o: {'abspath': os.path.abspath(os.path.join(dirpath, o))}
        for o in os.listdir(dirpath) if os.path.isdir(
            os.path.join(dirpath, o))
    }
    # import pdb; pdb.set_trace()

    # print [o for o in os.listdir(dirpath) if
    # os.path.isdir(os.path.abspath(o))]

    #    dirlist.append(infile)
    # print "current file is: " + infile
    misc.obj_to_file(dirlist, 'experiment_data.yaml', 'yaml')
    return dirlist
Example #4
0
    def test_create_iparams(self):
        """
        Interactivity is stored to file
        """
        if self.verbose:
            print "test_create_iparams"
        import misc
        dcmdir = os.path.join(path_to_script,'./../sample_data/jatra_5mm')

        segparams = {'pairwiseAlpha':20, 'use_boundary_penalties':False,'boundary_penalties_sigma':200}
        #oseg = organ_segmentation.OrganSegmentation(dcmdir, working_voxelsize_mm = 4)
        oseg = organ_segmentation.OrganSegmentation(dcmdir, working_voxelsize_mm = 4, segparams=segparams, manualroi=False)
        #oseg.add_seeds_mm([120,160],[150,120],[70], label=1, radius=20)
        oseg.add_seeds_mm([120,160],[150,80],[85], label=1, radius=20)
        oseg.add_seeds_mm([170,220,250,100],[250,300,200,350],[85], label=2, radius=20)
        oseg.add_seeds_mm([170],[240],[70], label=2, radius=20)

        #print "test_ipars"
        #oseg.interactivity()
        oseg.ninteractivity()

        volume = oseg.get_segmented_volume_size_mm3()
        #print 'vol %.3g ' %(volume)

        misc.obj_to_file(oseg.get_iparams(),'iparams.pkl',filetype='pickle')

        self.assertGreater(volume,1000000)
def sample_input_data():
    inputdata = {'basedir': '/home/mjirik/data/medical/',  # noqa
                 'data': [
                     {'sliverseg': 'data_orig/sliver07/training-part1/liver-seg001.mhd',
                      'ourseg': 'data_processed/organ_small-liver-orig001.mhd.pkl'},  # noqa
                     {'sliverseg': 'data_orig/sliver07/training-part1/liver-seg002.mhd',
                      'ourseg': 'data_processed/organ_small-liver-orig002.mhd.pkl'},  # noqa
                     {'sliverseg': 'data_orig/sliver07/training-part1/liver-seg003.mhd',
                      'ourseg': 'data_processed/organ_small-liver-orig003.mhd.pkl'},  # noqa
                     {'sliverseg': 'data_orig/sliver07/training-part1/liver-seg004.mhd',
                      'ourseg': 'data_processed/organ_small-liver-orig004.mhd.pkl'},  # noqa
                     {'sliverseg': 'data_orig/sliver07/training-part1/liver-seg005.mhd',
                      'ourseg': 'data_processed/organ_small-liver-orig005.mhd.pkl'},  # noqa
                     {'sliverseg': 'data_orig/sliver07/training-part2/liver-seg006.mhd',
                      'ourseg': 'data_processed/organ_small-liver-orig006.mhd.pkl'},  # noqa
                     {'sliverseg': 'data_orig/sliver07/training-part2/liver-seg007.mhd',
                      'ourseg': 'data_processed/organ_small-liver-orig007.mhd.pkl'},  # noqa
                     {'sliverseg': 'data_orig/sliver07/training-part2/liver-seg008.mhd',
                      'ourseg': 'data_processed/organ_small-liver-orig008.mhd.pkl'},  # noqa
                     {'sliverseg': 'data_orig/sliver07/training-part2/liver-seg009.mhd',
                      'ourseg': 'data_processed/organ_small-liver-orig009.mhd.pkl'},  # noqa
                 ]
                 }

    sample_data_file = os.path.join(path_to_script,
                                    "20130812_liver_volumetry_sample.yaml")
    # print sample_data_file, path_to_script
    misc.obj_to_file(inputdata, sample_data_file, filetype='yaml')
Example #6
0
    def save_outputs(self, filepath=None):

        # savestring_qt, ok = QInputDialog.getText(
        #     None,
        #     "Save",
        #     'Save output data? Yes/No/All with input data (y/n/a):',
        #     text="a"
        #     )

        # savestring = str(savestring_qt)

        #    if savestring in ['Y', 'y', 'a', 'A']:

        data = self.export()
        data['version'] = self.version  # qmisc.getVersionString()
        data['experiment_caption'] = self.experiment_caption
        data['lisa_operator_identifier'] = self.lisa_operator_identifier
#       data['organ_interactivity_counter'] = self.organ_interactivity_counter
# save renamed file too
#         pth, filename = op.split(op.normpath(self.datapath))
#         filename += "-" + self.experiment_caption
# #        if savestring in ['a', 'A']:
#         filepath = 'org-' + filename + '.' + self.save_filetype
#         # rint filepath
#         # rint 'op ', op
        odp = self.output_datapath
        if not op.exists(odp):
            os.makedirs(odp)

        if filepath is None:
            filepath = self.get_standard_ouptut_filename()
        misc.obj_to_file(data, filepath, filetype=self.save_filetype)
Example #7
0
def main():

    logger = logging.getLogger()

    logger.setLevel(logging.WARNING)
    ch = logging.StreamHandler()
    logger.addHandler(ch)

    #logger.debug('input params')

    # input parser
    parser = argparse.ArgumentParser(
            description='Module for segmentation of simple anatomical structures')
    parser.add_argument('-i', '--inputfile',
            default='organ.pkl',
            help='path to data dir')

    args = parser.parse_args()

    data = misc.obj_from_file(args.inputfile, filetype = 'pickle')
    data3d = data['data3d']
    voxelsize_mm = data['voxelsize_mm']

    ss = SimpleSegmentation()
    simple_seg = ss.simple_segmentation(data3d, voxelsize_mm)

    #visualization
    pyed = sed3.sed3(data['data3d'], seeds=simple_seg)
    pyed.show()

    # save
    savestring = raw_input('Save output data? (y/n): ')
    if savestring in ['Y', 'y']:
        misc.obj_to_file(data, "resection.pkl", filetype='pickle')
Example #8
0
    def save(self, outputfile, filetype='pklz'):
        data = {
            'data3d': self.data3d,
            'voxelsize_mm': self.voxelsize_mm
        }

        misc.obj_to_file(data, outputfile, filetype=filetype)
        print "saved"
Example #9
0
def main():

    #logger = logging.getLogger(__name__)
    logger = logging.getLogger()

    logger.setLevel(logging.WARNING)
    ch = logging.StreamHandler()
    logger.addHandler(ch)

    #logger.debug('input params')

    parser = argparse.ArgumentParser(
        description='Compute features on liver and other tissue.')
    parser.add_argument('-si', '--sampleInput', action='store_true',
                        help='generate sample intput data', default=False)
    parser.add_argument('-v', '--visualization',  action='store_true',
                        help='Turn on visualization', default=False)
    parser.add_argument('-fc', '--features_classifs',  action='store_true',
                        help='Read features and classifs list from file',
                        default=False)
    parser.add_argument('-i', '--input', help='input yaml file',
                        default="20130919_liver_statistics.yaml")
    parser.add_argument('-o', '--output', help='output file',
                        default="20130919_liver_statistics_results.pkl")
    parser.add_argument('-t', '--train', help='Training', default=False,
                        action='store_true'
                        )
    args = parser.parse_args()

    if args.sampleInput:
        sample_input_data()
    # input parser
    #path_to_yaml = os.path.join(path_to_script, args.input)
    path_to_yaml = args.input

    #write_csv(fvall)
    list_of_feature_fcn = [feat_hist]
    from sklearn import svm
    from sklearn.naive_bayes import GaussianNB

    list_of_classifiers = [svm.SVC, GaussianNB]
    tile_shape = [10, 100, 100]

    if args.features_classifs:
        import features_classifs
        featrs_plus_classifs = features_classifs.fc
    else:
        featrs_plus_classifs = make_product_list(list_of_feature_fcn,
                                                 list_of_classifiers)

    result = experiment(path_to_yaml, featrs_plus_classifs,
                        tile_shape=tile_shape,
                        visualization=args.visualization, train=args.train)

# Ukládání výsledku do souboru
    output_file = os.path.join(path_to_script, args.output)
    misc.obj_to_file(result, output_file, filetype='pickle')
Example #10
0
def delete_config_records(filename, records_to_save=[]):
    """
    All records of config file are deleted except records_to_save.
    """
    if os.path.isfile(filename):
        cfg = misc.obj_from_file(filename, filetype='yaml')
        new_cfg = subdict(cfg, records_to_save)
        print cfg
        misc.obj_to_file(new_cfg, "test_" + filename , filetype='yaml')
Example #11
0
def update_config_records(filename, new_cfg):
    """
    All records of config file are updated exept records_to_save.
    """
    if os.path.isfile(filename):
        cfg = misc.obj_from_file(filename, filetype='yaml')
        cfg.update(new_cfg)
        print cfg
        misc.obj_to_file(new_cfg, "test_" + filename , filetype='yaml')
Example #12
0
def generate_input_yaml(sliver_dir, pklz_dir,
                        sliver_ext='*seg0*.mhd', pklz_ext='*0*.pklz',
                        yaml_filename=None,
                        return_dir_lists=False
                        ):
    """
    Function pair files from different directory by numer in format g0XX.
    It is ok for seg001 and orig001 too.
    If there is given some yaml_filename, it is created.
    """
    import glob
    import re

    onlyfiles1 = glob.glob(os.path.join(sliver_dir, sliver_ext))
    onlyfiles2 = glob.glob(os.path.join(pklz_dir, pklz_ext))
    onlyfiles1.sort()
    onlyfiles2.sort()
    logger.debug('sliver files \n' + str(onlyfiles1))
    logger.debug('pklz files \n' + str(onlyfiles2))

    data = []
    for flns in onlyfiles1:
        base, flnsh = os.path.split(os.path.normpath(flns))
        pattern = re.search('(g0[0-9]{2})', flnsh)
        if pattern:
            pattern = pattern.group(1)
        logger.debug('pattern1 ' + pattern)

        for flnp in onlyfiles2:
            base, flnph = os.path.split(os.path.normpath(flnp))
            pt = re.match('.*' + pattern + '.*', flnph)
            if pt:
                data.append({
                    'sliverseg': flns,
                    'ourseg': flnp
                })

    inputdata = {
        'basedir': '',
        'data': data
    }

    retval = []

    if yaml_filename is None:
        retval.append(inputdata)
    else:
        misc.obj_to_file(inputdata, yaml_filename, filetype='yaml')

    if return_dir_lists:
        retval.append(onlyfiles1)
        retval.append(onlyfiles2)

    if len(retval) > 1:
        return tuple(retval)
    elif len(retval) == 1:
        return retval[0]
Example #13
0
    def test_obj_to_and_from_file_pickle(self):
        testdata = np.random.random([4, 4, 3])
        test_object = {'a': 1, 'data': testdata}

        filename = 'test_obj_to_and_from_file.pkl'
        misc.obj_to_file(test_object, filename, 'pickle')
        saved_object = misc.obj_from_file(filename, 'pickle')

        self.assertTrue(saved_object['a'] == 1)
        self.assertTrue(saved_object['data'][1, 1, 1] == testdata[1, 1, 1])

        os.remove(filename)
Example #14
0
    def skeleton_analysis(self, guiUpdateFunction = None):
        """
        Glossary:
        element: line structure of skeleton connected to node on both ends
        node: connection point of elements. It is one or few voxelsize_mm
        terminal: terminal node


        """
        if not fast_debug:
            if self.volume_data is not None:
                skdst = self.__radius_analysis_init()

            stats = {}
            len_edg = np.max(self.sklabel)
            #len_edg = 30
                
            for edg_number in range(1,len_edg+1):
                edgst = self.__connection_analysis(edg_number)
                edgst.update(self.__edge_length(edg_number))
                edgst.update(self.__edge_curve(edg_number, edgst, self.voxelsize_mm))
                edgst.update(self.__edge_vectors(edg_number, edgst))
                #edgst = edge_analysis(sklabel, i)
                if self.volume_data is not None:
                    edgst['radius_mm'] = float(self.__radius_analysis(edg_number,skdst))
                stats[edgst['id']] = edgst
                
                if guiUpdateFunction is not None: # update gui progress
                    guiUpdateFunction(edg_number,len_edg,1)

#save data for faster debug
            struct = {'sVD':self.volume_data, 'stats':stats, 'len_edg':len_edg}
            misc.obj_to_file(struct, filename='tmp.pkl', filetype='pickle')
        else:
            struct = misc.obj_from_file(filename='tmp.pkl', filetype='pickle')
            self.volume_data = struct['sVD']
            stats = struct['stats']
            len_edg = struct['len_edg']


        #@TODO dokončit
        for edg_number in range (1,len_edg+1):
            edgst = stats[edg_number]
            edgst.update(self.__connected_edge_angle(edg_number, stats))
            
            if guiUpdateFunction is not None: # update gui progress
                    guiUpdateFunction(edg_number,len_edg,2)




        return stats
Example #15
0
def sample_input_data():
    inputdata = {
        'basedir': '/home/mjirik/data/medical/',
        'data': [
            {'sliverseg': 'data_orig/sliver07/training-part1/liver-seg001.mhd', 'sliverorig': 'data_orig/sliver07/training-part1/liver-orig001.mhd'},
            {'sliverseg': 'data_orig/sliver07/training-part1/liver-seg002.mhd', 'sliverorig': 'data_orig/sliver07/training-part1/liver-orig002.mhd'},
        ]
    }

    sample_data_file = os.path.join(path_to_script,
                                    "20130919_liver_statistics.yaml")
    #print sample_data_file, path_to_script
    misc.obj_to_file(inputdata, sample_data_file, filetype='yaml')
Example #16
0
    def test_obj_to_and_from_file_with_directories(self):
        import shutil
        testdata = np.random.random([4, 4, 3])
        test_object = {'a': 1, 'data': testdata}

        dirname = '__test_write_and_read'
        filename = '__test_write_and_read/test_obj_to_and_from_file.pkl'

        misc.obj_to_file(test_object, filename, 'pickle')
        saved_object = misc.obj_from_file(filename, 'pickle')

        self.assertTrue(saved_object['a'] == 1)
        self.assertTrue(saved_object['data'][1, 1, 1] == testdata[1, 1, 1])

        shutil.rmtree(dirname)
Example #17
0
def evaluate_and_write_to_file(
        inputYamlFile,
        directoryPklz,
        directorySliver,
        outputfile,
        visualization,
        return_dir_lists=False,
        special_evaluation_function=None,
        return_all_data=False
):
    """
    Function computes yaml file (if there are given input sliver and pklz
    directories). Based on yaml file are compared sliver segmentations and
    our pklz files.
    """
    dirlists = None
    if (directoryPklz is not None) and (directorySliver is not None):
        dirlists = generate_input_yaml(
            directorySliver,
            directoryPklz,
            yaml_filename=inputYamlFile,
            return_dir_lists=return_dir_lists
        )

    # input parser
    data_file = inputYamlFile
    inputdata = misc.obj_from_file(data_file, filetype='yaml')

    evaluation_all = eval_all_from_dataset_metadata(
        inputdata, visualization,
        special_evaluation_function=special_evaluation_function
    )

    logger.debug(str(evaluation_all))
    logger.debug('eval all')

    logger.debug(make_sum(evaluation_all))
    write_csv(evaluation_all, filename=outputfile + '.csv')
    misc.obj_to_file(evaluation_all, outputfile + '.pkl', filetype='pkl')

    retval = []

    if return_dir_lists:
        retval.append(dirlists)
    if return_all_data:
        retval.append(evaluation_all)
    if len(retval) > 0:
        return retval
Example #18
0
def get_config(filename, default_cfg):
    """
    Looks config file and update default_cfg values.

    If file does not exist it is created.
    """
    if os.path.isfile(filename):
        cfg = misc.obj_from_file(filename, filetype='yaml')
        default_cfg.update(cfg)
        cfg_out = default_cfg
    else:
        misc.obj_to_file(default_cfg, filename, filetype='yaml')
        cfg_out = default_cfg

        # default config
    return cfg_out
Example #19
0
def main():

    #logger = logging.getLogger(__name__)
    logger = logging.getLogger()

    logger.setLevel(logging.WARNING)
    ch = logging.StreamHandler()
    logger.addHandler(ch)

    #logger.debug('input params')

    # input parser
    params = {'datadir':None, 'working_voxelsize_mm':3}

    dirpath = os.path.join(path_to_script, "../../../data/medical/data_orig/volumetrie")

    experiment_results = {'params':params,'dirpath':dirpath, 'volume_l':{}}

    output_dirpath = os.path.join(path_to_script, '../../../data/medical')
    dirlist = experiments.get_subdirs(dirpath)

    for key in dirlist:
        print key

#        import pdb; pdb.set_trace()
        try:
            dirname = dirlist[key]['abspath']
            params['datadir'] = dirname

            oseg = organ_segmentation.OrganSegmentation(**params)

            oseg.interactivity()
            print (
                    "Volume " +
                    str(oseg.get_segmented_volume_size_mm3() / 1000000.0)
                    + ' [l]')

            volume_l = (oseg.get_segmented_volume_size_mm3() / 1000000.0)

            experiment_results['volume_l'][key] = volume_l

            head, teil = os.path.split(dirname)
            filename_organ = os.path.join(output_dirpath, teil)

            data = oseg.export()
            misc.obj_to_file(data, filename_organ + "-organ.pkl", filetype='pickle')
            #misc.obj_to_file(data, "organ.pkl", filetype='pickle')
            misc.obj_to_file(oseg.get_iparams(), filename_organ + '-iparams.pkl', filetype='pickle')
            misc.obj_to_file(experiment_results, filename_organ + "-info.yaml", filetype='yaml')

        except:
            print 'Selhani, pokracujeme dal'
            print traceback.format_exc()
            import pdb; pdb.set_trace()

    misc.obj_to_file(experiment_results, "results.yaml", filetype='yaml')
Example #20
0
def sample_input_data():
    inputdata = {
        "basedir": "/home/mjirik/data/medical/",
        "data": [
            {
                "sliverseg": "data_orig/sliver07/training-part1/liver-seg001.mhd",
                "sliverorig": "data_orig/sliver07/training-part1/liver-orig001.mhd",
            },
            {
                "sliverseg": "data_orig/sliver07/training-part1/liver-seg002.mhd",
                "sliverorig": "data_orig/sliver07/training-part1/liver-orig002.mhd",
            },
        ],
    }

    sample_data_file = os.path.join(path_to_script, "20130919_liver_statistics.yaml")
    # print sample_data_file, path_to_script
    misc.obj_to_file(inputdata, sample_data_file, filetype="yaml")
Example #21
0
    def __vesselTree(self, binaryData3d, textLabel):
        import skelet3d
        import skeleton_analyser  # histology_analyser as skan
        data3d_thr = (binaryData3d > 0).astype(np.int8)
        data3d_skel = skelet3d.skelet3d(data3d_thr)

        skan = skeleton_analyser.SkeletonAnalyser(
            data3d_skel,
            volume_data=data3d_thr,
            voxelsize_mm=self.voxelsize_mm)
        stats = skan.skeleton_analysis(guiUpdateFunction=None)

        if 'graph' not in self.vessel_tree.keys():
            self.vessel_tree['voxelsize_mm'] = self.voxelsize_mm
            self.vessel_tree['graph'] = {}

        self.vessel_tree['graph'][textLabel] = stats
        # print sa.stats
# save skeleton to special file
        misc.obj_to_file(self.vessel_tree, 'vessel_tree.yaml', filetype='yaml')
Example #22
0
def main():

    # logger = logging.getLogger(__name__)
    logger = logging.getLogger()

    logger.setLevel(logging.WARNING)
    ch = logging.StreamHandler()
    logger.addHandler(ch)

    # logger.debug('input params')

    parser = argparse.ArgumentParser(description="Compute features on liver and other tissue.")
    parser.add_argument("-si", "--sampleInput", action="store_true", help="generate sample intput data", default=False)
    parser.add_argument("-v", "--visualization", action="store_true", help="Turn on visualization", default=False)
    parser.add_argument("-i", "--input", help="input yaml file", default="20130919_liver_statistics.yaml")
    parser.add_argument("-o", "--output", help="output file", default="20130919_liver_statistics_results.pkl")
    parser.add_argument("-t", "--train", help="Training", default=False, action="store_true")
    args = parser.parse_args()

    if args.sampleInput:
        sample_input_data()
    # input parser
    # path_to_yaml = os.path.join(path_to_script, args.input)
    path_to_yaml = args.input

    # write_csv(fvall)
    list_of_feature_fcn = [feat_hist]
    from sklearn import svm
    from sklearn.naive_bayes import GaussianNB

    list_of_classifiers = [svm.SVC, GaussianNB]
    tile_shape = [1, 100, 100]
    featrs_plus_classifs = make_product_list(list_of_feature_fcn, list_of_classifiers)

    result = experiment(
        path_to_yaml, featrs_plus_classifs, tile_shape=tile_shape, visualization=args.visualization, train=args.train
    )

    # Ukládání výsledku do souboru
    output_file = os.path.join(path_to_script, args.output)
    misc.obj_to_file(result, output_file, filetype="pickle")
Example #23
0
def check_config_version_and_remove_old_records(filename, version,
                                                records_to_save):
    """
    Check if config file version is ok. If it is not all records except
    records_to_save are deleted and config_version in file is set to version.
    It is used to update user configuration.
    """
    if os.path.isfile(filename):
        cfg = misc.obj_from_file(filename, filetype='yaml')
        if ('config_version' in cfg and (cfg['config_version'] == version)):
# everything is ok, no need to panic
            return
        else:
# older version of config file
            cfg = misc.obj_from_file(filename, filetype='yaml')
            misc.obj_to_file(cfg, filename + '.old', filetype='yaml')
            print 'cfg ', cfg
            new_cfg = subdict(cfg, records_to_save)
            new_cfg['config_version'] = version
            print 'ncfg ', new_cfg
            misc.obj_to_file(new_cfg, filename, filetype='yaml')
Example #24
0
def sample_input_data():
    inputdata = {
        'basedir':
        '/home/mjirik/data/medical/',
        'data': [
            {
                'sliverseg':
                'data_orig/sliver07/training-part1/liver-seg001.mhd',
                'sliverorig':
                'data_orig/sliver07/training-part1/liver-orig001.mhd'
            },  # noqa
            {
                'sliverseg':
                'data_orig/sliver07/training-part1/liver-seg002.mhd',
                'sliverorig':
                'data_orig/sliver07/training-part1/liver-orig002.mhd'
            },  # noqa
        ]
    }

    sample_data_file = os.path.join(path_to_script,
                                    "20130919_liver_statistics.yaml")
    # print sample_data_file, path_to_script
    misc.obj_to_file(inputdata, sample_data_file, filetype='yaml')
Example #25
0
    def save_outputs(self):

        # savestring_qt, ok = QInputDialog.getText(
        #     None,
        #     "Save",
        #     'Save output data? Yes/No/All with input data (y/n/a):',
        #     text="a"
        #     )

        # savestring = str(savestring_qt)

        #    if savestring in ['Y', 'y', 'a', 'A']:
        odp = self.output_datapath
        if not op.exists(odp):
            os.makedirs(odp)

        data = self.export()
        data['version'] = self.version  # qmisc.getVersionString()
        data['experiment_caption'] = self.experiment_caption
        data['lisa_operator_identifier'] = self.lisa_operator_identifier
#       data['organ_interactivity_counter'] = self.organ_interactivity_counter
        pth, filename = op.split(op.normpath(self.datapath))
        filename += "-" + self.experiment_caption
#        if savestring in ['a', 'A']:
# save renamed file too
        filepath = 'org-' + filename + '.' + self.save_filetype
        # rint filepath
        # rint 'op ', op
        filepath = op.join(odp, filepath)
        filepath = misc.suggest_filename(filepath)
        misc.obj_to_file(data, filepath, filetype=self.save_filetype)

        filepath = 'organ_last.' + self.save_filetype
        filepath = op.join(odp, filepath)
        # ilepath = misc.suggest_filename(filepath)
        misc.obj_to_file(data, filepath, filetype=self.save_filetype)
# save to mat

#        iparams = self.get_iparams()
        # filepath = 'organ_iparams.pklz'
        # filepath = op.join(odp, filepath)
        # misc.obj_to_file(iparams, filepath, filetype='pklz')

        # f savestring in ['a', 'A']:
        if False:
            # save renamed file too
            data['data3d'] = None
            filepath = 'organ_small-' + filename + '.pklz'
            filepath = op.join(odp, filepath)
            filepath = misc.suggest_filename(filepath)
            misc.obj_to_file(data, filepath, filetype='pklz')
def main():

    #logger = logging.getLogger(__name__)
    logger = logging.getLogger()

    logger.setLevel(logging.WARNING)
    ch = logging.StreamHandler()
    logger.addHandler(ch)

    #logger.debug('input params')

    # input parser
    parser = argparse.ArgumentParser(
        description='Segmentation of bones, lungs and heart.')
    parser.add_argument('-i',
                        '--datadir',
                        default=None,
                        help='path to data dir')
    parser.add_argument('-o', '--output', default=None, help='output file')

    parser.add_argument('-d',
                        '--debug',
                        action='store_true',
                        help='run in debug mode')
    parser.add_argument('-ss',
                        '--segspine',
                        action='store_true',
                        help='run spine segmentaiton')
    parser.add_argument('-sl',
                        '--seglungs',
                        action='store_true',
                        help='run lungs segmentation')
    parser.add_argument('-sh',
                        '--segheart',
                        action='store_true',
                        help='run heart segmentation')
    parser.add_argument('-sb',
                        '--segbones',
                        action='store_true',
                        help='run bones segmentation')
    parser.add_argument('-exd',
                        '--exampledata',
                        action='store_true',
                        help='run unittest')
    parser.add_argument('-so',
                        '--show_output',
                        action='store_true',
                        help='Show output data in viewer')
    args = parser.parse_args()

    if args.debug:
        logger.setLevel(logging.DEBUG)

    if args.exampledata:

        args.dcmdir = '../sample_data/liver-orig001.raw'


#    if dcmdir == None:

#else:
#dcm_read_from_dir('/home/mjirik/data/medical/data_orig/46328096/')
#data3d, metadata = dcmr.dcm_read_from_dir(args.dcmdir)

    data3d, metadata = io3d.datareader.read(args.datadir)

    sseg = SupportStructureSegmentation(
        data3d=data3d,
        voxelsize_mm=metadata['voxelsize_mm'],
    )

    #sseg.orientation()
    if args.segbones:
        sseg.bone_segmentation()
    if args.segspine:
        sseg.spine_segmentation()
    if args.seglungs or args.segheart:
        sseg.lungs_segmentation()
    if args.segheart:
        sseg.heart_segmentation()

    sseg.resize_back_to_orig()
    #print ("Data size: " + str(data3d.nbytes) + ', shape: ' + str(data3d.shape) )

    #igc = pycut.ImageGraphCut(data3d, zoom = 0.5)
    #igc.interactivity()

    #igc.make_gc()
    #igc.show_segmentation()

    # volume
    #volume_mm3 = np.sum(oseg.segmentation > 0) * np.prod(oseg.voxelsize_mm)

    #pyed = sed3.sed3(oseg.data3d, contour = oseg.segmentation)
    #pyed.show()

    if args.show_output:
        sseg.visualization()

    #savestring = raw_input ('Save output data? (y/n): ')
    #sn = int(snstring)
    if args.output is not None:  # savestring in ['Y','y']:
        import misc

        data = sseg.export()

        misc.obj_to_file(data, args.output, filetype='pickle')
Example #27
0
    # seg = np.zeros([100,100,100])
    # seg [50:80, 50:80, 60:75] = 1
    # seg[58:60, 56:72, 66:68]=2
    # dat = np.random.rand(100,100,100)
    # dat [50:80, 50:80, 60:75] =  dat [50:80, 50:80, 60:75] + 1
    # dat [58:60, 56:72, 66:68] =  dat  [58:60, 56:72, 66:68] + 1
    # slab = {'liver':1, 'porta':2, 'portaa':3, 'portab':4}
    # data = {'segmentation':seg, 'data3d':dat, 'slab':slab}
    name = 'porta'

    # cut_editor(data,args.inputfile)
    if args.use_old_editor:
        resection(data, name, use_old_editor=args.use_old_editor)
    else:
        cut_editor(data, args.picklefile)
    # print normal
    # print coordinates

    defaultoutputfile = "05-resection.pkl"
    if args.defaultoutputfile:
        args.outputfile = defaultoutputfile

    if args.outputfile is None:

        savestring = raw_input('Save output data? (y/n): ')
        if savestring in ['Y', 'y']:

            misc.obj_to_file(data, defaultoutputfile, filetype='pickle')
    else:
        misc.obj_to_file(data, args.outputfile, filetype='pickle')
Example #28
0
def save_outputs(args, oseg, qt_app):
    from PyQt4.QtGui import QInputDialog
    savestring_qt, ok = QInputDialog.getText(
        None,
        "Save",
        'Save output data? Yes/No/All+Dicom with input data (y/n/a/ad):',
        text="a"
    )
    savestring = str(savestring_qt)
    #import pdb; pdb.set_trace()
    #savestring = raw_input(
    #    'Save output data? Yes/No/All with input data (y/n/a): '
    #)
    if savestring in ['Y', 'y', 'a', 'A', 'ad']:
        if not os.path.exists(args["output_datapath"]):
            os.makedirs(args['output_datapath'])

        op = args['output_datapath']
# rename

        data = oseg.export()
        data['version'] = qmisc.getVersionString()
        data['experiment_caption'] = args['experiment_caption']
        data['lisa_operator_identifier'] = args['lisa_operator_identifier']
        #data['organ_segmentation_time'] = t1
        iparams = oseg.get_iparams()
        #import pdb; pdb.set_trace()
        pth, filename = os.path.split(os.path.normpath(args['datapath']))
        filename += "-" + args['experiment_caption']
        if savestring in ['a', 'A', 'ad']:
# save renamed file too
            filepath = 'ob-' + filename + '.pklz'
            filepath = os.path.join(op, filepath)
            filepath = misc.suggest_filename(filepath)
            misc.obj_to_file(data, filepath, filetype='pklz')

        filepath = 'organ.pklz'
        filepath = os.path.join(op, filepath)
        #filepath = misc.suggest_filename(filepath)
        misc.obj_to_file(data, filepath, filetype='pklz')

        filepath = 'organ_iparams.pklz'
        filepath = os.path.join(op, filepath)
        misc.obj_to_file(iparams, filepath, filetype='pklz')

        data['data3d'] = None
        filepath = 'organ_small-' + filename + '.pklz'
        filepath = os.path.join(op, filepath)
        filepath = misc.suggest_filename(filepath)
        misc.obj_to_file(data, filepath, filetype='pklz')
    #output = segmentation.vesselSegmentation(oseg.data3d,
    # oseg.orig_segmentation)
#    print "uf"

        if savestring in ['ad']:
            # save to DICOM
            filepath = 'dicom-' + filename
            filepath = os.path.join(op, filepath)
            filepath = misc.suggest_filename(filepath)
            output_dicom_dir = filepath
            #import ipdb; ipdb.set_trace()  # BREAKPOINT
            overlays = {
                3:
                (data['segmentation'] == args['output_label']).astype(np.int8)
            }
            saveOverlayToDicomCopy(oseg.metadata['dcmfilelist'],
                                   output_dicom_dir, overlays,
                                   data['crinfo'], data['orig_shape'])
Example #29
0
def save_config(cfg, filename):
    cfg
    misc.obj_to_file(cfg, filename, filetype="yaml")
Example #30
0
def save_config(cfg, filename):
    cfg
    misc.obj_to_file(cfg, filename, filetype="yaml")
Example #31
0
def generate_input_yaml(sliver_dir, pklz_dir,
                        sliver_ext='*seg0*.mhd', pklz_ext='*0*.pklz',
                        yaml_filename=None,
                        return_dir_lists=False
                        ):
    """
    Function pair files from different directory by numer in format g0XX.
    It is ok for seg001 and orig001 too.
    If there is given some yaml_filename, it is created.
    """
    import glob
    import re

    if not os.path.exists(sliver_dir):
        raise IOError("Directory with reference data (" + sliver_dir + ") does not exists")
    if not os.path.exists(pklz_dir):
        raise IOError("Directory with input pklz data (" + pklz_dir + ") does not exists")

    onlyfiles1 = glob.glob(os.path.join(sliver_dir, sliver_ext))
    onlyfiles2 = glob.glob(os.path.join(pklz_dir, pklz_ext))
    onlyfiles1.sort()
    onlyfiles2.sort()
    if len(onlyfiles1) == 0:
        raise IOError("Directory with reference data (%s) appears to be empty" % (sliver_dir))
    if len(onlyfiles2) == 0:
        raise IOError("Directory with pklz data (%s) appears to be empty" % (pklz_dir))

    logger.debug('sliver files \n' + str(onlyfiles1))
    logger.debug('pklz files \n' + str(onlyfiles2))

    data = []
    for flns in onlyfiles1:
        base, flnsh = os.path.split(os.path.normpath(flns))
        pattern = re.search('(g0[0-9]{2})', flnsh)
        if pattern:
            pattern = pattern.group(1)
        logger.debug('pattern1 ' + pattern)

        for flnp in onlyfiles2:
            base, flnph = os.path.split(os.path.normpath(flnp))
            pt = re.match('.*' + pattern + '.*', flnph)
            if pt:
                data.append({
                    'sliverseg': flns,
                    'ourseg': flnp
                })

    inputdata = {
        'basedir': '',
        'data': data
    }

    retval = []

    if yaml_filename is None:
        retval.append(inputdata)
    else:
        misc.obj_to_file(inputdata, yaml_filename, filetype='yaml')

    if return_dir_lists:
        retval.append(onlyfiles1)
        retval.append(onlyfiles2)

    if len(retval) > 1:
        return tuple(retval)
    elif len(retval) == 1:
        return retval[0]
Example #32
0
def main():

    # # logger = logging.getLogger()
    # logger = logging.getLogger()

    logger.setLevel(logging.WARNING)
    ch = logging.StreamHandler()
    logger.addHandler(ch)

    # logger.debug('input params')

    parser = argparse.ArgumentParser(
        description='Compute features on liver and other tissue.')
    parser.add_argument('-tr',
                        '--training_yaml_path',
                        help='Input yaml file.' +
                        " You can check sample with -si parameter.",
                        default="20130919_liver_statistics.yaml")
    parser.add_argument('-te',
                        '--testing_yaml_path',
                        help='Input yaml file.' +
                        " You can check sample with -si parameter.",
                        default=None)
    parser.add_argument('-si',
                        '--sampleInput',
                        action='store_true',
                        help='generate sample intput data',
                        default=False)
    parser.add_argument('-v',
                        '--visualization',
                        action='store_true',
                        help='Turn on visualization',
                        default=False)
    parser.add_argument('-fc',
                        '--features_classifs',
                        action='store_true',
                        help='Read features and classifs list from file',
                        default=False)
    parser.add_argument('-o',
                        '--output',
                        help='output file',
                        default="20130919_liver_statistics_results.pkl")
    parser.add_argument('-t',
                        '--train',
                        help='Training',
                        default=False,
                        action='store_true')
    parser.add_argument(
        '-cl',
        '--classifers',
        help='classifer by string: "SVC", or "GaussianNB", ...',
        nargs='+',
        type=str,
        default=['SVC'])
    parser.add_argument('-fe',
                        '--features',
                        help='features by string: "hist", or "glcm", ...',
                        nargs='+',
                        type=str,
                        default=['hist'])
    args = parser.parse_args()

    if args.sampleInput:
        sample_input_data()
    # input parser
    # path_to_yaml = os.path.join(path_to_script, args.input)
    # training_yaml_path = args.training_yaml_path
    # testing_yaml_path = args.testing_yaml_path
    if args.testing_yaml_path is None:
        print('testing is same as training')
        args.testing_yaml_path = args.training_yaml_path

    # write_csv(fvall)
    gf = tfeat.GaborFeatures()  # noqa
    glcmf = tfeat.GlcmFeatures()  # noqa
    haralick = tfeat.HaralickFeatures()  # noqa

    list_of_feature_fcn = prepared_texture_features_by_string(args.features)

    list_of_classifiers = prepared_classifiers_by_string(args.classifers)
    tile_shape = [10, 50, 50]

    if args.features_classifs:
        import features_classifs
        featrs_plus_classifs = features_classifs.fc
    else:
        featrs_plus_classifs = make_product_list(list_of_feature_fcn,
                                                 list_of_classifiers)

    result = experiment(args.training_yaml_path,
                        args.testing_yaml_path,
                        featrs_plus_classifs,
                        tile_shape=tile_shape,
                        use_voxelsize_norm=True,
                        working_voxelsize_mm=[1, 1, 1],
                        visualization=args.visualization,
                        train=args.train)

    # Ukládání výsledku do souboru
    output_file = os.path.join(path_to_script, args.output)
    misc.obj_to_file(result, output_file, filetype='pickle')
Example #33
0
def save_labels(inputfile, data3d, segmentation, feature_fcn,
                feature_fcn_params, classif_inst, classif_fcn_plus_params,
                voxelsize, tile_shape, use_voxelsize_norm):
    """
    classif_fcn_plus_params: used for directory name
    """
    path_directory = 'lisa_data/'
    subdirectory = 'experiments/'
    # actual = os.getcwd()
    path_directory = os.path.join(os.path.expanduser('~'), path_directory)
    # Ukládání výsledku do souboru
    if (os.path.exists(path_directory) is False):
        os.makedirs(path_directory)
    path_subdirectory = os.path.join(path_directory, subdirectory)
    if (os.path.exists(path_subdirectory) is False):
        os.makedirs(path_subdirectory)
    # TODO : Main Saving Loop ...
    dataplus = []
    slab = {}
    slab['liver'] = 1
    slab['none'] = 0

    # there are two possible ways for fature_fcn. One is function, other is object
    # with "description" attribute and function 'features'
    if hasattr(feature_fcn, 'description'):
        feature_fcn_description = feature_fcn.description
    else:
        feature_fcn_description = str(feature_fcn)

    dataplus = {
        # 'segmentation': segmentation[:10, :10, :10].astype(np.int8),
        # 'data3d': data3d[:10, :10, :10].astype(np.int16),
        'segmentation': segmentation.astype(np.int8),
        'data3d': data3d.astype(np.int16),
        'processing_information': {
            'feature_fcn': feature_fcn_description,
            'feature_fcn_params': str(feature_fcn_params),
            'classif_fcn_name': str(classif_inst.__class__.__name__),
            'classif_fcn': str(classif_inst)
        },
        'voxelsize_mm': voxelsize,
        'slab': slab
    }
    # inputfilename = path_leaf(inputfile)
    str_feat_params = __struct_to_string_for_filename(feature_fcn_params)
    str_clf_params = __struct_to_string_for_filename(str(classif_inst))
    str_clf_params = __struct_to_string_for_filename(
        str(classif_fcn_plus_params))

    vsnorm_string = "vsnF_"
    if use_voxelsize_norm:
        vsnorm_string = "vsnT_"


# construct filename
    experiment_dirname =\
        feature_fcn_description + '_' + \
        str_feat_params + '_' +\
        vsnorm_string +\
        classif_inst.__class__.__name__ + '_' + \
        str_clf_params + '_' +\
        str(tile_shape[0]) + '_' + str(tile_shape[1]) + '_' +\
        str(tile_shape[2])

    filename = __struct_to_string_for_filename(inputfile + '.pklz')

    path_to_file = os.path.join(path_subdirectory, experiment_dirname,
                                filename)
    misc.obj_to_file(dataplus, path_to_file, filetype='pklz')
    # os.chdir(actual)

    # save info to dir
    info = {
        'feature_fcn': feature_fcn_description,
        'feature_fcn_params': str(feature_fcn_params),
        'classif_fcn': str(classif_inst)
    }
    infofilepath = os.path.join(path_subdirectory, experiment_dirname,
                                'info.yaml')
    misc.obj_to_file(info, infofilepath, 'yaml')
def main():

    #logger = logging.getLogger(__name__)
    logger = logging.getLogger()

    logger.setLevel(logging.WARNING)
    ch = logging.StreamHandler()
    logger.addHandler(ch)

    #logger.debug('input params')

    # input parser
    parser = argparse.ArgumentParser(description=
            'Segmentation of bones, lungs and heart.')
    parser.add_argument('-i','--datadir',
            default=None,
            help='path to data dir')
    parser.add_argument('-o','--output',
            default=None,
            help='output file')

    parser.add_argument('-d', '--debug', action='store_true',
            help='run in debug mode')
    parser.add_argument('-ss', '--segspine', action='store_true',
            help='run spine segmentaiton')
    parser.add_argument('-sl', '--seglungs', action='store_true',
            help='run lungs segmentation')
    parser.add_argument('-sh', '--segheart', action='store_true',
            help='run heart segmentation')
    parser.add_argument('-sb', '--segbones', action='store_true',
            help='run bones segmentation')
    parser.add_argument('-exd', '--exampledata', action='store_true',
            help='run unittest')
    parser.add_argument('-so', '--show_output', action='store_true',
            help='Show output data in viewer')
    args = parser.parse_args()



    if args.debug:
        logger.setLevel(logging.DEBUG)


    if args.exampledata:

        args.dcmdir = '../sample_data/liver-orig001.raw'

#    if dcmdir == None:

    #else:
    #dcm_read_from_dir('/home/mjirik/data/medical/data_orig/46328096/')
    #data3d, metadata = dcmr.dcm_read_from_dir(args.dcmdir)

    data3d , metadata = io3d.datareader.read(args.datadir)

    sseg = SupportStructureSegmentation(data3d = data3d,
            voxelsize_mm = metadata['voxelsize_mm'],
            )


    #sseg.orientation()
    if args.segbones:
        sseg.bone_segmentation()
    if args.segspine:
        sseg.spine_segmentation()
    if args.seglungs or args.segheart:
    	sseg.lungs_segmentation()
    if args.segheart:
    	sseg.heart_segmentation()


    sseg.resize_back_to_orig()
    #print ("Data size: " + str(data3d.nbytes) + ', shape: ' + str(data3d.shape) )

    #igc = pycut.ImageGraphCut(data3d, zoom = 0.5)
    #igc.interactivity()


    #igc.make_gc()
    #igc.show_segmentation()

    # volume
    #volume_mm3 = np.sum(oseg.segmentation > 0) * np.prod(oseg.voxelsize_mm)


    #pyed = sed3.sed3(oseg.data3d, contour = oseg.segmentation)
    #pyed.show()

    if args.show_output:
        sseg.visualization()

    #savestring = raw_input ('Save output data? (y/n): ')
    #sn = int(snstring)
    if args.output is not None: # savestring in ['Y','y']:
        import misc

        data = sseg.export()

        misc.obj_to_file(data, args.output, filetype = 'pickle')
Example #35
0
def main():

    #logger = logging.getLogger(__name__)
    logger = logging.getLogger()

    logger.setLevel(logging.WARNING)
    ch = logging.StreamHandler()
    logger.addHandler(ch)

    #logger.debug('input params')

    # input parser
    params = {'datadir': None, 'working_voxelsize_mm': 3}

    dirpath = os.path.join(path_to_script,
                           "../../../data/medical/data_orig/volumetrie")

    experiment_results = {'params': params, 'dirpath': dirpath, 'volume_l': {}}

    output_dirpath = os.path.join(path_to_script, '../../../data/medical')
    dirlist = experiments.get_subdirs(dirpath)

    for key in dirlist:
        print key

        #        import pdb; pdb.set_trace()
        try:
            dirname = dirlist[key]['abspath']
            params['datadir'] = dirname

            oseg = organ_segmentation.OrganSegmentation(**params)

            oseg.interactivity()
            print("Volume " +
                  str(oseg.get_segmented_volume_size_mm3() / 1000000.0) +
                  ' [l]')

            volume_l = (oseg.get_segmented_volume_size_mm3() / 1000000.0)

            experiment_results['volume_l'][key] = volume_l

            head, teil = os.path.split(dirname)
            filename_organ = os.path.join(output_dirpath, teil)

            data = oseg.export()
            misc.obj_to_file(data,
                             filename_organ + "-organ.pkl",
                             filetype='pickle')
            #misc.obj_to_file(data, "organ.pkl", filetype='pickle')
            misc.obj_to_file(oseg.get_iparams(),
                             filename_organ + '-iparams.pkl',
                             filetype='pickle')
            misc.obj_to_file(experiment_results,
                             filename_organ + "-info.yaml",
                             filetype='yaml')

        except:
            print 'Selhani, pokracujeme dal'
            print traceback.format_exc()
            import pdb
            pdb.set_trace()

    misc.obj_to_file(experiment_results, "results.yaml", filetype='yaml')
Example #36
0
def main():

    #logger = logging.getLogger(__name__)
    logger = logging.getLogger()

    logger.setLevel(logging.WARNING)
    ch = logging.StreamHandler()
    logger.addHandler(ch)

    #logger.debug('input params')

    # input parser
    parser = argparse.ArgumentParser(
        description='Segment vessels from liver \n\
                    \npython organ_segmentation.py\n\
                    \npython organ_segmentation.py -mroi -vs 0.6')
    parser.add_argument('-dd',
                        '--dcmdir',
                        default=None,
                        help='path to data dir')
    parser.add_argument('-d',
                        '--debug',
                        action='store_true',
                        help='run in debug mode')
    parser.add_argument('-vs',
                        '--voxelsize_mm',
                        default='3',
                        type=str,
                        help='Insert working voxelsize. It can be number or \
            array of three numbers. \n \
            -vs 3 \n \
            -vs [3,3,5]')
    parser.add_argument('-mroi',
                        '--manualroi',
                        action='store_true',
                        help='manual crop before data processing')
    parser.add_argument(
        '-iparams',
        '--iparams',
        default=None,
        help='filename of ipars file with stored interactivity')
    parser.add_argument('-t',
                        '--tests',
                        action='store_true',
                        help='run unittest')
    parser.add_argument('-tx',
                        '--textureanalysis',
                        action='store_true',
                        help='run with texture analysis')
    parser.add_argument('-exd',
                        '--exampledata',
                        action='store_true',
                        help='run unittest')
    parser.add_argument('-ed',
                        '--editdata',
                        action='store_true',
                        help='Run data editor')
    parser.add_argument('-so',
                        '--show_output',
                        action='store_true',
                        help='Show output data in viewer')
    parser.add_argument('-ss',
                        '--segmentation_smoothing',
                        action='store_true',
                        help='Smoothing of output segmentation',
                        default=False)
    args = parser.parse_args()

    # voxelsize_mm can be number or array
    args.voxelsize_mm = np.array(eval(args.voxelsize_mm))

    if args.debug:
        logger.setLevel(logging.DEBUG)

    if args.tests:
        # hack for use argparse and unittest in one module
        sys.argv[1:] = []
        unittest.main()
        sys.exit()

    if args.exampledata:

        args.dcmdir = '../sample_data/\
                matlab/examples/sample_data/DICOM/digest_article/'

    if args.iparams is not None:
        args.iparams = misc.obj_from_file(args.iparams)
    #else:
    #dcm_read_from_dir('/home/mjirik/data/medical/data_orig/46328096/')
    #data3d, metadata = dcmreaddata.dcm_read_from_dir()

    oseg = OrganSegmentation(args.dcmdir,
                             working_voxelsize_mm=args.voxelsize_mm,
                             manualroi=args.manualroi,
                             texture_analysis=args.textureanalysis,
                             edit_data=args.editdata,
                             smoothing=args.action_segmentation_smoothing,
                             iparams=args.iparams)

    oseg.interactivity()

    #igc = pycut.ImageGraphCut(data3d, zoom = 0.5)
    #igc.interactivity()

    #igc.make_gc()
    #igc.show_segmentation()

    # volume
    #volume_mm3 = np.sum(oseg.segmentation > 0) * np.prod(oseg.voxelsize_mm)

    print("Volume " + str(oseg.get_segmented_volume_size_mm3() / 1000000.0) +
          ' [l]')
    #pyed = sed3.sed3(oseg.data3d, contour =
    # oseg.segmentation)
    #pyed.show()

    if args.show_output:
        oseg.show_output()

    savestring = raw_input('Save output data? (y/n): ')
    #sn = int(snstring)
    if savestring in ['Y', 'y']:

        data = oseg.export()

        misc.obj_to_file(data, "organ.pkl", filetype='pickle')
        misc.obj_to_file(oseg.get_ipars(), 'ipars.pkl', filetype='pickle')
    #output = segmentation.vesselSegmentation(oseg.data3d,
    # oseg.orig_segmentation)

    def checkSegData(self):
        if self.segmentation_data is None:
            self.statusBar().showMessage('No SEG data!')
            return
        nzs = self.segmentation_data.nonzero()
        nn = nzs[0].shape[0]
        if nn > 0:
            aux = ' voxels = %d, volume = %.2e mm3' % (nn,
                                                       nn * self.voxel_volume)
            self.setLabelText(self.text_seg_data, aux)
            self.setLabelText(self.text_mesh_in, 'segmentation data')
            self.statusBar().showMessage('Ready')

        else:
            self.statusBar().showMessage('Zero SEG data!')

    def autoSeg(self):
        if self.dcm_3Ddata is None:
            self.statusBar().showMessage('No DICOM data!')
            return
        igc = pycut.ImageGraphCut(self.dcm_3Ddata,
                                  voxelsize=self.voxel_size_mm)

        pyed = QTSeedEditor(self.dcm_3Ddata,
                            seeds=self.segmentation_seeds,
                            modeFun=igc.interactivity_loop,
                            voxelVolume=self.voxel_volume)
        pyed.exec_()

        self.segmentation_data = pyed.getContours()
        self.segmentation_seeds = pyed.getSeeds()
        self.checkSegData()
Example #37
0
    #print np.max(output)
    #import pdb; pdb.set_trace()
    #data = {}
    #data['data3d'] = oseg.data3d
    #data['crinfo'] = oseg.crinfo
    #data['segmentation'] = oseg.segmentation
    data['segmentation'][output] = data['slab']['porta']
    #data['slab'] = slab

    pyed = sed3.sed3(data['data3d'],
                     contour=data['segmentation'] == data['slab']['porta'])
    pyed.show()

    #pyed = sed3.sed3(data['segmentation'])
    #pyed.show()
    # Uvolneni pameti
    garbage.collect()

    if args.outputfile == None:

        savestring = raw_input('Save output data? (y/n): ')
        #sn = int(snstring)
        if savestring in ['Y', 'y']:
            pth, filename = os.path.split(os.path.normpath(args.inputfile))

            misc.obj_to_file(data,
                             defaultoutputfile + '-' + filename,
                             filetype='pickle')
    else:
        misc.obj_to_file(data, args.outputfile, filetype='pickle')
def main():

    #logger = logging.getLogger(__name__)
    logger = logging.getLogger()

    logger.setLevel(logging.WARNING)
    ch = logging.StreamHandler()
    logger.addHandler(ch)

    #logger.debug('input params')

    # input parser
    parser = argparse.ArgumentParser(description=
            'Segmentation of bones, lungs and heart.')
    parser.add_argument('-dd','--dcmdir',
            default=None,
            help='path to data dir')
    parser.add_argument('-d', '--debug', action='store_true',
            help='run in debug mode')
    parser.add_argument('-exd', '--exampledata', action='store_true', 
            help='run unittest')
    parser.add_argument('-so', '--show_output', action='store_true', 
            help='Show output data in viewer')
    args = parser.parse_args()



    if args.debug:
        logger.setLevel(logging.DEBUG)


    if args.exampledata:

        args.dcmdir = '../sample_data/matlab/examples/sample_data/DICOM/digest_article/'
        
#    if dcmdir == None:

    #else:
    #dcm_read_from_dir('/home/mjirik/data/medical/data_orig/46328096/')
    #data3d, metadata = dcmr.dcm_read_from_dir(args.dcmdir)
    reader = dcmr.DicomReader(args.datadir)
    self.data3d = reader.get_3Ddata()
    self.metadata = reader.get_metaData()


    sseg = SupportStructureSegmentation(data3d = data3d, 
            voxelsize_mm = metadata['voxelsize_mm'], 
            )

    sseg.bone_segmentation()
    

    #print ("Data size: " + str(data3d.nbytes) + ', shape: ' + str(data3d.shape) )

    #igc = pycut.ImageGraphCut(data3d, zoom = 0.5)
    #igc.interactivity()


    #igc.make_gc()
    #igc.show_segmentation()

    # volume 
    #volume_mm3 = np.sum(oseg.segmentation > 0) * np.prod(oseg.voxelsize_mm)

    
    #pyed = py3DSeedEditor.py3DSeedEditor(oseg.data3d, contour = oseg.segmentation)
    #pyed.show()

    if args.show_output:
        sseg.show_output()

    savestring = raw_input ('Save output data? (y/n): ')
    #sn = int(snstring)
    if savestring in ['Y','y']:
        import misc

        data = sseg.export()

        misc.obj_to_file(data, "organ.pickle", filetype = 'pickle')
Example #39
0
 def writeSkeletonToPickle(self, filename='skel.pkl'):
     misc.obj_to_file(self.sklabel, filename=filename, filetype='pickle')
Example #40
0
def main():

    #logger = logging.getLogger(__name__)
    logger = logging.getLogger()

    logger.setLevel(logging.WARNING)
    ch = logging.StreamHandler()
    logger.addHandler(ch)

    #logger.debug('input params')

    parser = argparse.ArgumentParser(
        description='Compute features on liver and other tissue.')
    parser.add_argument('-si',
                        '--sampleInput',
                        action='store_true',
                        help='generate sample intput data',
                        default=False)
    parser.add_argument('-v',
                        '--visualization',
                        action='store_true',
                        help='Turn on visualization',
                        default=False)
    parser.add_argument('-i',
                        '--input',
                        help='input yaml file',
                        default="20130919_liver_statistics.yaml")
    parser.add_argument('-o',
                        '--output',
                        help='output file',
                        default="20130919_liver_statistics_results.pkl")
    parser.add_argument('-t',
                        '--train',
                        help='Training',
                        default=False,
                        action='store_true')
    args = parser.parse_args()

    if args.sampleInput:
        sample_input_data()
    # input parser
    #path_to_yaml = os.path.join(path_to_script, args.input)
    path_to_yaml = args.input

    #write_csv(fvall)
    list_of_feature_fcn = [feat_hist]
    from sklearn import svm
    from sklearn.naive_bayes import GaussianNB

    list_of_classifiers = [svm.SVC, GaussianNB]
    tile_shape = [1, 100, 100]
    featrs_plus_classifs = make_product_list(list_of_feature_fcn,
                                             list_of_classifiers)

    result = experiment(path_to_yaml,
                        featrs_plus_classifs,
                        tile_shape=tile_shape,
                        visualization=args.visualization,
                        train=args.train)

    # Ukládání výsledku do souboru
    output_file = os.path.join(path_to_script, args.output)
    misc.obj_to_file(result, output_file, filetype='pickle')