예제 #1
0
파일: pklz_info.py 프로젝트: jedocs/lisa
def main():

    logger = logging.getLogger()

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

    #logger.debug('input params')

    data3d_a_path = None  # os.path.join(path_to_script, '../../../data/medical/data_orig/sliver07/training-part1/liver-orig001.mhd')
    data3d_b_path = None  #os.path.join(path_to_script, '../../../data/medical/data_orig/sliver07/training-part1/liver-seg001.mhd')
    parser = argparse.ArgumentParser(
        description='Information about pkl/pklz file')
    parser.add_argument('pklzFile', help='path to data')
    args = parser.parse_args()

    data = misc.obj_from_file(args.pklzFile, 'pickle')
    print(data)

    try:
        pyed = sed3.sed3(data['data3d'], contour=data['segmentation'])
        pyed.show()
    except:
        try:

            pyed = sed3.sed3(data['data3d'])
            pyed.show()
        except:
            print("Problem with visualization")
예제 #2
0
파일: lesions.py 프로젝트: mjirik/lisa
    def _automatic_localization(self):
        """
        Automatic localization made by Tomas Ryba.
        """

        # seeds = self.get_seeds_using_class_1(class1)
        liver = self.data3d * (self.segmentation != 0)
        print('analyzing histogram...')
        class1 = tools.analyse_histogram(self.data3d,
                                         roi=self.segmentation != 0)
        # sed3.sed3(self.data3d, seeds=class1).show()
        print('getting seeds...')
        seeds = self.get_seeds_using_prob_class1(
            liver,
            class1,
            thresholdType='percOfMaxDist',
            percT=0.3)

        # sed3.sed3(self.data3d, seeds=seeds).show()

        print('Starting random walker...')
        rw = random_walker(liver, seeds, mode='cg_mg')
        print('...finished.')

        label_l = self.data['slab']['lesions']

        lessions = rw == 2
        sed3.sed3(self.data3d, contour=lessions).show()
        lessions = self.filter_objects(lessions)

        self.segmentation = np.where(lessions, label_l, self.segmentation)
예제 #3
0
파일: pklz_info.py 프로젝트: Trineon/lisa
def main():

    logger = logging.getLogger()

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

    #logger.debug('input params')

    data3d_a_path = None # os.path.join(path_to_script, '../../../data/medical/data_orig/sliver07/training-part1/liver-orig001.mhd')
    data3d_b_path = None #os.path.join(path_to_script, '../../../data/medical/data_orig/sliver07/training-part1/liver-seg001.mhd')
    parser = argparse.ArgumentParser(
            description='Information about pkl/pklz file')
    parser.add_argument('pklzFile',
            help='path to data' )
    args = parser.parse_args()

    data = misc.obj_from_file(args.pklzFile, 'pickle')
    print data

    try:
        pyed = sed3.sed3(data['data3d'], contour=data['segmentation'])
        pyed.show()
    except:
        try:

            pyed = sed3.sed3(data['data3d'])
            pyed.show()
        except:
            print "Problem with visualization"
예제 #4
0
    def _automatic_localization(self):
        """
        Automatic localization made by Tomas Ryba.
        """

        # seeds = self.get_seeds_using_class_1(class1)
        liver = self.data3d * (self.segmentation != 0)
        print('analyzing histogram...')
        class1 = tools.analyse_histogram(self.data3d,
                                         roi=self.segmentation != 0)
        # sed3.sed3(self.data3d, seeds=class1).show()
        print('getting seeds...')
        seeds = self.get_seeds_using_prob_class1(liver,
                                                 class1,
                                                 thresholdType='percOfMaxDist',
                                                 percT=0.3)

        # sed3.sed3(self.data3d, seeds=seeds).show()

        print('Starting random walker...')
        rw = random_walker(liver, seeds, mode='cg_mg')
        print('...finished.')

        label_l = self.data['slab']['lesions']

        lessions = rw == 2
        sed3.sed3(self.data3d, contour=lessions).show()
        lessions = self.filter_objects(lessions)

        self.segmentation = np.where(lessions, label_l, self.segmentation)
예제 #5
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='vessels.pkl',
                        help='path to data dir')

    # args = parser.parse_args()
    # horsi kvalita segmentace
    # datapath = os.path.join(path_to_script, "../vessels1.pkl")
    # hypodenzni meta
    # datapath = os.path.join(path_to_script, args.inputfile)
    # horsi kvalita segmentace
    # datapath = os.path.join(path_to_script, "../organ.pkl")

    # data = misc.obj_from_file(args.inputfile, filetype = 'pickle')

    dcmdir = '/home/tomas/Dropbox/Work/Data/medical/org-38289898-export1.pklz'
    data = misc.obj_from_file(dcmdir, filetype='pickle')

    # windowing
    data['data3d'] = tools.windowing(data['data3d'], level=50, width=350)
    # data['data3d'] = smoothing(data['data3d'], sliceId=0)

    # smoothing ----------------
    # bilateral
    # data['data3d'] = tools.smoothing_bilateral(data['data3d'],
    # sigma_space=15, sigma_color=0.05, sliceId=0)
    # more bilateral
    # data['data3d'] = tools.smoothing_bilateral(data['data3d'],
    # sigma_space=15, sigma_color=0.1, sliceId=0)
    # total-variation
    data['data3d'] = tools.smoothing_tv(data['data3d'], weight=0.05, sliceId=0)
    # more total-variation
    # data['data3d'] = tools.smoothing_tv(data['data3d'], weight=0.2,
    # multichannel=False, sliceId=0)
    # sed3.sed3(data['data3d']).show()

    tumory = Lesions()
    # tumory.overlay_test()
    tumory.import_data(data)
    tumory.automatic_localization()

    tumors = tumory.segmentation == tumory.data['slab']['lesions']
    sed3.sed3(tumory.data3d, contour=tumors).show()
예제 #6
0
def GetMaskForLiversSegmentation(image):
    # arrayImage = np.array(sitk.GetArrayFromImage(image))
    caster = sitk.CastImageFilter()
    caster.SetOutputPixelType(sitk.sitkUInt8)
    image = caster.Execute(image)

    ed = sed3.sed3(image)
    ed.show()

    allSeeds = np.where(ed.seeds > 0)
    seeds = []

    for i in range(len(allSeeds[0])):
        p = (int(allSeeds[0][i]), int(allSeeds[1][i]), int(allSeeds[2][i]))
        seeds.append(p)

    # print image.GetSize()
    # max1 = 0
    # min1 = image.GetSize()[0]
    # max2 = 0
    # min2 = image.GetSize()[1]
    # max3 = 0
    # min3 = image.GetSize()[2]
    # for seed in allSeeds:
    #         if seed[0] > max1:
    #                 max1 = seed[0]
    #         if seed[0] < min1:
    #                 min1 = seed[0]
    #         if seed[1] > max2:
    #                 max2 = seed[1]
    #         if seed[1] < min2:
    #                 min2 = seed[1]
    #         if seed[2] > max3:
    #                 max3 = seed[2]
    #         if seed[2] < min3:
    #                 min3 = seed[2]
    # imgRes = sitk.GetImageFromArray(sitk.Cast(image, sitk.sitkUInt32))[min1:max1][min2:max2][min3:max3]
    print 'Region grow segmentation'

    regionGrow = sitk.ConnectedThreshold(image,
                                         seedList=seeds,
                                         lower=50,
                                         upper=220)
    # regionGrow = sitk.ConnectedThreshold(sitk.Cast(image,sitk.sitkUInt8),
    #                                      seedList=seeds,
    #                                      lower=50, upper=220)
    writer = sitk.ImageFileWriter()
    outputDirPath = 'C:/Users/duso/PycharmProjects/Semestralni_Prace/Registration/Frangis/RegistrationTests/test/Filters_'

    writer.SetFileName(outputDirPath + 'liversMaskTest.nrrd')
    writer.Execute(regionGrow)
    print 'Region grow segmentation done'
    ed = sed3.sed3(sitk.RescaleIntensity(regionGrow))
    ed.show()
예제 #7
0
파일: lesions.py 프로젝트: mjirik/lisa
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='vessels.pkl',
                        help='path to data dir')

    # args = parser.parse_args()
    # horsi kvalita segmentace
    # datapath = os.path.join(path_to_script, "../vessels1.pkl")
    # hypodenzni meta
    # datapath = os.path.join(path_to_script, args.inputfile)
    # horsi kvalita segmentace
    # datapath = os.path.join(path_to_script, "../organ.pkl")

    # data = misc.obj_from_file(args.inputfile, filetype = 'pickle')

    dcmdir = '/home/tomas/Dropbox/Work/Data/medical/org-38289898-export1.pklz'
    data = misc.obj_from_file(dcmdir, filetype='pickle')

    # windowing
    data['data3d'] = tools.windowing(data['data3d'], level=50, width=350)
    # data['data3d'] = smoothing(data['data3d'], sliceId=0)

    # smoothing ----------------
    # bilateral
    # data['data3d'] = tools.smoothing_bilateral(data['data3d'],
    # sigma_space=15, sigma_color=0.05, sliceId=0)
    # more bilateral
    # data['data3d'] = tools.smoothing_bilateral(data['data3d'],
    # sigma_space=15, sigma_color=0.1, sliceId=0)
    # total-variation
    data['data3d'] = tools.smoothing_tv(data['data3d'], weight=0.05, sliceId=0)
    # more total-variation
    # data['data3d'] = tools.smoothing_tv(data['data3d'], weight=0.2,
    # multichannel=False, sliceId=0)
    # sed3.sed3(data['data3d']).show()

    tumory = Lesions()
    # tumory.overlay_test()
    tumory.import_data(data)
    tumory.automatic_localization()

    tumors = tumory.segmentation == tumory.data['slab']['lesions']
    sed3.sed3(tumory.data3d, contour=tumors).show()
