def test_trainin_kidney_from_pklz(self):

        sample_data_path = lisa.dataset.join_sdp("kidney_training/")
        test_data = lisa.dataset.join_sdp("kidney_training/liver-orig001.mhd.pklz")
        label = "left kidney"


        organ_model.train_organ_model_from_dir(
            "left_kidney.ol.p",
            reference_dir=sample_data_path,
            orig_pattern="*orig*.pklz",
            ref_pattern="*orig*.pklz",
            label=label,
            segmentation_key=True
        )

        ol = organ_localizator.OrganLocalizator()
        ol.load("left_kidney.ol.p")

        dr = io3d.DataReader()
        data3d, metadata = dr.Get3DData(test_data)
        out = ol.predict(data3d, metadata['voxelsize_mm'])

        seg = (metadata["segmentation"] == metadata['slab'][label]).astype(np.int8)

        err = np.sum(np.abs(seg-out))
        import sed3
        sed3.show_slices(out-seg, out-seg, slice_step=20)
        # self.assertEqual(True, False)
        # less then 10% error expected
        self.assertGreater(np.prod(seg.shape)*0.1, err)
Example #2
0
def test_import():

    # io3d.read()
    data3d_orig = io3d.read_dataset("3Dircadb1",
                                    "data3d",
                                    1,
                                    orientation_axcodes="SPL")
    bp = bpo.BodyPosition(data3d_orig['data3d'], data3d_orig['voxelsize_mm'])
    sed3.show_slices(np.asarray(data3d_orig['data3d'][0:-1]),
                     slice_step=10,
                     axis=0)
    sdf = bp.dist_to_lungs()

    assert np.max(sdf) > 0
    assert np.min(sdf) < 0

    im_volume_px = np.prod(data3d_orig['data3d'].shape)

    sed3.show_slices(np.asarray(data3d_orig['data3d'][0:-1]),
                     np.asarray(sdf[0:-1] > 0),
                     slice_step=10,
                     axis=0)
    organ_volume_px = np.sum(sdf >= 0)
    logger.debug(im_volume_px)
    logger.debug(organ_volume_px)
    assert organ_volume_px > (im_volume_px * 0.03)
Example #3
0
    def test_trainin_kidney_from_pklz(self):

        sample_data_path = lisa.dataset.join_sdp("kidney_training/")
        test_data = lisa.dataset.join_sdp(
            "kidney_training/liver-orig001.mhd.pklz")
        label = "left kidney"

        organ_model.train_organ_model_from_dir("left_kidney.ol.p",
                                               reference_dir=sample_data_path,
                                               orig_pattern="*orig*.pklz",
                                               ref_pattern="*orig*.pklz",
                                               label=label,
                                               segmentation_key=True)

        ol = organ_localizator.OrganLocalizator()
        ol.load("left_kidney.ol.p")

        dr = io3d.DataReader()
        data3d, metadata = dr.Get3DData(test_data)
        out = ol.predict(data3d, metadata['voxelsize_mm'])

        seg = (metadata["segmentation"] == metadata['slab'][label]).astype(
            np.int8)

        err = np.sum(np.abs(seg - out))
        import sed3
        sed3.show_slices(out - seg, out - seg, slice_step=20)
        # self.assertEqual(True, False)
        # less then 10% error expected
        self.assertGreater(np.prod(seg.shape) * 0.1, err)
Example #4
0
def visualize(seg, data3d_orig):
    """Show segmentation on original data using sed3 visualizer.

    Args:
        seg: data after segmentation
        data3d_orig: orig data
    """
    sed3.show_slices(data3d_orig["data3d"], seg, slice_step=10, axis=0)
    plt.show()
