Пример #1
0
def load_contours():
    contours = mu.Bag({hemi: None for hemi in mu.HEMIS})
    for hemi in mu.HEMIS:
        verts_num = len(bpy.data.objects[hemi].data.vertices)
        contours[hemi] = mu.Bag(
            dict(contours=np.zeros(verts_num), labels=[], max=0))
        contours_fnames = glob.glob(
            op.join(
                mu.get_user_fol(), 'labels',
                'clusters-{}*_contours_{}.npz'.format(
                    bpy.context.scene.meg_clusters_labels_files, hemi)))
        for contours_fname in contours_fnames:
            d = np.load(contours_fname)
            # print(contours_fname, d['labels'], np.unique(d['contours']))
            contours_data = d['contours']
            contours_data[np.where(contours_data)] += len(
                contours[hemi].labels)
            contours[hemi].contours += contours_data
            labels = [l for l in d['labels'] if 'unknown' not in l]
            contours[hemi].labels.extend(labels)
    for hemi in mu.HEMIS:
        contours[hemi].max = len(contours[hemi].labels)
        # print('contours in {} {}: {}'.format(hemi, bpy.context.scene.meg_clusters_labels_files,
        #                                      np.unique(contours[hemi].contours)))
    MEGPanel.contours = contours
Пример #2
0
def load_clusters_file(clusters_name=''):
    if clusters_name == '':
        clusters_name = bpy.context.scene.meg_clusters_labels_files
    fname = MEGPanel.clusters_labels_fnames[clusters_name]
    c = mu.Bag(mu.load(fname))
    for ind in range(len(c.values)):
        c.values[ind] = mu.Bag(c.values[ind])
    return c
Пример #3
0
def init(addon):
    user_fol = mu.get_user_fol()
    # clusters_labels_files = glob.glob(op.join(user_fol, 'fmri', 'clusters_labels_*.pkl'))
    # old code was saving those files as npy instead of pkl
    # clusters_labels_files.extend(glob.glob(op.join(user_fol, 'fmri', 'clusters_labels_*.npy')))
    # fmri_blobs = glob.glob(op.join(user_fol, 'fmri', 'blobs_*_rh.npy'))
    fMRIPanel.addon = addon
    fMRIPanel.lookup, fMRIPanel.clusters_labels = {}, {}
    fMRIPanel.cluster_labels = {}
    files_names, clusters_labels_files, clusters_labels_items = get_clusters_files(
        user_fol)
    fMRIPanel.fMRI_clusters_files_exist = len(
        files_names) > 0  # and len(fmri_blobs) > 0
    if not fMRIPanel.fMRI_clusters_files_exist:
        register()
        fMRIPanel.init = True
        return
    # files_names = [mu.namebase(fname)[len('clusters_labels_'):] for fname in clusters_labels_files]
    fMRIPanel.clusters_labels_file_names = files_names
    bpy.types.Scene.fmri_clusters_labels_files = bpy.props.EnumProperty(
        items=clusters_labels_items,
        description="fMRI files",
        update=fmri_clusters_labels_files_update)
    bpy.context.scene.fmri_clusters_labels_files = files_names[0]
    bpy.context.scene.plot_fmri_cluster_contours = False

    for file_name, clusters_labels_file in zip(files_names,
                                               clusters_labels_files):
        # Check if the constrast files exist
        if all(
            [get_contrast_fname(file_name, hemi) != '' for hemi in mu.HEMIS]):
            key = file_name
            fMRIPanel.clusters_labels[key] = c = mu.Bag(
                mu.load(clusters_labels_file))
            for ind in range(len(c.values)):
                c.values[ind] = mu.Bag(c.values[ind])

            fMRIPanel.lookup[key] = create_lookup_table(
                fMRIPanel.clusters_labels[key])

    # bpy.context.scene.fmri_cluster_val_threshold = 2
    # bpy.context.scene.fmri_cluster_size_threshold = 20
    bpy.context.scene.search_closest_cluster_only_in_filtered = True
    bpy.context.scene.fmri_what_to_plot = 'blob'
    bpy.context.scene.fmri_how_to_sort = 'tval'
    bpy.context.scene.plot_current_cluster = True

    update_clusters()
    fMRIPanel.blobs_activity, _ = calc_blobs_activity(
        fMRIPanel.constrast, fMRIPanel.clusters_labels_filtered,
        fMRIPanel.colors_in_hemis)
    bpy.context.scene.plot_fmri_cluster_per_click = False
    fMRIPanel.dont_show_clusters_info = True
    # addon.clear_cortex()
    register()
    fMRIPanel.init = True