예제 #8
0
파일: sliver_show.py 프로젝트: Trineon/lisa
def show(data3d_a_path, sliver_seg_path, ourSegmentation):
    reader = datareader.DataReader()
    #data3d_a_path = os.path.join(path_to_script, data3d_a_path)
    datap_a = reader.Get3DData(data3d_a_path,
                               dataplus_format=True)

    if 'orig_shape' in datap_a.keys():
# pklz
        data3d_a = qmisc.uncrop(datap_a['data3d'], datap_a['crinfo'],
                                datap_a['orig_shape'])
    else:
#dicom
        data3d_a = datap_a['data3d']

    if sliver_seg_path is not None:
        sliver_seg_path = os.path.join(path_to_script, sliver_seg_path)
        sliver_datap = reader.Get3DData(sliver_seg_path,
                                        dataplus_format=True)
        if 'segmentation' in sliver_datap.keys():
            sliver_seg = sliver_datap['segmentation']
            sliver_seg = qmisc.uncrop(sliver_datap['segmentation'],
                                      sliver_datap['crinfo'],
                                      data3d_a.shape)
        else:
            sliver_seg = sliver_datap['data3d']

        pyed = sed3.sed3(data3d_a, contour=sliver_seg)
        print "Sliver07 segmentation"
        pyed.show()

    if ourSegmentation != None:
        ourSegmentation = os.path.join(path_to_script, ourSegmentation)
        datap_our = reader.Get3DData(ourSegmentation, dataplus_format=True)
        #data_our = misc.obj_from_file(ourSegmentation, 'pickle')
        #data3d_our = data_our['segmentation']
        our_seg = qmisc.uncrop(datap_our['segmentation'], datap_our['crinfo'],
                               data3d_a.shape)

    if ourSegmentation != None:
        pyed = sed3.sed3(data3d_a, contour=our_seg)
        print "Our segmentation"
        pyed.show()

    if (ourSegmentation is not None) and (sliver_seg_path is not None):
        diff = (our_seg.astype(np.int8) - sliver_seg)
        diff[diff==-1] = 2
        #import ipdb; ipdb.set_trace() # BREAKPOINT
        pyed = sed3.sed3(data3d_a, contour=our_seg,
                                             seeds=diff)
        print "Sliver07 and our segmentation differences"
        pyed.show()
예제 #9
0
def annotate2(number_of_scans):  #annotation starting from scan 1
    '''
    Annotate the data form our medical dataset, starting from scan 1, up to scan passed in param.
    
    Save the labels to an excel file 'tabulka2.xlsx'.
    '''
    df = pd.DataFrame(columns=[
        'ID', 'Mark 1 slice id', 'Mark 2 slice id', 'Mark 3 slice id',
        'Mark 4 slice id'
    ])

    for i in range(number_of_scans):
        print(f'Showing scan n. {str(i+1).zfill(2)}')
        dr = io3d.DataReader()

        datap = dr.Get3DData(
            f'data/medical/orig/sliver07/training/liver-orig0{str(i+1).zfill(2)}.mhd',
            dataplus_format=True)

        ed = sed3.sed3(datap['data3d'][::-1, :, :], windowW=400, windowC=40)
        ed.show()

        nz = np.nonzero(ed.seeds)

        ids = np.unique(nz[0])
        df = df.append(
            {
                'ID': i + 1,
                'Mark 1 slice id': ids[0],
                'Mark 2 slice id': ids[1],
                'Mark 3 slice id': ids[2],
                'Mark 4 slice id': ids[3]
            },
            ignore_index=True)
    df.to_excel('tabulka2.xlsx', sheet_name='List1', index=False)
예제 #10
0
def main():
    parser = argparse.ArgumentParser(
        description='data3dviewer - Viewer for 3d data (mostly from CT)')
    parser.add_argument('path', help='Path to directory with 3d data')
    parser.add_argument('-d',
                        '--debug',
                        action='store_true',
                        help='Debug mode')
    args = parser.parse_args()

    logging.basicConfig(stream=sys.stdout)
    logger = logging.getLogger()

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

    # load dicom data
    logger.info("Loading 3d data from: %s" % os.path.abspath(args.path))
    datap = io3d.read(os.path.abspath(args.path), dataplus_format=True)
    data3d = datap["data3d"]
    logger.info("voxelsize: %s" % str(datap["voxelsize_mm"]))

    # temporary fix for io3d <-512;511> value range bug
    # this is caused by hardcoded slope 0.5 in dcmreader
    if np.min(data3d) >= -512: data3d = data3d * 2

    # display data
    ed = sed3.sed3(data3d)
    ed.show()
예제 #11
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')
예제 #12
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')
예제 #13
0
파일: lisaWindow.py 프로젝트: Trineon/lisa
    def compareSegmentationWithFile(self):
        """
        Function make GUI for reading segmentaion file to compare it with
        actual segmentation using Sliver methodics. It calls
        organ_segmentation function to do the work.
        """
        self.statusBar().showMessage("Reading segmentation from file ...")
        QApplication.processEvents()
        logger.debug("import segmentation from file to compare by sliver")
        logger.debug(str(self.oseg.crinfo))
        logger.debug(str(self.oseg.data3d.shape))
        logger.debug(str(self.oseg.segmentation.shape))
        seg_path = self.__get_datafile(app=True, directory=self.oseg.input_datapath_start)
        if seg_path is None:
            self.statusBar().showMessage("No data path specified!")
            return
        evaluation, score, segdiff = self.oseg.sliver_compare_with_other_volume_from_file(seg_path)
        print "Evaluation: ", evaluation
        print "Score: ", score

        text = self.__evaluation_to_text(score)

        segdiff[segdiff == -1] = 2
        logger.debug("segdif unique " + str(np.unique(segdiff)))

        QApplication.processEvents()
        ed = sed3.sed3(self.oseg.data3d, seeds=segdiff, contour=(self.oseg.segmentation == self.oseg.slab["liver"]))
        ed.show()

        self.setLabelText(self.text_seg_data, text)
        self.statusBar().showMessage("Ready")
예제 #14
0
def one_experiment_setting_for_whole_dataset(inputdata,
                                             tile_shape,
                                             feature_fcn,
                                             classif_fcn,
                                             train,
                                             visualization=False):
    fvall = []
    fv_tiles = []
    indata_len = len(inputdata['data'])
    indata_len = 3

    for i in range(0, indata_len):
        data3d_orig, data3d_seg = read_data_orig_and_seg(inputdata, i)

        feat_hist_by_segmentation(data3d_orig, data3d_seg, visualization)

        if visualization:
            pyed = sed3.sed3(data3d_orig, contour=data3d_seg)
            pyed.show()

            #import pdb; pdb.set_trace()
        #fvall.insert(i, get_features(
        #    data3d_orig,
        #ltl = (labels_train_lin_float * 10).astype(np.int8)
        #labels_train = arrange_to_tiled_data(cidxs, tile_shape,
        #                                     d_shp, ltl)

        #pyed = sed3.sed3(labels_train, contour=labels)


# @TODO vracet něco inteligentního, fvall je prázdný
    return fvall
예제 #15
0
파일: datareader.py 프로젝트: mjirik/io3d
def main():
    main_logger = logging.getLogger()

    main_logger.setLevel(logging.DEBUG)
    ch = logging.StreamHandler()
    main_logger.addHandler(ch)

    # input parser
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('-i', '--inputfile',
                        default=None,
                        required=True,
                        help='input file')
    parser.add_argument('-sn', '--seriesnumber',
                        default=None,
                        help='seriesnumber')
    parser.add_argument('-d', '--debug',
                        action='store_true',
                        help='Debug mode')
    args = parser.parse_args()

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

    data3d, metadata = read(args.inputfile,
                            series_number=args.seriesnumber,
                            dataplus_format=False)
    import sed3
    ed = sed3.sed3(data3d)
    ed.show()
예제 #16
0
def main():
    main_logger = logging.getLogger()

    main_logger.setLevel(logging.DEBUG)
    ch = logging.StreamHandler()
    main_logger.addHandler(ch)

    # input parser
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('-i',
                        '--inputfile',
                        default=None,
                        required=True,
                        help='input file')
    parser.add_argument('-sn',
                        '--seriesnumber',
                        default=None,
                        help='seriesnumber')
    parser.add_argument('-d',
                        '--debug',
                        action='store_true',
                        help='Debug mode')
    args = parser.parse_args()

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

    data3d, metadata = read(args.inputfile,
                            series_number=args.seriesnumber,
                            dataplus_format=False)
    import sed3
    ed = sed3.sed3(data3d)
    ed.show()
예제 #17
0
    def test_split_organ_segmentation_recursive(self):
        import lisa.organ_segmentation
        import io3d
        # datap = io3d.datasets.generate_abdominal()
        datap = io3d.datasets.generate_synthetic_liver(return_dataplus=True)
        slab = datap["slab"]
        oseg = lisa.organ_segmentation.OrganSegmentation()
        oseg.import_dataplus(datap)
        oseg.label_volumetric_vessel_tree("porta")
        labeled_branches = oseg.segmentation
        seeds = np.zeros_like(oseg.data3d, dtype=np.int)
        seeds[40, 122:126, 165:168] = 1
        seeds[40, 144:148, 131:133] = 2
        seeds[40, 122:126, 114:117] = 2
        seeds[40, 90:95, 103:106] = 3
        seeds[40, 122:126, 84:88] = 3

        # import sed3
        # ed = sed3.sed3(datap["data3d"], contour=datap["segmentation"], seeds=seeds)
        # ed.show()

        split_labels_out, connected = oseg.split_tissue_recusively_with_labeled_volumetric_vessel_tree(
            "liver", seeds)
        # labeled_branches = lisa.virtual_resection.branch_labels(oseg, "porta")
        data3d = datap["data3d"]
        segmentation = datap["segmentation"]
        organ_label = "liver"

        import sed3
        # ed = sed3.sed3(labeled_branches, contour=organ_split)
        ed = sed3.sed3(split_labels_out)
        ed.show()

        self.assertGreater(np.sum(oseg.select_label("split1")), 1000)
        self.assertGreater(np.sum(oseg.select_label("split2")), 1000)