Example #5
0
    def test_first_slice_offset(self):
        import sed3
        img, seeds, segmentation = self.create_data()

        sed3.show_slices(img,
                         seeds=seeds,
                         contour=segmentation,
                         slice_step=5,
                         first_slice_offset_to_see_seed_with_label=1,
                         show=False)
    def print_it_all_front(self, ss, data3dr_tmp, seg, pattern):
        """ Vykresli jednotlive rezy v danem smeru (axis) 
        do sed3.show_slices() vstupuji: 
            - obrazek pro danou instanci Bona (surovy obrazek), ktery
              zpracovavame
            - obrazek seg - vysledek segmentace, tedy vystup metody get_ribs(lungs, ...)) 
            - dalsi parametry jako jsou krok po rezech, osa, atd."""

        fig = plt.figure(figsize=(25, 25))
        sed3.show_slices(
            data3dr_tmp,  # vychozi obrazek
            seg.astype(np.int8),
            slice_step=10,
            axis=1,
            flipV=True,
            flipH=False)
    def print_it_all_front(self, ss, data3dr_tmp, seg, pattern):
        """ Vykresli jednotlive rezy v danem smeru (axis) 
        do sed3.show_slices() vstupuji: 
            - obrazek pro danou instanci Bona (surovy obrazek), ktery
              zpracovavame
            - obrazek seg - vysledek segmentace, tedy vystup metody get_ribs(lungs, ...)) 
            - dalsi parametry jako jsou krok po rezech, osa, atd."""

        import sed3
        fig = plt.figure(figsize = (25,25))
        sed3.show_slices(
            data3dr_tmp,                                 # vychozi obrazek
            seg.astype(np.int8),
            slice_step=10, 
            axis=1,
            flipV=True,
            flipH=False
        )
Example #8
0
    def test_first_slice_offset_interactive(self):
        """
        set offset to see seed with defined label
        :return:
        """
        import sed3
        img, seeds, segmentation = self.create_data()
        seeds[6:9, 10, 1:5] = 3
        seeds[7:9, 11, 8:14] = 4

        ed = sed3.show_slices(img, seeds=seeds, contour=segmentation, slice_step=5, first_slice_offset_to_see_seed_with_label=1)
Example #9
0
    def test_first_slice_offset_interactive(self):
        """
        set offset to see seed with defined label
        :return:
        """
        import sed3
        img, seeds, segmentation = self.create_data()
        seeds[6:9, 10, 1:5] = 3
        seeds[7:9, 11, 8:14] = 4

        ed = sed3.show_slices(img,
                              seeds=seeds,
                              contour=segmentation,
                              slice_step=5,
                              first_slice_offset_to_see_seed_with_label=1)
Example #10
0
    def test_intensity_training(self):
        # TODO use ircad
        sliver_reference_dir = op.expanduser("~/data/medical/orig/sliver07/training/")
        # Train
        import imtools.trainer3d
        import imtools.datasets
        ol = imtools.trainer3d.Trainer3D()
        # ol.feature_function = localization_fv

        for one in imtools.datasets.sliver_reader("*[0].mhd", read_seg=True):
            numeric_label, vs_mm, oname, orig_data, rname, ref_data = one
            ol.add_train_data(orig_data, ref_data, voxelsize_mm=vs_mm)

        ol.fit()

        # Testing

        one = list(imtools.datasets.sliver_reader("*018.mhd", read_seg=True))[0]
        numeric_label, vs_mm, oname, orig_data, rname, ref_data = one
        fit = ol.predict(orig_data, voxelsize_mm=vs_mm)

        # visualization
        plt.figure(figsize=(15,10))
        sed3.show_slices(orig_data, fit, slice_step=20, axis=1, flipV=True)