Пример #4
0
def init(addon):
    try:
        trans_fname = op.join(mu.get_user_fol(), 'orig_trans.npz')
        volumes = glob.glob(
            op.join(mu.get_user_fol(), 'freeview', '*+aseg.npy'))
        luts = glob.glob(
            op.join(mu.get_user_fol(), 'freeview', '*ColorLUT.npz'))
        if op.isfile(trans_fname):
            WhereAmIPanel.subject_orig_trans = mu.Bag(np.load(trans_fname))
        for atlas_vol_fname, atlas_vol_lut_fname in zip(volumes, luts):
            atlas = mu.namebase(atlas_vol_fname)[:-len('+aseg')]
            WhereAmIPanel.vol_atlas[atlas] = np.load(atlas_vol_fname)
            WhereAmIPanel.vol_atlas_lut[atlas] = np.load(atlas_vol_lut_fname)
        subjects_dir = mu.get_link_dir(mu.get_links_dir(), 'subjects')
        annot_files = glob.glob(
            op.join(subjects_dir, mu.get_user(), 'label', 'rh.*.annot'))
        if len(annot_files) > 0:
            files_names = [mu.namebase(fname)[3:] for fname in annot_files]
            items = [(c, c, '', ind) for ind, c in enumerate(files_names)]
            bpy.types.Scene.subject_annot_files = bpy.props.EnumProperty(
                items=items)
            bpy.context.scene.subject_annot_files = files_names[0]
        else:
            bpy.types.Scene.subject_annot_files = bpy.props.EnumProperty(
                items=[])
            # bpy.context.scene.subject_annot_files = ''

        bpy.context.scene.closest_label_output = ''
        bpy.context.scene.new_label_r = 5

        mri_data_fname = op.join(mu.get_user_fol(), 'freeview',
                                 '{}_data.npz'.format('mri'))
        if op.isfile(mri_data_fname):
            WhereAmIPanel.mri_data = mu.Bag(np.load(mri_data_fname))
        gray_colormap_fname = op.join(mu.file_fol(), 'color_maps', 'gray.npy')
        if op.isfile(gray_colormap_fname):
            WhereAmIPanel.gray_colormap = np.load(gray_colormap_fname)

        WhereAmIPanel.addon = addon
        WhereAmIPanel.init = True
        WhereAmIPanel.run_slices_listener = False
        init_slices()
        if WhereAmIPanel.run_slices_listener:
            start_slicer_server()
        else:
            WhereAmIPanel.slicer_state = slicer.init('mri')
            create_slices('mri', bpy.context.scene.cursor_location)
        save_slices_cursor_pos()
        register()
    except:
        print("Can't init where-am-I panel!")
        print(traceback.format_exc())
Пример #5
0
def init(modality, modality_data=None, colormap=None, subject='', mmvt_dir=''):
    if subject == '':
        subject = mu.get_user()
    if mmvt_dir == '':
        mmvt_dir = mu.file_fol()
    if modality_data is None:
        if modality == 'mri':
            fname = op.join(mmvt_dir, subject, 'freeview', 'mri_data.npz')
        elif modality == 't2':
            fname = op.join(mmvt_dir, subject, 'freeview', 't2_data.npz')
        elif modality == 'ct':
            fname = op.join(mmvt_dir, subject, 'ct', 'ct_data.npz'.format(modality))
        if op.isfile(fname):
            modality_data = mu.Bag(np.load(fname))
        else:
            print('To see the slices the following command is being called:'.format(modality))
            print('python -m src.preproc.anatomy -s {} -f save_images_data_and_header'.format(mu.get_user()))
            mu.run_mmvt_func('src.preproc.anatom', 'save_subject_orig_trans,save_images_data_and_header')
            # cmd = '{} -m src.preproc.anatomy -s {} -f save_subject_orig_trans,save_images_data_and_header --ignore_missing 1'.format(
            #     bpy.context.scene.python_cmd, mu.get_user())
            # mu.run_command_in_new_thread(cmd, False, cwd=mu.get_mmvt_code_root())
            return None
    if colormap is None:
        if op.isfile(op.join(mmvt_dir, 'color_maps', 'gray.npy')):
            colormap_fname = op.join(mmvt_dir, 'color_maps', 'gray.npy')
            print("Can't find The gray colormap!")
        else:
            colormap_fname = glob.glob(op.join(mmvt_dir, 'color_maps', '*.npy'))[0]
        colormap = np.load(colormap_fname)
    affine = np.array(modality_data.affine, float)
    data = modality_data.data
    clim = modality_data.precentiles
    if IN_BLENDER:
        bpy.context.scene.slices_x_min, bpy.context.scene.slices_x_max = clim
    colors_ratio = modality_data.colors_ratio
    codes = axcodes2ornt(aff2axcodes(affine))
    order = np.argsort([c[0] for c in codes])
    print(modality, order)
    flips = np.array([c[1] < 0 for c in codes])[order]
    flips[0] = not flips[0]
    sizes = [data.shape[order] for order in order]
    scalers = voxel_sizes(affine)
    r = [scalers[order[2]] / scalers[order[1]],
         scalers[order[2]] / scalers[order[0]],
         scalers[order[1]] / scalers[order[0]]]
    extras = [0] * 3
    pial_vol_mask_fname = op.join(mmvt_dir, subject, 'freeview', 'pial_vol_mask.npy')
    pial_vol_mask = np.load(pial_vol_mask_fname) if op.isfile(pial_vol_mask_fname) else None
    self = mu.Bag(dict(
        data=data, affine=affine, order=order, sizes=sizes, flips=flips, clim=clim, r=r, colors_ratio=colors_ratio,
        colormap=colormap, coordinates=[], modality=modality, extras=extras, pial_vol_mask=pial_vol_mask))
    return self