예제 #18
0
def one_experiment_setting_for_whole_dataset(
    inputdata, tile_shape, feature_fcn, classif_fcn, train, visualization=False
):
    fvall = []
    fv_tiles = []
    indata_len = len(inputdata["data"])
    indata_len = 3

    for i in range(0, indata_len):
        data3d_orig, data3d_seg = read_data_orig_and_seg(inputdata, i)

        feat_hist_by_segmentation(data3d_orig, data3d_seg, visualization)

        if visualization:
            pyed = sed3.sed3(data3d_orig, contour=data3d_seg)
            pyed.show()

            # import pdb; pdb.set_trace()
        # fvall.insert(i, get_features(
        #    data3d_orig,
        # ltl = (labels_train_lin_float * 10).astype(np.int8)
        # labels_train = arrange_to_tiled_data(cidxs, tile_shape,
        #                                     d_shp, ltl)

        # pyed = sed3.sed3(labels_train, contour=labels)

    # @TODO vracet něco inteligentního, fvall je prázdný
    return fvall
예제 #19
0
파일: sliver_show.py 프로젝트: mjirik/lisa
def show(data3d_a_path, sliver_seg_path, ourSegmentation):
    reader = datareader.DataReader()
    #data3d_a_path = os.path.join(path_to_script, data3d_a_path)
    datap_a = reader.Get3DData(data3d_a_path, dataplus_format=True)

    if 'orig_shape' in datap_a.keys():
        # pklz
        data3d_a = qmisc.uncrop(datap_a['data3d'], datap_a['crinfo'],
                                datap_a['orig_shape'])
    else:
        #dicom
        data3d_a = datap_a['data3d']

    if sliver_seg_path is not None:
        sliver_seg_path = os.path.join(path_to_script, sliver_seg_path)
        sliver_datap = reader.Get3DData(sliver_seg_path, dataplus_format=True)
        if 'segmentation' in sliver_datap.keys():
            sliver_seg = sliver_datap['segmentation']
            sliver_seg = qmisc.uncrop(sliver_datap['segmentation'],
                                      sliver_datap['crinfo'], data3d_a.shape)
        else:
            sliver_seg = sliver_datap['data3d']

        pyed = sed3.sed3(data3d_a, contour=sliver_seg)
        print("Sliver07 segmentation")
        pyed.show()

    if ourSegmentation != None:
        ourSegmentation = os.path.join(path_to_script, ourSegmentation)
        datap_our = reader.Get3DData(ourSegmentation, dataplus_format=True)
        #data_our = misc.obj_from_file(ourSegmentation, 'pickle')
        #data3d_our = data_our['segmentation']
        our_seg = qmisc.uncrop(datap_our['segmentation'], datap_our['crinfo'],
                               data3d_a.shape)

    if ourSegmentation != None:
        pyed = sed3.sed3(data3d_a, contour=our_seg)
        print("Our segmentation")
        pyed.show()

    if (ourSegmentation is not None) and (sliver_seg_path is not None):
        diff = (our_seg.astype(np.int8) - sliver_seg)
        diff[diff == -1] = 2
        #import ipdb; ipdb.set_trace() # BREAKPOINT
        pyed = sed3.sed3(data3d_a, contour=our_seg, seeds=diff)
        print("Sliver07 and our segmentation differences")
        pyed.show()
예제 #20
0
파일: resection.py 프로젝트: jedocs/lisa
def resection(data):
    #pyed = sed3.sed3(data['segmentation'])
    #pyed.show()
    # vessels = get_biggest_object(data['segmentation'] == data['slab']['porta'])
    vessels = data['segmentation'] == data['slab']['porta']
    # ostranění porty z více kusů, nastaví se jim hodnota liver
    #data['segmentation'][data['segmentation'] == data['slab']['porta']] = data['slab']['liver']
    #show3.show3(data['segmentation'])
    import pdb
    pdb.set_trace()

    #data['segmentation'][vessels == 1] = data['slab']['porta']
    #segm = data['segmentation']
    #pyed = sed3.sed3(vessels)
    #pyed.show()
    print("Select cut")
    lab = virtual_resection.cut_editor_old(data)
    pyed = sed3.sed3(lab)  #, contour=segm)
    pyed.show()
    l1 = 1
    l2 = 2
    #import pdb; pdb.set_trace()

    # dist se tady počítá od nul jenom v jedničkách
    dist1 = scipy.ndimage.distance_transform_edt(lab != l1)
    dist2 = scipy.ndimage.distance_transform_edt(lab != l2)

    #segm = (dist1 < dist2) * (data['segmentation'] != data['slab']['none'])
    segm = (((data['segmentation'] != 0) * (dist1 < dist2)).astype('int8') +
            (data['segmentation'] != 0).astype('int8'))

    # vizualizace 1
    #    pyed = sed3.sed3(segm)
    #    pyed.show()
    #    import pdb; pdb.set_trace()
    #    pyed = sed3.sed3(data['data3d'], contour=segm)
    #    pyed.show()
    #    import pdb; pdb.set_trace()

    # vizualizace 2
    linie = np.abs(dist1 - dist2) < 1
    pyed = sed3.sed3(data['data3d'],
                     contour=data['segmentation'] == data['slab']['liver'],
                     seeds=linie)
    pyed.show()
예제 #21
0
파일: resection.py 프로젝트: Trineon/lisa
def resection(data):
    #pyed = sed3.sed3(data['segmentation'])
    #pyed.show()
    # vessels = get_biggest_object(data['segmentation'] == data['slab']['porta'])
    vessels = data['segmentation'] == data['slab']['porta']
# ostranění porty z více kusů, nastaví se jim hodnota liver
    #data['segmentation'][data['segmentation'] == data['slab']['porta']] = data['slab']['liver']
    #show3.show3(data['segmentation'])
    import pdb; pdb.set_trace()

    #data['segmentation'][vessels == 1] = data['slab']['porta']
    #segm = data['segmentation']
    #pyed = sed3.sed3(vessels)
    #pyed.show()
    print ("Select cut")
    lab = virtual_resection.cut_editor_old(data)
    pyed = sed3.sed3(lab )#, contour=segm)
    pyed.show()
    l1 = 1
    l2 = 2
    #import pdb; pdb.set_trace()

    # dist se tady počítá od nul jenom v jedničkách
    dist1 = scipy.ndimage.distance_transform_edt(lab != l1)
    dist2 = scipy.ndimage.distance_transform_edt(lab != l2)




    #segm = (dist1 < dist2) * (data['segmentation'] != data['slab']['none'])
    segm = (((data['segmentation'] != 0) * (dist1 < dist2)).astype('int8') + (data['segmentation'] != 0).astype('int8'))

# vizualizace 1
#    pyed = sed3.sed3(segm)
#    pyed.show()
#    import pdb; pdb.set_trace()
#    pyed = sed3.sed3(data['data3d'], contour=segm)
#    pyed.show()
#    import pdb; pdb.set_trace()

# vizualizace 2
    linie = np.abs(dist1 - dist2) < 1
    pyed = sed3.sed3(data['data3d'], contour = data['segmentation']==data['slab']['liver'] ,seeds = linie)
    pyed.show()
예제 #22
0
파일: lisaWindow.py 프로젝트: kunesj/lisa
    def compareSegmentationWithFile(self):
        """
        Function make GUI for reading segmentaion file to compare it with
        actual segmentation using Sliver methodics. It calls
        organ_segmentation function to do the work.
        """
        self.statusBar().showMessage('Reading segmentation from file ...')
        QApplication.processEvents()
        logger.debug("import segmentation from file to compare by sliver")
        logger.debug(str(self.oseg.crinfo))
        logger.debug(str(self.oseg.data3d.shape))
        logger.debug(str(self.oseg.segmentation.shape))
        if 'loadcomparedir' in self.oseg.cache.data.keys():
            directory = self.oseg.cache.get('loadcomparedir')
        else:
            directory = self.oseg.input_datapath_start
        #
        seg_path = self.__get_datafile(
            app=True,
            directory=directory
        )
        if seg_path is None:
            self.statusBar().showMessage('No data path specified!')
            return
        evaluation, segdiff = \
            self.oseg.sliver_compare_with_other_volume_from_file(seg_path)
        print 'Evaluation: ', evaluation
        # print 'Score: ', score

        text = self.__evaluation_to_text(evaluation)

        segdiff[segdiff == -1] = 2
        logger.debug('segdif unique ' + str(np.unique(segdiff)))

        QApplication.processEvents()
        try:

            ed = sed3.sed3qt(
                self.oseg.data3d,
                seeds=segdiff,
                # contour=(self.oseg.segmentation == self.oseg.slab['liver'])
                contour=self.oseg.segmentation
            )
            ed.exec_()
        except:
            ed = sed3.sed3(
                self.oseg.data3d,
                seeds=segdiff,
                contour=(self.oseg.segmentation == self.oseg.slab['liver'])
            )
            ed.show()

        head, teil = os.path.split(seg_path)
        self.oseg.cache.update('loadcompatext_seg_dataredir', head)
        self.setLabelText(self.segBody.lblSegData, text)
        self.statusBar().showMessage('Ready')