Example #11
0
def model_score_from_sliver_data(
    #         output_file="~/lisa_data/liver_intensity.Model.p",
    sliver_reference_dir='~/data/medical/orig/sliver07/training/',
    orig_pattern="*orig*[1-9].mhd",
    ref_pattern="*seg*[1-9].mhd",
    modelparams={},
    likelihood_ratio=0.5,
    savefig=False,
    savefig_fn_prefix='../graphics/bn-symmetry-',
    show=False,
    label='',
):
    """

    :param label: text label added to all records in output table
    :param sliver_reference_dir:
    :param orig_pattern:
    :param ref_pattern:
    :param modelparams:
    :param likelihood_ratio: float number between 0 and 1, scalar or list. Set the segmentation threshodl
    :param savefig:
    :param savefig_fn_prefix:
    :param show: show images
    :return:
    """
    import pandas as pd
    from imcut import pycut
    import sed3
    import matplotlib.pyplot as plt

    import volumetry_evaluation
    sliver_reference_dir = op.expanduser(sliver_reference_dir)

    orig_fnames = glob.glob(sliver_reference_dir + orig_pattern)
    ref_fnames = glob.glob(sliver_reference_dir + ref_pattern)

    orig_fnames.sort()
    ref_fnames.sort()

    evaluation_all = []

    for oname, rname in zip(orig_fnames, ref_fnames):
        print(oname)
        data3d_orig, metadata = io3d.datareader.read(oname,
                                                     dataplus_format=False)
        vs_mm1 = metadata['voxelsize_mm']
        data3d_seg, metadata = io3d.datareader.read(rname,
                                                    dataplus_format=False)
        vs_mm = metadata['voxelsize_mm']

        mdl = pycut.Model(modelparams=modelparams)
        #     m0 = mdl.mdl[2]
        #     len(m0.means_)

        vs_mmr = [1.5, 1.5, 1.5]
        data3dr = io3d.misc.resize_to_mm(data3d_orig, vs_mm1, vs_mmr)
        lik1 = mdl.likelihood_from_image(data3dr, vs_mmr, 0)
        lik2 = mdl.likelihood_from_image(data3dr, vs_mmr, 1)

        if np.isscalar(likelihood_ratio):
            likelihood_ratio = [likelihood_ratio]

        for likelihood_ratio_i in likelihood_ratio:
            if (likelihood_ratio_i <= 0) or (likelihood_ratio_i >= 1.0):
                logger.error("likelihood ratio should be between 0 and 1")

            seg = ((likelihood_ratio_i * lik1) >
                   ((1.0 - likelihood_ratio_i) * lik2)).astype(np.uint8)
            #     seg = (lik1).astype(np.uint8)

            seg_orig = io3d.misc.resize_to_shape(seg, data3d_orig.shape)
            #       seg_orig = io3d.misc.resize_to_shape(seg, data3d_orig.shape)
            if show:
                plt.figure(figsize=(15, 15))
                sed3.show_slices(data3d_orig,
                                 seg_orig,
                                 show=False,
                                 slice_step=20)
                # likres = io3d.misc.resize_to_shape(lik1, data3d_orig.shape)
                # sed3.show_slices(likres , seg_orig, show=False, slice_step=20)

            import re
            numeric_label = re.search(".*g(\d+)", oname).group(1)

            #     plt.figure(figsize = (5,5))
            if savefig:
                plt.axis('off')
                #     plt.imshow(symmetry_img)
                filename = savefig_fn_prefix + numeric_label + '-lr-' + str(
                    likelihood_ratio_i) + ".png"
                # if np.isscalar(likelihood_ratio):
                #     filename = filename + ''+str
                plt.savefig(filename, bbox_inches='tight')

            evaluation = volumetry_evaluation.compare_volumes_sliver(
                seg_orig, data3d_seg, vs_mm)
            evaluation['likelihood_ratio'] = likelihood_ratio_i
            evaluation['numeric_label'] = numeric_label
            evaluation['label'] = label

            evaluation_all.append(evaluation)


#         print evaluation

    ev = pd.DataFrame(evaluation_all)
    return ev