Пример #6
0
def load_connections_file():
    d, vertices, vertices_lookup = None, None, None
    conn_file_name = bpy.context.scene.connectivity_files.replace(' ', '_')
    connectivity_file = op.join(mu.get_user_fol(), 'connectivity', '{}.npz'.format(conn_file_name))
    vertices_file = op.join(mu.get_user_fol(), 'connectivity', '{}_vertices.pkl'.format(
        conn_file_name.replace('_static', '')))
    if op.isfile(connectivity_file):
        print('loading connectivity: {}'.format(connectivity_file))
        d = mu.Bag(np.load(connectivity_file))
        d.labels = [l.astype(str) for l in d.labels]
        d.hemis = [l.astype(str) for l in d.hemis]
        d.con_names = np.array([l.astype(str) for l in d.con_names], dtype=np.str)
        d.conditions = [l.astype(str) for l in d.conditions]
        if d.con_values.ndim == 2:
            d.con_values = d.con_values[:, :, np.newaxis]
        conditions_items = [(cond, cond, '', cond_ind) for cond_ind, cond in enumerate(d.conditions)]
        if len(d.conditions) > 1:
            diff_cond = '{}-{} difference'.format(d.conditions[0], d.conditions[1])
            conditions_items.append((diff_cond, diff_cond, '', len(d.conditions)))
        bpy.types.Scene.conditions = bpy.props.EnumProperty(items=conditions_items, description="Conditions")
        # bpy.context.scene.connections_max, bpy.context.scene.connections_min = d['data_max'], d['data_min']
    else:
        print('No connections file! {}'.format(connectivity_file))
    if op.isfile(vertices_file):
        vertices, vertices_lookup = mu.load(vertices_file)
    else:
        name_parts = mu.namebase(vertices_file).split('_')
        vertices_files = glob.glob(
            op.join(mu.get_parent_fol(vertices_file), '{}*_{}.pkl'.format(name_parts[0], name_parts[-1])))
        if len(vertices_files) == 1:
            vertices, vertices_lookup = mu.load(vertices_files[0])
        else:
            print('No vertices file! ({})'.format(vertices_file))
    ConnectionsPanel.d, ConnectionsPanel.vertices, ConnectionsPanel.vertices_lookup = d, vertices, vertices_lookup