예제 #23
0
    def compareSegmentationWithFile(self):
        """
        Function make GUI for reading segmentaion file to compare it with
        actual segmentation using Sliver methodics. It calls
        organ_segmentation function to do the work.
        """
        self.statusBar().showMessage('Reading segmentation from file ...')
        QApplication.processEvents()
        logger.debug("import segmentation from file to compare by sliver")
        logger.debug(str(self.oseg.crinfo))
        logger.debug(str(self.oseg.data3d.shape))
        logger.debug(str(self.oseg.segmentation.shape))
        if 'loadcomparedir' in self.oseg.cache.data.keys():
            directory = self.oseg.cache.get('loadcomparedir')
        else:
            directory = self.oseg.input_datapath_start
        #
        seg_path = self.__get_datafile(
            app=True,
            directory=directory
        )
        if seg_path is None:
            self.statusBar().showMessage('No data path specified!')
            return
        evaluation, segdiff = \
            self.oseg.sliver_compare_with_other_volume_from_file(seg_path)
        print 'Evaluation: ', evaluation
        # print 'Score: ', score

        text = self.__evaluation_to_text(evaluation)

        segdiff[segdiff == -1] = 2
        logger.debug('segdif unique ' + str(np.unique(segdiff)))

        QApplication.processEvents()
        try:

            ed = sed3.sed3qt(
                self.oseg.data3d,
                seeds=segdiff,
                # contour=(self.oseg.segmentation == self.oseg.slab['liver'])
                contour=self.oseg.segmentation
            )
            ed.exec_()
        except:
            ed = sed3.sed3(
                self.oseg.data3d,
                seeds=segdiff,
                contour=(self.oseg.segmentation == self.oseg.slab['liver'])
            )
            ed.show()

        head, teil = os.path.split(seg_path)
        self.oseg.cache.update('loadcomparedir', head)
        # self.setLabelText(self.text_seg_data, text)
        self.statusBar().showMessage('Ready')
예제 #24
0
def virtual_resection_visualization(data, segm, dist1, dist2, cut,
                                    interactivity=True):
    v1, v2 = liver_spit_volume_mm3(segm, data['voxelsize_mm'])

    if interactivity:
        print "Liver volume: %.4g l" % ((v1 + v2) * 1e-6)
        print "volume1: %.4g l  (%.3g %%)" % (
            (v1) * 1e-6, 100 * v1 / (v1 + v2))
        print "volume2: %.4g l  (%.3g %%)" % (
            (v2) * 1e-6, 100 * v2 / (v1 + v2))

    # pyed = sed3.sed3(segm)
    # pyed.show()
    # import pdb; pdb.set_trace()
    linie = (((data['segmentation'] != 0) *
              (np.abs(dist1 - dist2) < 1))).astype(np.int8)
    linie_vis = 2 * linie
    linie_vis[cut == 1] = 1
    linie_vis = linie_vis.astype(np.int8)
    if interactivity:
        pyed = sed3.sed3(
            data['data3d'],
            seeds=linie_vis,
            contour=(data['segmentation'] != 0))
        pyed.show()

    # import pdb; pdb.set_trace()

    # show3.show3(data['segmentation'])

    slab = {
        'liver': 1,
        'porta': 2,
        'resected_liver': 3,
        'resected_porta': 4}

    slab.update(data['slab'])

    data['slab'] = slab

    data['slab']['resected_liver'] = 3
    data['slab']['resected_porta'] = 4

    mask_resected_liver = (
        (segm == 1) & (data['segmentation'] == data['slab']['liver']))
    mask_resected_porta = (
        (segm == 1) & (data['segmentation'] == data['slab']['porta']))

    data['segmentation'][mask_resected_liver] = \
        data['slab']['resected_liver']
    data['segmentation'][mask_resected_porta] = \
        data['slab']['resected_porta']

    logger.debug('resection_old() end')
    return data
예제 #25
0
파일: sed_test.py 프로젝트: mjirik/sed3
    def test_interactive_test(self):
        import sed3
        import numpy as np

        img = np.zeros([10, 10, 15])
        img[6:9, 2:7, 1:5] = 1
        img[7:9, 3:9, 8:14] = 2

        ed = sed3.sed3(img)
        ed.show()
        print(ed.seeds)
예제 #26
0
파일: sed_test.py 프로젝트: mjirik/sed3
    def test_run_without_show(self):
        import sed3
        import numpy as np

        img = np.zeros([10, 10, 15])
        img[6:9, 2:7, 1:5] = 1
        img[7:9, 3:9, 8:14] = 2

        ed = sed3.sed3(img)
        # ed.show()
        print(ed.seeds)
예제 #27
0
    def test_interactive_test(self):
        import sed3
        import numpy as np

        img = np.zeros([10, 10, 15])
        img[6:9, 2:7, 1:5] = 1
        img[7:9, 3:9, 8:14] = 2

        ed = sed3.sed3(img)
        ed.show()
        print(ed.seeds)
예제 #28
0
    def test_run_without_show(self):
        import sed3
        import numpy as np

        img = np.zeros([10, 10, 15])
        img[6:9, 2:7, 1:5] = 1
        img[7:9, 3:9, 8:14] = 2

        ed = sed3.sed3(img)
        # ed.show()
        print(ed.seeds)
예제 #29
0
파일: sed_qt_test.py 프로젝트: kunesj/sed3
    def buttonClicked(self):
        print("button")
        import sed3
        import numpy as np

        img = np.zeros([10, 10, 15])
        img[6:9, 2:7, 1:5] = 1
        img[7:9, 3:9, 8:14] = 2

        ed = sed3.sed3(img)
        ed.show()
        print("konec sed3")
예제 #30
0
def annotate(number_of_scans):  #annotation starting from scan 1
    '''
    Annotate the data form 3DIrcad1 dataset, starting from scan 1, up to scan passed in param.
    
    Save the labels to an excel file 'tabulka.xlsx'.
    '''
    df = pd.DataFrame(columns=[
        'Ircad ID', 'Mark 1 slice id', 'Mark 2 slice id', 'Mark 3 slice id',
        'Mark 4 slice id'
    ])

    for i in range(number_of_scans):
        dr = io3d.DataReader()
        pth = io3d.datasets.join_path('medical/orig/3Dircadb1.{}/'.format(i +
                                                                          1),
                                      get_root=True)
        datap = dr.Get3DData(pth + "PATIENT_DICOM/", dataplus_format=True)
        datap_labelled = dr.Get3DData(pth + 'MASKS_DICOM/liver',
                                      dataplus_format=True)

        ed = sed3.sed3(datap['data3d'],
                       contour=datap_labelled['data3d'],
                       windowW=400,
                       windowC=40)
        ed.show()

        nz = np.nonzero(ed.seeds)
        ids = np.unique(nz[0])
        order = input("Did liver end before kidney started? (y/n)")
        if order == "y":
            df = df.append(
                {
                    'Ircad ID': i + 1,
                    'Mark 1 slice id': ids[0],
                    'Mark 2 slice id': ids[1],
                    'Mark 3 slice id': ids[2],
                    'Mark 4 slice id': ids[3]
                },
                ignore_index=True)
        elif order == "n":
            df = df.append(
                {
                    'Ircad ID': i + 1,
                    'Mark 1 slice id': ids[0],
                    'Mark 2 slice id': ids[2],
                    'Mark 3 slice id': ids[1],
                    'Mark 4 slice id': ids[3]
                },
                ignore_index=True)
        else:
            print("ERROR")
            break
    df.to_excel('tabulka.xlsx', sheet_name='List1', index=False)
예제 #31
0
def one_exp_set_training(inputdata,
                         tile_shape,
                         feature_fcn_plus_params,
                         classif_fcn_plus_params,
                         use_voxelsize_norm=False,
                         working_voxelsize_mm=[1, 1, 1],
                         visualization=False):
    """
    Training of experiment.
    """
    features_t_all = []
    labels_train_lin_all = []
    indata_len = len(inputdata['data'])
    features_t_all = []
    # indata_len = 3
    classif_fcn, classif_fcn_params = classif_fcn_plus_params
    logger.debug('number of data files ' + str(indata_len))

    for i in range(0, indata_len):
        data3d_orig, data3d_seg, voxelsize_mm = read_data_orig_and_seg(
            inputdata, i)

        if use_voxelsize_norm:
            data3d_orig, data3d_seg = norm_voxelsize(data3d_orig, data3d_seg,
                                                     voxelsize_mm,
                                                     working_voxelsize_mm)

        if visualization:
            pyed = sed3.sed3(data3d_orig, contour=data3d_seg)
            pyed.show()
        logger.debug('data shape ' + str(data3d_orig.shape))
        fv_t = get_features_in_tiles(data3d_orig, data3d_seg, tile_shape,
                                     feature_fcn_plus_params[0],
                                     feature_fcn_plus_params[1])
        cidxs, features_t, seg_cover_t = fv_t
        labels_train_lin_float = np.array(seg_cover_t)
        labels_train_lin = (labels_train_lin_float > 0.5).astype(
            np.int8).tolist()

        features_t_all = features_t_all + features_t
        labels_train_lin_all = labels_train_lin_all + labels_train_lin

    # if there are named variables use dict unpacking
    if isinstance(classif_fcn_params, dict):
        clf = classif_fcn(**classif_fcn_params)
    else:
        clf = classif_fcn(*classif_fcn_params)

    clf.fit(features_t_all, labels_train_lin_all)
    # import ipdb; ipdb.set_trace()  # noqa BREAKPOINT
    return clf