Example #12
0
def test(
    imshape=256,
    # sdf_type='diaphragm_axial',
    # sdf_type='coronal',
    # sdf_type='sagittal',
    sdf_type='surface',
    # sdf_type='bones',
    # sdf_type='fatless',
    # sdf_type='liver',
    # sdf_type='spleen',
    # sdf_type='lungs',
    filename_prefix='final_',
    test_ids=[20, 40],
):
    """Evaluates a U-net NN with test data loaded from a .h5 file.

    Args:
        imshape (int, optional): Shape of dataset's images. Defaults to 256.
        sdf_type (str, optional): Type of sdf method we train. Can be: sagittal, coronal, surface, liver, spleen, lungs, bones, fatless or diaphragm_axial.
        filename_prefix (str, optional): Option to add a prefix to create new files when testing. Defaults to ''.
        test_ids (list, optional): Test data scans' indexes in the dataset. Defaults to [20, 40].
    """

    model = load_model(f"{filename_prefix}sdf_unet_{sdf_type}.h5")
    # import visualkeras
    # visualkeras.graph_view(model, to_file='output.png')

    for i in range(len(test_ids)):
        X_test = []
        Y_test = []

        #Loading test data
        with h5py.File(f'sdf_{sdf_type}{imshape}.h5', 'r') as h5f:
            logger.info('Loading...')
            X_test.extend(np.asarray(h5f[f'scan_{i}']))
            Y_test.extend(np.asarray(h5f[f'label_{i}']))
            logger.info(F'Scan {test_ids[i]} loaded')

        # Reshaping
        X_test = np.asarray(X_test).reshape(
            np.asarray(X_test).shape[0], 256, 256, 1)
        Y_test = np.asarray(Y_test).reshape(
            np.asarray(Y_test).shape[0], 256, 256, 1)

        # Predictions
        predictions = model.predict(X_test)

        # Visualization
        X_test = np.asarray(X_test).reshape(
            np.asarray(X_test).shape[0], 256, 256)
        predictions = np.asarray(predictions).reshape(
            np.asarray(predictions).shape[0], 256, 256)
        Y_test = np.asarray(Y_test).reshape(
            np.asarray(Y_test).shape[0], 256, 256)

        plt.plot(Y_test[20])
        plt.contour(Y_test[20] > 0)
        plt.colorbar()
        plt.show()

        plt.imshow(predictions[20])
        plt.contour(predictions[20] > 0)
        plt.show()

        sed3.show_slices(np.asarray(X_test[0:-1]),
                         np.asarray(Y_test[0:-1]),
                         slice_step=10,
                         axis=0)
        sed3.show_slices(np.asarray(X_test[0:-1]),
                         np.asarray(predictions[0:-1]),
                         slice_step=10,
                         axis=0)
organ_label = "rightkidney"
show = False

# %%
dtstr = datetime.datetime.now().strftime("%Y%m%d_%H%M")
rdir = f"report_{experiment_label}_{dtstr}"
report = exsu.Report(outputdir=rdir,
                     show=show,
                     additional_spreadsheet_fn="data.xlsx")
reporti = 0
# %%

datap1 = io3d.datasets.read_dataset("3Dircadb1", "data3d", 1)
# datap1 = io3d.datasets.read_dataset("sliver07", "data3d", 1)
data3d = datap1["data3d"]
sed3.show_slices(data3d, shape=[2, 3], show=show)
report.savefig(f"{reporti:03d}.png")
reporti += 1
# %%

datap_mask = io3d.datasets.read_dataset("3Dircadb1", organ_label, 1)
data3d_mask = datap_mask["data3d"]
sed3.show_slices(data3d_mask, shape=[2, 3], show=show)
report.savefig(f"{reporti:03d}.png")
reporti += 1
# plt.figure()

# %% md