Пример #7
0
def init(modality, modality_data=None, colormap=None):
    if modality_data is None:
        fname = op.join(mu.get_user_fol(), 'freeview',
                        '{}_data.npz'.format(modality))
        if op.isfile(fname):
            modality_data = mu.Bag(np.load(fname))
        else:
            print(
                'To see the slices you need to create the file {}_data.npz by calling:'
                .format(modality))
            print(
                'python -m src.preproc.anatomy -s {} -f save_images_data_and_header'
                .format(mu.get_user()))
            return None
    if colormap is None:
        colormap_fname = op.join(mu.file_fol(), 'color_maps', 'gray.npy')
        colormap = np.load(colormap_fname)
    affine = np.array(modality_data.affine, float)
    data = modality_data.data
    clim = modality_data.precentiles
    colors_ratio = modality_data.colors_ratio
    codes = axcodes2ornt(aff2axcodes(affine))
    order = np.argsort([c[0] for c in codes])
    flips = np.array([c[1] < 0 for c in codes])[order]
    flips[0] = not flips[0]
    sizes = [data.shape[order] for order in order]
    scalers = voxel_sizes(affine)
    r = [
        scalers[order[2]] / scalers[order[1]],
        scalers[order[2]] / scalers[order[0]],
        scalers[order[1]] / scalers[order[0]]
    ]
    self = mu.Bag(
        dict(data=data,
             affine=affine,
             order=order,
             sizes=sizes,
             flips=flips,
             clim=clim,
             r=r,
             colors_ratio=colors_ratio,
             colormap=colormap))
    return self
Пример #8
0
class ConnectionsPanel(bpy.types.Panel):
    bl_space_type = "GRAPH_EDITOR"
    bl_region_type = "UI"
    bl_context = "objectmode"
    bl_category = "mmvt"
    bl_label = "Connections"
    addon = None
    d = mu.Bag({})
    show_connections = True
    do_filter = True

    def draw(self, context):
        connections_draw(self, context)
Пример #9
0
def replot_contours():
    for hemi in mu.HEMIS:
        input_fname = op.join(mu.get_user_fol(), 'labels',
                              'last_contours_{}.npz'.format(hemi))
        if not op.isfile(input_fname):
            continue
        cont_data = mu.Bag(np.load(input_fname, allow_pickle=True))
        _addon().color_hemi_data(hemi,
                                 cont_data.selected_contours,
                                 cont_data.data_min,
                                 256 / cont_data.contour_max,
                                 override_current_mat=not cont_data.cumulate,
                                 coloring_layer='contours',
                                 check_valid_verts=False)
Пример #10
0
def plot_distances_from_outer():
    f = mu.Bag(
        np.load(
            op.join(mu.get_user_fol(), 'skull',
                    'intersections_from_outer_skull.npz')))
    distances = np.linalg.norm(f.intersections[:, 0] - f.intersections[:, 1],
                               axis=1)
    faces_verts = np.load(
        op.join(mu.get_user_fol(), 'skull', 'faces_verts_outer_skull.npy'))
    outer_skull = bpy.data.objects['outer_skull']
    data_max = np.percentile(distances, 75)
    if _addon().colorbar_values_are_locked():
        data_max, data_min = _addon().get_colorbar_max_min()
    else:
        _addon().set_colorbar_max_min(data_max, 0)
    colors_ratio = 256 / data_max
    _addon().activity_map_obj_coloring(outer_skull, distances, faces_verts, 0,
                                       True, 0, colors_ratio)
Пример #11
0
def load_connections_file():
    if op.isfile(bpy.context.scene.connections_file):
        print('loading {}'.format(bpy.context.scene.connections_file))
        d = mu.Bag(np.load(bpy.context.scene.connections_file))
        d.labels = [l.astype(str) for l in d.labels]
        d.hemis = [l.astype(str) for l in d.hemis]
        d.con_names = np.array([l.astype(str) for l in d.con_names],
                               dtype=np.str)
        d.conditions = [l.astype(str) for l in d.conditions]
        ConnectionsPanel.d = d
        conditions_items = [(cond, cond, '', cond_ind)
                            for cond_ind, cond in enumerate(d.conditions)]
        if len(d.conditions) > 1:
            diff_cond = '{}-{} difference'.format(d.conditions[0],
                                                  d.conditions[1])
            conditions_items.append(
                (diff_cond, diff_cond, '', len(d.conditions)))
        bpy.types.Scene.conditions = bpy.props.EnumProperty(
            items=conditions_items, description="Conditions")
    else:
        print('No connections file!')