예제 #32
0
def one_exp_set_training(inputdata, tile_shape,
                         feature_fcn_plus_params,
                         classif_fcn_plus_params,
                         use_voxelsize_norm=False,
                         working_voxelsize_mm=[1, 1, 1],
                         visualization=False):
    """
    Training of experiment.
    """
    features_t_all = []
    labels_train_lin_all = []
    indata_len = len(inputdata['data'])
    features_t_all = []
    # indata_len = 3
    classif_fcn, classif_fcn_params = classif_fcn_plus_params
    logger.debug('number of data files ' + str(indata_len))

    for i in range(0, indata_len):
        data3d_orig, data3d_seg, voxelsize_mm = read_data_orig_and_seg(
            inputdata, i)

        if use_voxelsize_norm:
            data3d_orig, data3d_seg = norm_voxelsize(
                data3d_orig, data3d_seg,
                voxelsize_mm, working_voxelsize_mm)

        if visualization:
            pyed = sed3.sed3(data3d_orig,
                                                 contour=data3d_seg)
            pyed.show()
        logger.debug('data shape ' + str(data3d_orig.shape))
        fv_t = get_features_in_tiles(data3d_orig, data3d_seg, tile_shape,
                                     feature_fcn_plus_params[0],
                                     feature_fcn_plus_params[1])
        cidxs, features_t, seg_cover_t = fv_t
        labels_train_lin_float = np.array(seg_cover_t)
        labels_train_lin = (
            labels_train_lin_float > 0.5).astype(np.int8).tolist()

        features_t_all = features_t_all + features_t
        labels_train_lin_all = labels_train_lin_all + labels_train_lin

    # if there are named variables use dict unpacking
    if isinstance(classif_fcn_params, dict):
        clf = classif_fcn(**classif_fcn_params)
    else:
        clf = classif_fcn(*classif_fcn_params)

    clf.fit(features_t_all, labels_train_lin_all)
    # import ipdb; ipdb.set_trace()  # noqa BREAKPOINT
    return clf
예제 #33
0
    def test_ms_seg(self):
        """
        Test multiscale segmentation
        """

        img, seg, seeds = self.make_data(64, 20)
        segparams = {
                # 'method':'graphcut',
                'method':'multiscale_graphcut',
                'use_boundary_penalties': False,
                'boundary_dilatation_distance': 2,
                'boundary_penalties_weight': 1,
                'block_size': 8,
                'tile_zoom_constant': 1
                }
        gc = pycut.ImageGraphCut(img, segparams=segparams)
        gc.set_seeds(seeds)
        gc.run()
        # import sed3
        # ed = sed3.sed3(gc.segmentation==0, contour=seg)
        # ed.show()

        self.assertLess(
                np.sum(
                    np.abs(
                        (gc.segmentation == 0).astype(np.int8) - 
                        seg.astype(np.int8))
                    )
                , 600)


# different resolution
        # sz = [128,128,128]
        sz = [70,70,70]
        sz = [90,90,90]
        sz = [100,100,100]
        sz = [200,200,200]
        sz1 = 208
        sz = [sz1, sz1, sz1]
        img2 = pycut.zoom_to_shape(img, sz, np.uint8)
        seg2 = pycut.zoom_to_shape(seg, sz, np.uint8)
        seeds2 = pycut.zoom_to_shape(seeds, sz, np.int8)

        segparams['tile_zoom_constant'] = 0.8
        gc = pycut.ImageGraphCut(img2, segparams=segparams)
        gc.set_seeds(seeds2)
        gc.run()
        import sed3
        ed = sed3.sed3(gc.segmentation==0, contour=seg2)
        ed.show()
예제 #34
0
    def test_branch_labels_just_in_module(self):
        import lisa.organ_segmentation
        import io3d
        # datap = io3d.datasets.generate_abdominal()
        datap = io3d.datasets.generate_synthetic_liver(return_dataplus=True)
        oseg = lisa.organ_segmentation.OrganSegmentation()
        oseg.import_dataplus(datap)
        bl = lisa.virtual_resection.label_volumetric_vessel_tree(oseg, "porta")

        import sed3
        ed = sed3.sed3(bl, contour=datap["segmentation"])
        ed.show()

        self.assertEqual(True, True)
예제 #35
0
    def test_branch_labels_from_oseg(self):
        import lisa.organ_segmentation
        import io3d
        # datap = io3d.datasets.generate_abdominal()
        datap = io3d.datasets.generate_synthetic_liver(return_dataplus=True)
        oseg = lisa.organ_segmentation.OrganSegmentation()
        oseg.import_dataplus(datap)
        oseg.label_volumetric_vessel_tree("porta")

        import sed3
        ed = sed3.sed3(oseg.segmentation)
        ed.show()

        self.assertEqual(True, True)
예제 #36
0
파일: idxformat.py 프로젝트: kunesj/io3d
    def read_bin_file(self, filename, bitsperblock=8):
        bytesperblock = bitsperblock / 8
        if bytesperblock == 2:
            dtype = np.uint16
        else:
            logger.error("Unknown data type")

        data = np.fromfile(filename, dtype=np.uint8)
        shape = [1024, 1024, 10]
        d3 = np.reshape(data[:np.prod(shape)],shape)

        ed = sed3.sed3(d3[:200, :200, :])
        ed.show()
        print("all ok")
예제 #37
0
    def test_ms_seg_compared_with_different_resolution(self):
        """
        Test multiscale segmentation
        """

        img, seg, seeds = self.make_data(64, 20)
        segparams = {
                # 'method':'graphcut',
                'method': 'multiscale_graphcut',
                'use_boundary_penalties': False,
                'boundary_dilatation_distance': 2,
                'boundary_penalties_weight': 1,
                'block_size': 8,
                'tile_zoom_constant': 1
                }
        gc = pycut.ImageGraphCut(img, segparams=segparams)
        gc.set_seeds(seeds)
        gc.run()
        # import sed3
        # ed = sed3.sed3(gc.segmentation==0, contour=seg)
        # ed.show()

        self.assertLess(
                np.sum(
                    np.abs(
                        (gc.segmentation == 0).astype(np.int8) - seg.astype(np.int8))
                    ),
                600)


# different resolution
        # sz = [128,128,128]
        sz = [70,70,70]
        sz = [90,90,90]
        sz = [100,100,100]
        sz = [200,200,200]
        sz1 = 70
        sz = [sz1, sz1, sz1]
        img2 = pycut.zoom_to_shape(img, sz, np.uint8)
        seg2 = pycut.zoom_to_shape(seg, sz, np.uint8)
        seeds2 = pycut.zoom_to_shape(seeds, sz, np.int8)

        segparams['tile_zoom_constant'] = 0.8
        gc = pycut.ImageGraphCut(img2, segparams=segparams)
        gc.set_seeds(seeds2)
        gc.run()
        import sed3
        ed = sed3.sed3(gc.segmentation==0, contour=seg2)
        ed.show()
예제 #38
0
파일: idxformat.py 프로젝트: mjirik/io3d
    def read_bin_file(self, filename, bitsperblock=8):
        bytesperblock = bitsperblock / 8
        if bytesperblock == 2:
            dtype = np.uint16
        else:
            logger.error("Unknown data type")

        data = np.fromfile(filename, dtype=np.uint8)
        shape = [1024, 1024, 10]
        d3 = np.reshape(data[:np.prod(shape)],shape)

        import sed3
        ed = sed3.sed3(d3[:200, :200, :])
        ed.show()
        print("all ok")
예제 #39
0
    def test_branch_labels_with_gui_just_in_module(self):
        import lisa.organ_segmentation
        import io3d
        # datap = io3d.datasets.generate_abdominal()
        datap = io3d.datasets.generate_synthetic_liver(return_dataplus=True)
        oseg = lisa.organ_segmentation.OrganSegmentation()
        oseg.import_dataplus(datap)
        labeled_branches = lisa.virtual_resection.label_volumetric_vessel_tree(
            oseg, "porta")
        data3d = datap["data3d"]
        segmentation = datap["segmentation"]
        slab = datap["slab"]
        organ_label = "liver"

        seeds = np.zeros_like(data3d, dtype=np.int)
        seeds[40, 125, 166] = 1
        seeds[40, 143, 130] = 2
        seeds[40, 125, 115] = 3

        seglabel1 = labeled_branches[seeds == 1][0]
        seglabel2 = labeled_branches[seeds == 2][0]
        seglabel3 = labeled_branches[seeds == 3][0]
        import imma.measure
        import imma.image_manipulation
        import imma.image_manipulation as ima

        # import sed3
        # ed = sed3.sed3(labeled_branches)  # , contour=datap["segmentation"])
        # ed.show()
        organseg = ima.select_labels(segmentation, organ_label, slab)

        organ_split, connected = lisa.virtual_resection.split_tissue_on_bifurcation(
            labeled_branches, seglabel1, [seglabel2, seglabel3], organseg)

        import sed3
        # ed = sed3.sed3(labeled_branches, contour=organ_split)
        ed = sed3.sed3(organ_split)
        ed.show()

        self.assertTrue(np.array_equal(np.unique(organ_split), [0, 1, 2]))

        self.assertGreater(np.sum(organ_split == 0), 1000,
                           "At least some background expected")
        self.assertGreater(np.sum(organ_split == 1), 1000,
                           "At least some object expected")
        self.assertGreater(np.sum(organ_split == 2), 1000,
                           "At least some object expected")