## windowing
Example #14
0
def model_score_from_sliver_data(
#         output_file="~/lisa_data/liver_intensity.Model.p",
        sliver_reference_dir='~/data/medical/orig/sliver07/training/',
        orig_pattern="*orig*[1-9].mhd",
        ref_pattern="*seg*[1-9].mhd",
        modelparams={},
        likelihood_ratio=0.5,
        savefig=False,
        savefig_fn_prefix='../graphics/bn-symmetry-',
        show=False,
        label='',
):
    """

    :param label: text label added to all records in output table
    :param sliver_reference_dir:
    :param orig_pattern:
    :param ref_pattern:
    :param modelparams:
    :param likelihood_ratio: float number between 0 and 1, scalar or list. Set the segmentation threshodl
    :param savefig:
    :param savefig_fn_prefix:
    :param show: show images
    :return:
    """
    import pandas as pd
    from imcut import pycut
    import sed3
    import matplotlib.pyplot as plt

    import volumetry_evaluation
    sliver_reference_dir = op.expanduser(sliver_reference_dir)

    orig_fnames = glob.glob(sliver_reference_dir + orig_pattern)
    ref_fnames = glob.glob(sliver_reference_dir + ref_pattern)

    orig_fnames.sort()
    ref_fnames.sort()

    evaluation_all = []

    for oname, rname in zip(orig_fnames, ref_fnames):
        print(oname)
        data3d_orig, metadata = io3d.datareader.read(oname, dataplus_format=False)
        vs_mm1 = metadata['voxelsize_mm']
        data3d_seg, metadata = io3d.datareader.read(rname, dataplus_format=False)
        vs_mm = metadata['voxelsize_mm']

        mdl = pycut.Model(modelparams=modelparams)
    #     m0 = mdl.mdl[2]
    #     len(m0.means_)


        vs_mmr = [1.5, 1.5, 1.5]
        data3dr = io3d.misc.resize_to_mm(data3d_orig, vs_mm1, vs_mmr)
        lik1 = mdl.likelihood_from_image(data3dr, vs_mmr, 0)
        lik2 = mdl.likelihood_from_image(data3dr, vs_mmr, 1)

        if np.isscalar(likelihood_ratio):
            likelihood_ratio = [likelihood_ratio]

        for likelihood_ratio_i in likelihood_ratio:
            if (likelihood_ratio_i <= 0) or (likelihood_ratio_i >= 1.0):
                logger.error("likelihood ratio should be between 0 and 1")

            seg = ((likelihood_ratio_i * lik1) > ((1.0 - likelihood_ratio_i) * lik2)).astype(np.uint8)
        #     seg = (lik1).astype(np.uint8)


            seg_orig = io3d.misc.resize_to_shape(seg, data3d_orig.shape)
        #       seg_orig = io3d.misc.resize_to_shape(seg, data3d_orig.shape)
            if show:
                plt.figure(figsize = (15,15))
                sed3.show_slices(data3d_orig , seg_orig, show=False, slice_step=20)
                # likres = io3d.misc.resize_to_shape(lik1, data3d_orig.shape)
                # sed3.show_slices(likres , seg_orig, show=False, slice_step=20)

            import re
            numeric_label = re.search(".*g(\d+)", oname).group(1)

        #     plt.figure(figsize = (5,5))
            if savefig:
                plt.axis('off')
        #     plt.imshow(symmetry_img)
                filename = savefig_fn_prefix + numeric_label + '-lr-' + str(likelihood_ratio_i) + ".png"
                # if np.isscalar(likelihood_ratio):
                #     filename = filename + ''+str
                plt.savefig(filename, bbox_inches='tight')


            evaluation = volumetry_evaluation.compare_volumes_sliver(seg_orig, data3d_seg, vs_mm)
            evaluation['likelihood_ratio'] = likelihood_ratio_i
            evaluation['numeric_label'] = numeric_label
            evaluation['label'] = label

            evaluation_all.append(evaluation)
#         print evaluation

    ev = pd.DataFrame(evaluation_all)
    return ev