Пример #12
0
def init(addon):
    try:
        t1_trans_fname = op.join(mu.get_user_fol(), 't1_trans.npz')
        if not op.isfile(t1_trans_fname):
            # backward compatibility
            t1_trans_fname = op.join(mu.get_user_fol(), 'orig_trans.npz')
        t2_trans_fname = op.join(mu.get_user_fol(), 't2_trans.npz')
        ct_trans_fname = op.join(mu.get_user_fol(), 'ct', 'ct_trans.npz')
        volumes = glob.glob(op.join(mu.get_user_fol(), 'freeview', '*+aseg.npy'))
        luts = glob.glob(op.join(mu.get_user_fol(), 'freeview', '*ColorLUT.npz'))
        if op.isfile(t1_trans_fname):
            WhereAmIPanel.subject_t1_trans = mu.Bag(np.load(t1_trans_fname))
        if op.isfile(t2_trans_fname):
            WhereAmIPanel.subject_t2_trans = mu.Bag(np.load(t2_trans_fname))
        if op.isfile(ct_trans_fname):
            WhereAmIPanel.subject_ct_trans = mu.Bag(np.load(ct_trans_fname))
        for atlas_vol_fname, atlas_vol_lut_fname in zip(volumes, luts):
            atlas = mu.namebase(atlas_vol_fname)[:-len('+aseg')]
            WhereAmIPanel.vol_atlas[atlas] = np.load(atlas_vol_fname)
            WhereAmIPanel.vol_atlas_lut[atlas] = np.load(atlas_vol_lut_fname)
        try:
            subjects_dir = mu.get_link_dir(mu.get_links_dir(), 'subjects')
            annot_files = [mu.namebase(fname)[3:] for fname in glob.glob(
                op.join(subjects_dir, mu.get_user(), 'label', 'rh.*.annot'))]
            annot_files += [mu.namebase(fname)[3:] for fname in glob.glob(
                op.join(mu.get_user_fol(), 'labels', 'rh.*.annot'))]
            WhereAmIPanel.annot_files = annot_files = list(set(annot_files))
            if len(annot_files) > 0:
                items = [(c, c, '', ind) for ind, c in enumerate(annot_files)]
                bpy.types.Scene.subject_annot_files = bpy.props.EnumProperty(
                    items=items, update=subject_annot_files_update, description='List of different atlases.\n\nCurrent atlas')
                ind = mu.index_in_list(bpy.context.scene.atlas, annot_files, 0)
                bpy.context.scene.subject_annot_files = annot_files[ind]
            else:
                bpy.types.Scene.subject_annot_files = bpy.props.EnumProperty(items=[])
                # bpy.context.scene.subject_annot_files = ''
        except:
            bpy.types.Scene.subject_annot_files = bpy.props.EnumProperty(items=[])
        bpy.context.scene.closest_label_output = ''
        bpy.context.scene.new_label_r = 5
        bpy.context.scene.find_closest_label_on_click = False
        bpy.context.scene.plot_closest_label_contour = False

        mri_data_fname = op.join(mu.get_user_fol(), 'freeview', 'mri_data.npz')
        if op.isfile(mri_data_fname):
            WhereAmIPanel.mri_data = mu.Bag(np.load(mri_data_fname))
        gray_colormap_fname = op.join(mu.file_fol(), 'color_maps', 'gray.npy')
        if op.isfile(gray_colormap_fname):
            WhereAmIPanel.gray_colormap = np.load(gray_colormap_fname)

        WhereAmIPanel.addon = addon
        WhereAmIPanel.init = True
        WhereAmIPanel.run_slices_listener = False
        init_slices()
        if WhereAmIPanel.run_slices_listener:
            start_slicer_server()
        else:
            WhereAmIPanel.slicer_state = mu.Bag({})
            WhereAmIPanel.slicer_state['mri'] = slicer.init(_addon(), 'mri')
            create_slices(None, bpy.context.scene.cursor_location)
        save_slices_cursor_pos()
        register()
    except:
        print("Can't init where-am-I panel!")
        print(traceback.format_exc())