예제 #40
0
    def synthetic_liver_template(self, params):
        """
        Function uses organ_segmentation  for synthetic box object
        segmentation.
        """
        # dcmdir = os.path.join(path_to_script,'./../sample_data/matlab/examples/sample_data/DICOM/digest_article/') # noqa
        # data

        data3d, segm, voxelsize_mm, slab, seeds_liver, seeds_porta = io3d.datasets.generate_synthetic_liver(
        )

        # seeds
        #         seeds = np.zeros(data3d.shape, np.int8)
        #         seeds[40:55, 90:120, 70:110] = 1
        #         seeds[30:45, 190:200, 40:90] = 2
        # [mm]  10 x 10 x 10        # voxelsize_mm = [1, 4, 3]
        metadata = {'voxelsize_mm': voxelsize_mm}

        oseg = organ_segmentation.OrganSegmentation(None,
                                                    data3d=data3d,
                                                    metadata=metadata,
                                                    seeds=seeds_liver,
                                                    working_voxelsize_mm=5,
                                                    manualroi=False,
                                                    autocrop=False,
                                                    **params)

        oseg.ninteractivity()

        volume = oseg.get_segmented_volume_size_mm3("liver")
        self.assertGreater(volume, 570000,
                           "Liver volume should have proper size")
        self.assertLess(volume, 640000, "Liver volume should have proper size")

        oseg.portalVeinSegmentation(interactivity=False, threshold=180)

        volume_porta = oseg.get_segmented_volume_size_mm3("porta")
        self.assertGreater(volume_porta, 9000,
                           "Liver volume should have proper size")
        self.assertLess(volume_porta, 11000,
                        "Liver volume should have proper size")
        import sed3
        ed = sed3.sed3(data3d, contour=(oseg.segmentation))
        ed.show()
        oseg.saveVesselTree('porta')
예제 #41
0
def differencing(path, res, axis):
    sez = list()
    teacher = list()
    dr = io3d.DataReader()
    datap = dr.Get3DData(path, dataplus_format=True)
    ed = sed3.sed3(datap['data3d'])
    datap['data3d'] = misc.resize_to_shape(datap['data3d'], [datap['data3d'].shape[0],100,100])
    ed.show()

    try:
        under = np.where(ed.seeds == 1)[0][0]
    except:
        under = None
    try:
        over = np.where(ed.seeds == 3)[0][0]
    except:
        over = None
    number_of_slice = np.shape(ed.seeds)[0]
    c = list()
    if under is None and over is None:
        return [],[]
    elif under is None or over is None:
        print u'byla zadana jenom jedna mez zadejte obe nebo zadnou'
        w, y = differencing(path, res)
        return w, y
    if over > under:
        c = [1 for i in range(under)]
        b = [2 for i in range(over-under)]
        c.extend(b)
        b = [3 for i in range(number_of_slice-over)]
        c.extend(b)
    else:
        c = [3 for i in range(over)]
        b = [2 for i in range(under - over)]
        c.extend(b)
        b = [1 for i in range(number_of_slice - under)]
        c.extend(b)
        over, under = under, over
    for i in range(number_of_slice):
        a = datap['data3d'][i,:,:]
        x = c[i]
        teacher.append(x)
        sez.append(a)

    return sez, teacher, under, over
예제 #42
0
    def test_skeleton_problem_with_some_types_of_rectangular_structures(self):
        # TODO fix bug in skeletonization algorithm.
        # It ignores vertical structures and horizontal structures. Sometimes is just change the shape inough.
        #
        import io3d.datasets

        data3d, segm, voxelsize_mm, slab, seeds_liver, seeds_porta = (
            io3d.datasets.generate_synthetic_liver())

        data_segm = segm == 2

        # data_segm[39:44, 120:170, 100:111] = True
        # data_segm[39:44, 50:120, 60:70] = True
        # data_segm[39:44, 60:120, 100:105] = True
        # data_segm[39:44, 60:120, 110:110 + 5] = True
        data_segm[39:44, 120:130, 120:240] = True
        data_segm[39:44, 60:120, 120:120 + 6] = True
        data_segm[39:44, 60:120, 130:130 + 7] = True
        data_segm[39:44, 60:120, 140:140 + 8] = True
        data_segm[39:44, 60:120, 160:160 + 9] = True
        data_segm[39:44, 60:120, 180:180 + 10] = True
        data_segm[39:44, 60:120, 200:200 + 11] = True
        data_segm[39:44, 60:120, 220:220 + 12] = True
        # data_segm[39:44, 60:120, 120:126] = True
        # data_segm[39:44, 60:120, 130:140] = True
        # data_segm[39:44, 60:120, 150:151] = True
        # data_segm[39:44, 60:120, 160:162] = True

        data_skelet = skelet3d.skelet3d(data_segm)

        import sed3

        ed = sed3.sed3(data_skelet,
                       contour=data_segm)  # , contour=branche_label)
        ed.show()

        self.assertEqual(
            np.max(data_skelet[39:44, 60:100, 140:140 + 8]),
            1,
            "In this branche is expected skeleton",
        )
        self.assertEqual(np.min(data_skelet), 0)
        self.assertEqual(np.max(data_skelet), 1)
예제 #43
0
def preparedata(inputfile,
                outputfile='prepared.pklz',
                crop=None,
                threshold=None,
                visualization=False,
                zero_border=0,
                label=2):
    """

    :param inputfile: path to input file or directory, See io3d library for available file formats.
    :param outputfile: path to output file
    :param crop: crop parameters with fallowing format [[minX, maxX], [minY, maxY], [minZ. maxZ]]
    :param threshold:  set threshold for data
    :param visualization: set true to show visualization
    :param zero_border: data border can be set to zero. zero_border. Default is 0
    :param label: set segmentation output label. Default is 2
    :return:
    """
    datap = io3d.datareader.read(inputfile, dataplus_format=True)
    if crop is not None:
        datap['data3d'] = datap['data3d'][crop[0][0]:crop[0][1],
                                          crop[1][0]:crop[1][1],
                                          crop[2][0]:crop[2][1]]
        if 'segmentation' in datap.keys():
            datap['segmentation'] = datap['segmentation'][
                crop[0][0]:crop[0][1], crop[1][0]:crop[1][1],
                crop[2][0]:crop[2][1]]

    if threshold is not None:
        datap['segmentation'] = (datap['data3d'] > threshold).astype(
            np.uint8) * label
    if visualization:
        ed = sed3.sed3(datap['data3d'], contour=datap['segmentation'])
        ed.show()
    if zero_border > 0:
        datap['segmentation'][:zero_border, :, :] = 0
        datap['segmentation'][:, :zero_border, :] = 0
        datap['segmentation'][:, :, :zero_border] = 0
        datap['segmentation'][-zero_border:, :, :] = 0
        datap['segmentation'][:, -zero_border:, :] = 0
        datap['segmentation'][:, :, -zero_border:] = 0
    # datap['segmentation'][datap['segmentation'] > 0] = label
    io3d.datawriter.write(datap, outputfile)
예제 #44
0
    def showSegmentedData(self):
        skan = SkeletonAnalyser(
            self.data3d_skel,
            volume_data=self.data3d_thr,
            voxelsize_mm=self.metadata['voxelsize_mm'])
        data3d_nodes_vis = skan.sklabel.copy()
        del(skan)

        # edges
        data3d_nodes_vis[data3d_nodes_vis > 0] = 1
        # nodes and terminals
        data3d_nodes_vis[data3d_nodes_vis < 0] = 2

        if not self.nogui:
            pyed = se.sed3(
                self.data3d,
                seeds=(data3d_nodes_vis).astype(np.int8),
                contour=self.data3d_thr.astype(np.int8)
            )
            pyed.show()
예제 #45
0
    def test_real_data_segmentation(self):
        import lisa.dataset
        app = QApplication(sys.argv)

        dcmdir = os.path.join(lisa.dataset.sample_data_path(), 'jatra_5mm')

        oseg = organ_segmentation.OrganSegmentation(dcmdir,
                                                    working_voxelsize_mm=4)
        oseg.add_seeds_mm([81], [120], [120],
                          label=1, radius=30)
        oseg.add_seeds_mm([81], [170, 220, 250], [250, 250, 200],
                          label=2, radius=30)
        oseg.add_seeds_mm([100], [170], [140],
                          label=10, radius=5)
        # oseg.interactivity(min_val=-200, max_val=200)
        oseg.ninteractivity()

        ed = sed3.sed3(oseg.data3d, contour=oseg.segmentation, seeds=oseg.seeds)
        ed.show()

        oseg.portalVeinSegmentation(seeds=(oseg.seeds==10))
예제 #46
0
    def test_real_data_segmentation(self):
        import lisa.dataset
        app = QApplication(sys.argv)

        dcmdir = os.path.join(lisa.dataset.sample_data_path(), 'jatra_5mm')

        oseg = organ_segmentation.OrganSegmentation(dcmdir,
                                                    working_voxelsize_mm=4)
        oseg.add_seeds_mm([81], [120], [120],
                          label=1, radius=30)
        oseg.add_seeds_mm([81], [170, 220, 250], [250, 250, 200],
                          label=2, radius=30)
        oseg.add_seeds_mm([100], [170], [140],
                          label=10, radius=5)
        # oseg.interactivity(min_val=-200, max_val=200)
        oseg.ninteractivity()

        ed = sed3.sed3(oseg.data3d, contour=oseg.segmentation, seeds=oseg.seeds)
        ed.show()

        oseg.portalVeinSegmentation(seeds=(oseg.seeds==10))
예제 #47
0
def main():

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

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

    #logger.debug('input params')

    ## read confguraton from file, use default values from OrganSegmentation

    # input parser
    parser = argparse.ArgumentParser(
        description=' Show dicom data with overlay')
    parser.add_argument('-i',
                        '--inputdatapath',
                        default='',
                        help='path to data dir')
    args_obj = parser.parse_args()
    args = vars(args_obj)
    #print args["arg"]

    reader = datareader.DataReader()
    data3d, metadata = reader.Get3DData(args['inputdatapath'], qt_app=None)
    overlays = reader.GetOverlay()
    overlay = np.zeros(data3d.shape, dtype=np.int8)
    print "overlays ", overlays.keys()
    for key in overlays:
        overlay += overlays[key]

    #import ipdb; ipdb.set_trace() # BREAKPOINT
    pyed = sed3.sed3(data3d, contour=overlay)
    pyed.show()

    #print savestring
    #    import pdb; pdb.set_trace()
    return