Example #15
0
def compare(
    imshape=256,
    # sdf_type='coronal',
    # sdf_type='sagittal',
    # sdf_type='surface',
    # sdf_type='bones',
    # sdf_type='fatless',
    sdf_type='liver',
    # sdf_type='spleen',
    # sdf_type='lungs',
    dataset = "3Dircadb1",
    scannum = 20,
):
    """Compare bodyposition and bodynavigation.

    Args:
        imshape (int, optional): Shape of dataset's images. Defaults to 256.
        sdf_type (str, optional): Type of sdf method. Can be: sagittal, coronal, surface, liver, spleen, lungs, bones, fatless or diaphragm_axial.
        dataset (string): "3Dircadb1" or "sliver07"
        scannum (int): Number of the scan this loads
    """
    
    import bodynavigation
    from bodynavigation.organ_detection import OrganDetection
    import bodyposition

    pth = Path(__file__).parent.parent
    outputdir = pth / "experiments/"
    commonsheet = outputdir / "experiments.xlsx"
    report = exsu.report.Report(outputdir=outputdir, additional_spreadsheet_fn=commonsheet, check_version_of=["numpy", "scipy"])

    organ_detection_on = False
    if sdf_type == "liver" or sdf_type == "spleen" or sdf_type == "lungs" or sdf_type == "fatless" or sdf_type == "bones":
        organ_detection_on = True    
    
    data3d_orig = io3d.read_dataset(dataset, "data3d", scannum, orientation_axcodes='SPL')
    voxelsize = data3d_orig["voxelsize_mm"]
    
    # BODYNAVIGATION
    
    start_time = time.time()
    
    if not organ_detection_on:
        ss = bodynavigation.body_navigation.BodyNavigation(data3d_orig["data3d"], data3d_orig["voxelsize_mm"])
        sdf_bodynavigation = eval(f"ss.dist_to_{sdf_type}()")
    else:
        od = OrganDetection(data3d_orig["data3d"], voxelsize)
        if sdf_type == "liver":
            st = "Liver"
        if sdf_type == "spleen":
            st = "Spleen"
        if sdf_type == "lungs":
            st = "Lungs"
        if sdf_type == "fatless":
            st = "FatlessBody"
        if sdf_type == "bones":
            st = "Bones"
        sdf_bodynavigation = eval(f"od.get{st}()")
    time_bodynavigation = time.time() - start_time
    sed3.show_slices(np.asarray(data3d_orig["data3d"][0:-1]), np.asarray(sdf_bodynavigation[0:-1]), axis=0)

    
    # BODYPOSITION
    
    start_time = time.time()
    
    bpo = bodyposition.BodyPosition(data3d_orig["data3d"], data3d_orig['voxelsize_mm'])
    sdf_bodyposition = eval(f"bpo.dist_to_{sdf_type}()")
    time_bodyposition = time.time() - start_time
    sed3.show_slices(np.asarray(data3d_orig["data3d"][0:-1]), np.asarray(sdf_bodyposition[0:-1]), axis=0)
    
    # EVALUATION AND REPORT SAVING
    
    evaluation = compare_volumes(sdf_bodynavigation, sdf_bodyposition, voxelsize_mm=voxelsize)
    # logger.info(evaluation)
    
    report.add_cols_to_actual_row({
        "sdf type": sdf_type,
        "dataset": dataset,
        "scannum": scannum,
        "datetime": time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.time())),
        "time_bodynavigation": time_bodynavigation,
        "time_bodyposition": time_bodyposition,
    })
    report.add_cols_to_actual_row(evaluation)
    report.finish_actual_row()
    report.dump()
    logger.info(f"Report finished - scan {scannum} (from {dataset}), {sdf_type} segmentation - BN {round(time_bodynavigation)} s, BP {round(time_bodyposition)} s")
Example #16
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=
            '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('-sb', '--segbody', action='store_true',
                        help='run body segmentaiton')
    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)
    import io3d

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

    bn = BodyNavigation(data3d = data3d,
            voxelsize_mm = metadata['voxelsize_mm'],
            )


    seg = np.zeros(data3d.shape, dtype=np.int8)
    #sseg.orientation()
    if args.segspine:
        seg += bn.get_spine()
    if args.segspine:
        seg += bn.get_body()


    #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:
        import sed3
        sed3.show_slices(data3d, contour=seg)


    #savestring = raw_input ('Save output data? (y/n): ')
    #sn = int(snstring)
    if args.output is not None: # savestring in ['Y','y']:
        md = {
            'voxelsize_mm': metadata['voxelsize_mm'],
            'segmentation': seg, }

        io3d.write(data3d, args.output, metadata=md)