Пример #13
0
def create_slices(xyz,
                  state=None,
                  modalities='mri',
                  modality_data=None,
                  colormap=None,
                  plot_cross=True,
                  zoom_around_voxel=False,
                  zoom_voxels_num=30,
                  smooth=False,
                  clim=None,
                  mark_voxel=True):
    self = mu.Bag({})
    if isinstance(modalities, str):
        modalities = [modalities]
    # modalities = set(modalities)
    # if 'mri' not in modalities:
    #     modalities.append('mri')
    for modality in modalities:
        if state is None or modality not in state:
            self[modality] = init(modality, modality_data, colormap)
        else:
            self[modality] = state[modality]
    mri = state['mri']
    if mri is None:
        return None

    # print(xyz)
    xyz = np.rint(xyz).astype(int)
    x, y, z = xyz[:3]
    for modality in modalities:
        self[modality].coordinates = np.rint(
            np.array([x, y, z])[self[modality].order]).astype(int)
        self[modality].cross = [None] * 3
        self[modality].x_vox = np.zeros_like(self[modality].data)
        if mu.in_shape(xyz, self[modality].data.shape):
            self[modality].x_vox[tuple(xyz)] = 255
        else:
            self[modality].x_vox[128, 128, 128] = 255

    # cross_vert, cross_horiz = calc_cross(self[modality].coordinates, self[modality].sizes, self[modality].flips)
    images = {}
    xaxs, yaxs = [1, 0, 0], [2, 2, 1]
    max_xaxs_size = max([
        self[modality].sizes[xax]
        for xax, modality in product(yaxs, modalities)
    ])
    max_yaxs_size = max([
        self[modality].sizes[yax]
        for yax, modality in product(yaxs, modalities)
    ])
    max_sizes = (max_xaxs_size, max_yaxs_size)

    for ii, xax, yax, prespective, label in zip(
        [0, 1, 2], xaxs, yaxs, ['sagital', 'coronal', 'axial'],
        ('SAIP', 'SLIR', 'ALPR')):
        pixels = {}
        # cross = (int(cross_horiz[ii][0, 1]), int(cross_vert[ii][0, 0]))
        # print('cross', cross)
        # self[modality].cross[ii] = cross
        for modality in modalities:
            s = self[modality]
            cross = calc_cross(self[modality].x_vox, s, ii)
            # print('{} ({},{})'.format(prespective, cross[0], cross[1]))

            self[modality].cross[ii] = cross
            d = get_image_data(s.data, s.order, s.flips, ii, s.coordinates,
                               cross, zoom_around_voxel, zoom_voxels_num,
                               smooth)
            if s.pial_vol_mask is not None and bpy.context.scene.slices_show_pial:
                pial_vol_mask_data = get_image_data(s.pial_vol_mask, s.order,
                                                    s.flips, ii, s.coordinates,
                                                    cross, zoom_around_voxel,
                                                    zoom_voxels_num, smooth)
            else:
                pial_vol_mask_data = None
            if s.dural_vol_mask is not None and bpy.context.scene.slices_show_dural:
                dural_vol_mask_data = get_image_data(s.dural_vol_mask, s.order,
                                                     s.flips, ii,
                                                     s.coordinates, cross,
                                                     zoom_around_voxel,
                                                     zoom_voxels_num, smooth)
            else:
                dural_vol_mask_data = None

            # todo: Should do that step in the state init
            if modality == 'ct':
                d[np.where(d == 0)] = -200
            sizes = (s.sizes[xax], s.sizes[yax])
            self[modality].extras[ii] = (int((max_sizes[0] - sizes[0]) / 2),
                                         int((max_sizes[1] - sizes[1]) / 2))
            if clim is not None:
                colors_ratio = 256 / (clim[1] - clim[0])
            else:
                clim, colors_ratio = s.clim, s.colors_ratio
            pixels[modality] = calc_slice_pixels(d, sizes, max_sizes, clim,
                                                 colors_ratio, s.colormap,
                                                 zoom_around_voxel,
                                                 zoom_voxels_num, mark_voxel,
                                                 pial_vol_mask_data,
                                                 dural_vol_mask_data)
        # image = create_image(d, sizes, max_sizes, s.clim, s.colors_ratio, prespective, s.colormap,
        #                      int(cross_horiz[ii][0, 1]), int(cross_vert[ii][0, 0]),
        #                      state[modality].extras[ii])
        if 'mri' in modalities and 'ct' in modalities:
            ct_ratio = bpy.context.scene.slices_modality_mix
            pixels = (1 - ct_ratio) * pixels['mri'] + ct_ratio * pixels['ct']
        else:
            pixels = pixels[modality]
        if plot_cross:
            if zoom_around_voxel:
                cross = (128, 128)
            extra = (0, 0) if zoom_around_voxel else state[modality].extras[ii]
            pixels = add_cross_to_pixels(pixels, max_sizes, cross, extra)
        if IN_BLENDER:
            image = create_image(pixels, max_sizes, prespective)
            if image is not None:
                images[prespective] = image
        else:
            images[prespective] = pixels
    # print(np.dot(state[modality].affine, [x, y, z, 1])[:3])
    return images
Пример #14
0
def get_report_fields():
    fields = ReportsPanel.fields_values[bpy.context.scene.reports_files].copy()
    fields = {k.lower().replace(' ', '_'): v for k, v in fields.items()}
    return mu.Bag(fields)