예제 #48
0
    def simple_segmentation(self, data3d, voxelsize_mm):
        simple_seg = np.zeros(data3d.shape)
        #definice konvoluční masky
        KONV_MASK = np.ones([10, 10, 10], float)
        KONV_MASK = KONV_MASK / 9.0

        #definice konvoluční funkce - param a - matice m*n kterou budeme přenásobovat konvoluční maticí, b - Konvoluční maska m*n

        # nalezení kostí
        simple_seg = data3d > BONES
        #simple_seg[(simple_seg.shape[0]/5)*4:simple_seg.shape[0]] = 0

        #nalzení páteře
        spine_finder = scipy.ndimage.filters.convolve(
            (simple_seg).astype(np.int), KONV_MASK)
        #pyed = sed3.sed3(simple_seg)
        #

        simple_seg += ((spine_finder > 25) * SPINE_ID)
        pyed = sed3.sed3(simple_seg)
        pyed.show()
        return simple_seg
예제 #49
0
def main():

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

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

    #logger.debug('input params')

## read confguraton from file, use default values from OrganSegmentation

    # input parser
    parser = argparse.ArgumentParser(
        description=' Show dicom data with overlay')
    parser.add_argument('-i', '--inputdatapath',
                        default='',
                        help='path to data dir')
    args_obj = parser.parse_args()
    args = vars(args_obj)
    #print args["arg"]

    reader = datareader.DataReader()
    data3d, metadata = reader.Get3DData(args['inputdatapath'], qt_app=None)
    overlays = reader.GetOverlay()
    overlay = np.zeros(data3d.shape, dtype=np.int8)
    print "overlays ", overlays.keys()
    for key in overlays:
        overlay += overlays[key]

    #import ipdb; ipdb.set_trace() # BREAKPOINT
    pyed = sed3.sed3(data3d, contour=overlay)
    pyed.show()

    #print savestring
#    import pdb; pdb.set_trace()
    return
예제 #50
0
    def simple_segmentation(self, data3d, voxelsize_mm):
        simple_seg = np.zeros(data3d.shape )
        #definice konvoluční masky
        KONV_MASK = np.ones([10,10,10], float)
        KONV_MASK = KONV_MASK/9.0;


        #definice konvoluční funkce - param a - matice m*n kterou budeme přenásobovat konvoluční maticí, b - Konvoluční maska m*n


        # nalezení kostí
        simple_seg = data3d > BONES
        #simple_seg[(simple_seg.shape[0]/5)*4:simple_seg.shape[0]] = 0

        #nalzení páteře
        spine_finder = scipy.ndimage.filters.convolve((simple_seg).astype(np.int), KONV_MASK)
        #pyed = sed3.sed3(simple_seg)
        #

        simple_seg += ((spine_finder>25)*SPINE_ID)
        pyed = sed3.sed3(simple_seg)
        pyed.show()
        return simple_seg
예제 #51
0
    def test_skeleton_problem_with_some_types_of_rectangular_structures(self):
        # TODO fix bug in skeletonization algorithm.
        # It ignores vertical structures and horizontal structures. Sometimes is just change the shape inough.
        #
        import io3d.datasets
        data3d, segm, voxelsize_mm, slab, seeds_liver, seeds_porta = io3d.datasets.generate_synthetic_liver()

        data_segm = segm == 2

        # data_segm[39:44, 120:170, 100:111] = True
        # data_segm[39:44, 50:120, 60:70] = True
        # data_segm[39:44, 60:120, 100:105] = True
        # data_segm[39:44, 60:120, 110:110 + 5] = True
        data_segm[39:44, 120:130, 120:240] = True
        data_segm[39:44, 60:120, 120:120 + 6] = True
        data_segm[39:44, 60:120, 130:130 + 7] = True
        data_segm[39:44, 60:120, 140:140 + 8] = True
        data_segm[39:44, 60:120, 160:160 + 9] = True
        data_segm[39:44, 60:120, 180:180 + 10] = True
        data_segm[39:44, 60:120, 200:200 + 11] = True
        data_segm[39:44, 60:120, 220:220 + 12] = True
        # data_segm[39:44, 60:120, 120:126] = True
        # data_segm[39:44, 60:120, 130:140] = True
        # data_segm[39:44, 60:120, 150:151] = True
        # data_segm[39:44, 60:120, 160:162] = True

        data_skelet = skelet3d.skelet3d(data_segm)

        import sed3
        ed = sed3.sed3(data_skelet, contour=data_segm)# , contour=branche_label)
        ed.show()

        self.assertEqual(np.max(
            data_skelet[39:44, 60:100, 140:140 + 8]
        ), 1, "In this branche is expected skeleton")
        self.assertEqual(np.min(data_skelet), 0)
        self.assertEqual(np.max(data_skelet), 1)
예제 #52
0
        default='mesh_geom.vtk',
        help='temp file used in processing')
    parser.add_argument(
        '-d', '--degrad', type=int,
        default=4,
        help='data degradation, default 4')
    parser.add_argument(
        '-l', '--labels', type=int, metavar='N', nargs='+',
        default=[1],
        help='segmentation labels, default 1')
    parser.add_argument(
        '-s', '--show', action='store_true',
        help='Show mode')
    args = parser.parse_args()

    dr = io3d.DataReader()
    data = dr.Get3DData(args.inputfile, dataplus_format=True)
    # args.label = np.array(eval(args.label))
    # print args.label
    # import pdb; pdb.set_trace()
    ds = data['segmentation']

    if args.show:
        dsel = select_labels(ds, args.labels)
        import sed3
        ed = sed3.sed3(dsel.astype(np.double))
        ed.show()


    seg2stl(ds, labels=args.labels, degrad=args.degrad, outputfile=args.outputfile, tempfile=args.tempfile)
예제 #53
0
파일: lesions.py 프로젝트: mjirik/lisa
 def visualization(self):
     pyed = sed3.sed3(
         self.segmentation == self.data['slab']['lesions'])
     pyed.show()
예제 #54
0
파일: sed_test.py 프로젝트: mjirik/sed3
    def test_run_with_seeds_and_contour(self):
        import sed3
        img, seeds, segmentation = self.create_data()

        sed3.sed3(img, seeds=seeds, contour=segmentation)
예제 #55
0
        sys.exit(0)

    if args.draw is not None:
        parts = [ s.strip().lower() for s in args.draw.split(",") ]
        masks = [ obj.getPart(p) for p in parts ]
        if args.drawdepth:
            rd = ResultsDrawer(mask_depth = True, default_volume_alpha = 255)
        else:
            rd = ResultsDrawer()
        img = rd.drawImageAutocolor(data3d, voxelsize, volumes = masks)
        img.show()

    if args.show is not None:
        import sed3
        seg = obj.getPart(args.show)
        ed = sed3.sed3(data3d, contour=seg); ed.show()

    ####################################################################
    print("-----------------------------------------------------------")
    # data3d = obj.getData3D(raw=True)
    # lungs = obj.getLungs(raw=True)
    # bones = obj.getBones(raw=True)
    # vessels = obj.getVessels()
    # aorta = obj.getAorta()
    # venacava = obj.getVenaCava()

    # print(data3d.shape)
    # ed = sed3.sed3(data3d, contour=lungs); ed.show()
    # ed = sed3.sed3(data3d, contour=bones); ed.show()

    # bones_stats = obj.analyzeBones()
예제 #56
0
파일: lesions.py 프로젝트: mjirik/lisa
    def get_seeds_using_prob_class1(self, data, class1, roi=None, dens_min=20,
                                    dens_max=255,
                                    thresholdType='percOfMaxDist', percT=0.5):
        # calculates probability based on similarity of intensities
        probs, mu = tools.intensity_probability(data, std=10)
        # sed3.sed3(data).show()
        # sed3.sed3(probs).show()
        # normalizing and calculating reciprocal values
        # weights_ints = skexp.rescale_intensity(probs,
        # in_range=(0,probs.max()), out_range=(1,0))
        weights_ints = np.exp(-probs)

        weights_h = np.where(data > mu, 1 - probs, 0)
        weights_l = np.where(data < mu, 1 - probs, 0)
        # sed3.sed3(1 - probs).show()
        sed3.sed3(weights_h).show()
        sed3.sed3(weights_l).show()

        if roi is None:
            roi = np.logical_and(data >= dens_min, data <= dens_max)
        dist_data = np.where(class1 == 1, False, True)
        dist_data *= roi > 0
        # dists = distance_transform_edt(dist_data)
        # sed3.sed3(dists).show()

        # print 'dists max = %i' % dists.max()
        # print 'dists min = %i' % dists.min()
        # print 'weights_ints max = %.4f' % weights_ints.max()
        # print 'weights_ints min = %.4f' % weights_ints.min()
        # print 'probs max = %.4f' % probs.max()
        # print 'probs min = %.4f' % probs.min()

        # energy = dists * weights_ints
        energy = weights_ints
        # sed3.sed3(energy).show()

        seeds = np.zeros(data.shape, dtype=np.bool)
        if thresholdType == 'percOfMaxDist':
            seeds = energy > (percT * energy.max())
        elif thresholdType == 'mean':
            seeds = energy > 2 * (energy[np.nonzero(energy)]).mean()

        # TODO: tady je problem, ze energy je v intervalu <0.961, 1> - hrozne
        # maly rozsah
        print('energy max = %.4f' % energy.max())
        print('energy min = %.4f' % energy.min())
        print('thresh = %.4f' % (percT * energy.max()))
        print(seeds.min())
        print(seeds.max())
        print('seed perc = %.2f' % (
            (energy > percT * energy.max()).sum()/np.float(energy.nbytes)))
        sed3.sed3(seeds).show()

        # removing to small objects
        min_size_of_seed_area = 60
        print('before removing: %i' % seeds.sum())
        seeds = skimor.remove_small_objects(
            seeds, min_size=min_size_of_seed_area, connectivity=1,
            in_place=False)
        print('after removing: %i' % seeds.sum())

        all_seeds = np.zeros(data.shape, dtype=np.int)
        # allSeeds[np.nonzero(self.segmentation)] = 80
        all_seeds[np.nonzero(class1)] = 1  # zdrava tkan
        all_seeds[np.nonzero(seeds)] = 2  # outliers
        # kvuli segmentaci pomoci random walkera se omezi obraz pouze na
        # segmentovana jatra a cevy
        all_seeds = np.where(roi == 0, -1, all_seeds)

        sed3.sed3(all_seeds).show()

        return all_seeds
