Beispiel #1
0
def create_image(data, sizes, clim, colors_ratio, prespective, modality,
                 colormap, horz_cross, vert_corss):
    image_name = '{}_{}.png'.format(modality, prespective)
    if image_name not in bpy.data.images:
        image = bpy.data.images.new(image_name,
                                    width=sizes[0],
                                    height=sizes[1])
    else:
        image = bpy.data.images[image_name]

    try:
        colors = calc_colors(data, clim[0], colors_ratio, colormap)
        # add alpha value
        pixels = np.ones((colors.shape[0], colors.shape[1], 4))
        pixels[:, :, :3] = colors

        # print(prespective, horz_cross, vert_corss)
        if 0 <= vert_corss < data.shape[1]:
            for x in range(data.shape[0]):
                pixels[x, vert_corss] = [0, 1, 0, 1]
        if 0 <= horz_cross < data.shape[0]:
            for y in range(data.shape[1]):
                pixels[horz_cross, y] = [0, 1, 0, 1]

        image.pixels = pixels.ravel()
        return image
    except:
        print(traceback.format_exc())
        return None
Beispiel #2
0
def calc_slice_pixels(mmvt,
                      data,
                      sizes,
                      max_sizes,
                      clim,
                      colors_ratio,
                      colormap,
                      zoom_around_voxel,
                      pixels_zoom,
                      mark_voxel=True,
                      pial_vol_mask_data=None,
                      dural_vol_mask_data=None,
                      fmri_vol_data=None):
    colors = calc_colors(data, clim[0], colors_ratio, colormap)

    extra = [
        int((max_sizes[0] - sizes[0]) / 2),
        int((max_sizes[1] - sizes[1]) / 2)
    ]
    if max_sizes[0] > sizes[0] and max_sizes[1] == sizes[1]:
        dark = np.zeros((colors.shape[0], extra[0], 3))
        colors = np.concatenate((dark, colors, dark), axis=1)
    if max_sizes[1] > sizes[1] and max_sizes[0] == sizes[0]:
        dark = np.zeros((extra[1], colors.shape[1], 3))
        colors = np.concatenate((dark, colors, dark), axis=0)

    if zoom_around_voxel and mark_voxel:
        # todo: in very close zoom the red doesn't cover the whole pixel
        zoom_factor = np.rint(256 / (pixels_zoom * 2)).astype(int)
        colors[128:128 + zoom_factor, 128:128 + zoom_factor] = [1, 0, 0]

    if pial_vol_mask_data is not None:
        colors[np.where(pial_vol_mask_data)] = tuple(
            bpy.context.scene.slices_show_pial_color)
    if dural_vol_mask_data is not None:
        colors[np.where(dural_vol_mask_data)] = tuple(
            bpy.context.scene.slices_show_dural_color)
    if fmri_vol_data is not None:
        if mmvt.coloring.get_use_abs_threshold():
            fmri_inds = np.where(
                np.abs(fmri_vol_data) >
                bpy.context.scene.coloring_lower_threshold)
        else:
            fmri_inds = np.where(
                fmri_vol_data) > bpy.context.scene.coloring_lower_threshold
        if len(fmri_inds[0]) > 0:
            colors[fmri_inds] = mmvt.coloring.calc_colors(
                fmri_vol_data[fmri_inds])

    pixels = np.ones((colors.shape[0], colors.shape[1], 4))
    pixels[:, :, :3] = colors
    return pixels