Example #17
0
    def test_show_slices(self):
        import sed3
        img, seeds, segmentation = self.create_data()

        sed3.show_slices(img, seeds=seeds, contour=segmentation, show=False)
Example #18
0
    def test_show_slices(self):
        import sed3
        img, seeds, segmentation = self.create_data()

        sed3.show_slices(img, seeds=seeds, contour=segmentation, show=False)
Example #19
0
    def test_first_slice_offset(self):
        import sed3
        img, seeds, segmentation = self.create_data()

        sed3.show_slices(img, seeds=seeds, contour=segmentation, slice_step=5,
                              first_slice_offset_to_see_seed_with_label=1, show=False)
import numpy as np
import io3d
import sed3

import bodyposition as bpo
print(bpo.__file__)

data3d_orig = io3d.read_dataset("3Dircadb1", "data3d", 1)
bp = bpo.BodyPosition(data3d_orig['data3d'], data3d_orig['voxelsize_mm'])
sdf_surface = bp.dist_to_surface()

sed3.show_slices(np.asarray(data3d_orig['data3d'][0:-1]), np.asarray(sdf_surface[0:-1]), slice_step=10, axis=0)
def make_image_processing(data,
                          voxelsize_mm,
                          seeds=None,
                          sigma_mm=1,
                          min_threshold=None,
                          max_threshold=None,
                          closeNum=0,
                          openNum=0,
                          min_threshold_auto_method="",
                          fill_holes=True,
                          get_priority_objects=True,
                          nObj=1,
                          debug=False):
    if (sys.version_info[0] < 3):
        import copy

        data_copy = copy.copy(data)
    else:
        data_copy = data.copy()

    if sigma_mm > 0:
        sigmaNew = thresholding_functions.calculateSigma(
            voxelsize_mm, sigma_mm)
        data_copy = thresholding_functions.gaussFilter(data_copy, sigmaNew)

        del (sigmaNew)
    if debug:
        import sed3

        # ed = sed3.sed3qt(data_copy)
        sed3.show_slices(data_copy, shape=[6, 9])
        # ed.show()

    if min_threshold is None:
        min_threshold = prepare_threshold_from_seeds(
            data=data_copy,
            seeds=seeds,
            min_threshold_auto_method=min_threshold_auto_method)

    data_thr = thresholding_functions.thresholding(
        data_copy,
        min_threshold,
        max_threshold,
        use_min_threshold=True,
        use_max_threshold=max_threshold is not None)
    if debug:
        logger.debug("np min median max input data " + str(np.min(data_copy)) +
                     " " + str(np.median(data_copy)) + " " +
                     str(np.max(data_copy)) + " ")

    if debug:
        logger.debug("np unique sum binar " + str(np.unique(data_thr)) + " " +
                     str(np.sum(data_thr)) + " ")

    data_thr = thresholding_functions.binaryClosingOpening(
        data_thr, closeNum, openNum, True)

    # Fill holes
    if fill_holes:

        data_thr = thresholding_functions.fillHoles(data_thr)

    # use a wall for label 2
    if type(seeds) is np.ndarray:
        data_thr[seeds == 2] = 0
    # Zjisteni nejvetsich objektu.
    if get_priority_objects:
        if seeds is not None:
            selected_seeds = seeds == 1
        else:
            selected_seeds = seeds
        data_thr = thresholding_functions.get_priority_objects(
            data_thr, nObj, selected_seeds)

    if debug:
        logger.debug("np unique sum binar hist end " +
                     str(np.unique(data_thr)) + " " + str(np.sum(data_thr)) +
                     " "
                     # + str(np.histogram(data_thr, bins="auto")) + " "
                     )

    return data_thr, min_threshold