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
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
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
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