Beispiel #3
0
def calc_slice_pixels(data, sizes, max_sizes, clim, colors_ratio, colormap, zoom_around_voxel, pixels_zoom,
                      mark_voxel=True, pial_vol_mask_data=None):
    colors = calc_colors(data, clim[0], colors_ratio, colormap)

    extra = [int((max_sizes[0] - sizes[0]) / 2), int((max_sizes[1] - sizes[1]) / 2)]
    if max_sizes[0] > sizes[0] and max_sizes[1] == sizes[1]:
        dark = np.zeros((colors.shape[0], extra[0], 3))
        colors = np.concatenate((dark, colors, dark), axis=1)
    if max_sizes[1] > sizes[1] and max_sizes[0] == sizes[0]:
        dark = np.zeros((extra[1], colors.shape[1], 3))
        colors = np.concatenate((dark, colors, dark), axis=0)

    if zoom_around_voxel and mark_voxel:
        # todo: in very close zoom the red doesn't cover the whole pixel
        zoom_factor = np.rint(256 / (pixels_zoom * 2)).astype(int)
        colors[128:128 + zoom_factor, 128:128 + zoom_factor] = [1, 0, 0]

    if pial_vol_mask_data is not None:
        colors[np.where(pial_vol_mask_data)] = tuple(bpy.context.scene.slices_show_pial_color)

    pixels = np.ones((colors.shape[0], colors.shape[1], 4))
    pixels[:, :, :3] = colors
    return pixels
Beispiel #4
0
def calc_slice_pixels(
        mmvt,
        data,
        sizes,
        max_sizes,
        clim,
        colors_ratio,
        colormap,
        zoom_around_voxel,
        pixels_zoom,
        mark_voxel=True,
        vol_mask_data_dict={},
        fmri_vol_data=None,
        t1_ct_mask=None):  # pial_vol_mask_data=None, dural_vol_mask_data=None
    colors = calc_colors(data, clim[0], colors_ratio, colormap)
    max_sizes = [256, 256, 256]

    extra = [
        int((max_sizes[0] - sizes[0]) / 2),
        int((max_sizes[1] - sizes[1]) / 2)
    ]
    if max_sizes[0] > sizes[0]:  # and max_sizes[1] == sizes[1]:
        dark = np.zeros((colors.shape[0], extra[0], 3))
        colors = np.concatenate((dark, colors, dark), axis=1)
    if max_sizes[1] > sizes[1]:  # and max_sizes[0] == sizes[0]:
        dark = np.zeros((extra[1], colors.shape[1], 3))
        colors = np.concatenate((dark, colors, dark), axis=0)

    extra = [max_sizes[0] - colors.shape[0], max_sizes[1] - colors.shape[1]]
    if extra[0] > 0:
        colors = np.concatenate((np.zeros(
            (extra[0], colors.shape[1], 3)), colors),
                                axis=0)
    if extra[1] > 0:
        colors = np.concatenate((np.zeros(
            (colors.shape[0], extra[1], 3)), colors),
                                axis=1)

    if zoom_around_voxel and mark_voxel:
        # todo: in very close zoom the red doesn't cover the whole pixel
        zoom_factor = np.rint(256 / (pixels_zoom * 2)).astype(int)
        colors[128:128 + zoom_factor, 128:128 + zoom_factor] = [1, 0, 0]

    for surf_name, surf_data in vol_mask_data_dict.items():
        colors[np.where(surf_data)] = tuple(
            bpy.context.scene.get('slices_show_{}_color'.format(surf_name),
                                  (1, 0, 0)))
    # if pial_vol_mask_data is not None:
    #     colors[np.where(pial_vol_mask_data)] = tuple(bpy.context.scene.slices_show_pial_color)
    # if dural_vol_mask_data is not None:
    #     colors[np.where(dural_vol_mask_data)] = tuple(bpy.context.scene.slices_show_dural_color)
    if fmri_vol_data is not None:
        if mmvt.coloring.get_use_abs_threshold():
            fmri_inds = np.where(
                np.abs(fmri_vol_data) >
                bpy.context.scene.coloring_lower_threshold)
        else:
            fmri_inds = np.where(
                fmri_vol_data) > bpy.context.scene.coloring_lower_threshold
        if len(fmri_inds[0]) > 0:
            colors[fmri_inds] = mmvt.coloring.calc_colors(
                fmri_vol_data[fmri_inds])
    if t1_ct_mask is not None:
        colors[np.where(t1_ct_mask)] = (0, 0, 256)

    pixels = np.ones((colors.shape[0], colors.shape[1], 4))
    pixels[:, :, :3] = colors
    return pixels