예제 #57
0
def segmentation(data3d, segmentation, params):
    """ Texture analysis by LBP algorithm.
    data: CT (or MRI) 3D data
    segmentation: labeled image with same size as data where label:
    1 mean liver pixels,
    -1 interesting tissuse (bones)
    0 otherwise
    """
    
    MAXPATTERNS = 10

    slices = data3d.shape[2]
    data3d = data3d.astype(np.int16)
    
    params[2] = 0
    data3d = data3d * segmentation;
    data3d = sp.ndimage.filters.gaussian_filter(data3d,params*2.5)  
    pyed = sed3.sed3(data3d)
    pyed.show()
    
    lbp = lbpLib.loadLbpLibrary()    

    lbpReftmp = (ctypes.c_long * 256)()
    lbpRef = np.zeros([MAXPATTERNS,256])

    actualpatterns = 0

    # vytvoreni referencnich LBP obrazu
    for j in range(15,data3d.shape[0]-16):
        if (actualpatterns == MAXPATTERNS) :
            break
        for k in range(15,data3d.shape[1]-16): 
            if (actualpatterns == MAXPATTERNS) :
                break
            if ((pyed.seeds[j,k,pyed.actual_slice] == 1)):                
                lbpReftmp = lbpLib.realTimeLbpImNp(lbp, data3d[j-15:j+16,k-15:k+16,pyed.actual_slice])
                for z in range(256):
                    lbpRef[actualpatterns, z] = lbpReftmp[z]
                print(lbpRef[actualpatterns,])
                actualpatterns += 1                   

    # uprava velikosti dat
    for i in range(20):
        h2 = data3d.shape[0] - i*16
        if (h2 <= 0):
            h2 = i*16
            break
    for i in range(20):
        w2 = data3d.shape[1] - i*16
        if (w2 <= 0):
            w2 = i*16
            break    
    # obdelnikova data prevedeme na ctverec 
    if (w2 >=  h2 ):     
        h2 = w2
    else :
        w2 = h2
    numOfPartsX = (w2) / 16
    numOfPartsY = (h2) / 16   
    minMaxData = np.zeros([h2,w2,data3d.shape[2]],dtype = np.float)
    lbpSlice = np.zeros([h2,w2])
      
    # hlavni cyklus vypocitavajici odezvy
    for i in range(slices):
        tempData = np.zeros([h2,w2],dtype = np.float)
        tempData[0:data3d.shape[0],0:data3d.shape[1]] = data3d[:,:,i].astype(np.float)   
        lbpSlice = lbpLib.realTimeLbpIm2ImNp(lbp, tempData.astype(np.int16))
        lbpRes = lbpLib.lbp2HistsNp(lbp, lbpSlice)
        for j in range(lbpRes.shape[0]):
            minmaxBestVal = 0
            for k in range(MAXPATTERNS):
                minmaxVal = minmax(lbpRes[j,:],lbpRef[k,:])
                if minmaxVal > minmaxBestVal : 
                    minmaxBestVal = minmaxVal
            minMaxData[16*(j/numOfPartsX):16*(j/numOfPartsX)+16,16*(j % numOfPartsX):16*(j % numOfPartsX)+16,i] = minmaxBestVal        

    # zobrazeni vysledku
    pyed2 = sed3.sed3(minMaxData)
    pyed2.show()

    return segmentation
예제 #58
0
def eval_all_from_dataset_metadata(inputdata, visualization=False,
                                   special_evaluation_function=None):
    """
    set metadata
    """
    evaluation_all = {
        'file1': [],
        'file2': [],
        'volume1_mm3': [],
        'volume2_mm3': [],
        'err1_mm3': [],
        'err2_mm3': [],
        'err1_percent': [],
        'err2_percent': [],
        'voe': [],
        'vd': [],
        'avgd': [],
        'rmsd': [],
        'processing_time': [],
        'organ_interactivity_counter': [],
        'maxd': []

    }
    for i in range(0, len(inputdata['data'])):

        reader = datareader.DataReader()
        data3d_a_path = os.path.join(inputdata['basedir'],
                                     inputdata['data'][i]['sliverseg'])
        data3d_a, metadata_a = reader.Get3DData(data3d_a_path)
        print "inputdata ", inputdata['data'][i].values()
        try:
            # if there is defined overlay
            data3d_a = reader.GetOverlay()[inputdata['data'][i][
                'overlay_number']]
            logger.info('overlay loaded')
            print 'overlay loaded'
        except:
            logger.debug("overlay not loaded")
            pass

        logger.debug('data A shape ' + str(data3d_a.shape))

        data3d_b_path = os.path.join(inputdata['basedir'],
                                     inputdata['data'][i]['ourseg'])
        obj_b = misc.obj_from_file(data3d_b_path, filetype='pickle')
        # data_b, metadata_b = reader.Get3DData(data3d_b_path)

        if 'crinfo' in obj_b.keys():
            data3d_b = qmisc.uncrop(obj_b['segmentation'],
                                    obj_b['crinfo'], data3d_a.shape)
        else:
            data3d_b = obj_b['segmentation']

        # import pdb; pdb.set_trace()
        # data3d_a = (data3d_a > 1024).astype(np.int8)
        data3d_a = (data3d_a > 0).astype(np.int8)
        data3d_b = (data3d_b > 0).astype(np.int8)

        if visualization:
            pyed = sed3.sed3(data3d_a,  # + (4 * data3d_b)
                             contour=data3d_b)
            pyed.show()

        evaluation_one = compare_volumes(data3d_a, data3d_b,
                                         metadata_a['voxelsize_mm'])
        if special_evaluation_function is not None:
            evaluation_one.update(
                special_evaluation_function(
                    data3d_a, data3d_b, metadata_a['voxelsize_mm']
            ))
        evaluation_all['file1'].append(data3d_a_path)
        evaluation_all['file2'].append(data3d_b_path)
        for key in evaluation_one.keys():
            if key not in evaluation_all.keys():
                evaluation_all[key] = []

            evaluation_all[key].append(evaluation_one[key])
        # evaluation_all['volume1_mm3'].append(evaluation_one['volume1_mm3'])
        # evaluation_all['volume2_mm3'].append(evaluation_one['volume2_mm3'])
        # evaluation_all['err1_mm3'].append(evaluation_one['err1_mm3'])
        # evaluation_all['err2_mm3'].append(evaluation_one['err2_mm3'])
        # evaluation_all['err1_percent'].append(evaluation_one['err1_percent'])
        # evaluation_all['err2_percent'].append(evaluation_one['err2_percent'])
        # evaluation_all['voe'].append(evaluation_one['voe'])
        # evaluation_all['vd'].append(evaluation_one['vd'])
        # evaluation_all['avgd'].append(evaluation_one['avgd'])
        # evaluation_all['rmsd'].append(evaluation_one['rmsd'])
        # evaluation_all['maxd'].append(evaluation_one['maxd'])
        if 'processing_time' in obj_b.keys():
            # this is only for compatibility with march2014 data
            processing_time = obj_b['processing_time']
            organ_interactivity_counter = obj_b['organ_interactivity_counter']
        else:
            try:
                processing_time = obj_b['processing_information']['organ_segmentation']['processing_time']  # noqa
                organ_interactivity_counter = obj_b['processing_information']['organ_segmentation']['organ_interactivity_counter']  # noqa
            except:
                processing_time = 0
                organ_interactivity_counter = 0
        evaluation_all['processing_time'].append(processing_time)
        evaluation_all['organ_interactivity_counter'].append(
            organ_interactivity_counter)

    return evaluation_all
예제 #59
0
파일: load_pyqt.py 프로젝트: mjirik/io3d
def show(data3dw):
    data3d = data3dw.datap["data3d"]
    import sed3
    ed = sed3.sed3qt(data3d)
    # ed = sed3.se
    # ed.show()
    ed.exec_()

if __name__ == "__main__":
    # main()

    app = QtGui.QApplication(sys.argv)

    # w = QtGui.QWidget()
    # w = DictEdit(dictionary={'jatra':2, 'ledviny':7})
    w = DataReaderWidget(loaddir="~", loadfiledir="~",
                         cachefile="~/cache.yaml",
                         after_function=None, before_function=None)
    w.resize(250, 150)
    w.move(300, 300)
    w.setWindowTitle('io3dQtWidget')
    w.show()

    app.exec_()
    data3d = w.datap["data3d"]

    import sed3
    ed = sed3.sed3(data3d)
    ed.show()