Рендеринг двух томов одновременно, смешивая их, используя виджет плоскости изображения - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь визуализировать некоторые трехмерные скалярные данные в Mayavi.Я могу визуализировать данные индивидуально с помощью виджета плоскости изображения.Моя цель - смешать два разных скалярных тома одинакового размера и интервала и отобразить их с помощью виджета плоскости изображения.

Я уже пробовал использовать виджет плоскости изображения.Меняя непрозрачность ipw, но безрезультатно, Mayavi вместо смешивания двух кубов обрабатывает их отдельно.

import dask.array as da
import numpy as np
import util 
import matplotlib.pyplot as plt
import scipy
from mayavi import mlab

in_path = '/home/user/Desktop/Attribute_Extract_v_0.1/small_vol.hdf5'
in_path_2 = '/home/user/Desktop/Attribute_Extract_v_0.1/anu_malik.hdf5'

data = util.read(in_path)
data_2 = util.read(in_path_2)

shaped_data_2 = np.array(data_2)
shaped_data = np.array(data)
print(shaped_data.shape)


vm = np.percentile(shaped_data,99)
vm2 = np.percentile(shaped_data_2,99)

vm_3 = np.percentile(shaped_data_2,20)
vm_4 = np.percentile(shaped_data_2,80)

#Use mayavi to plot the 3D seismic cube with xline , inline and , Timeslice 

source = mlab.pipeline.scalar_field(shaped_data)
source_2 = mlab.pipeline.scalar_field(shaped_data_2)
source.spacing = [1, 1, -1]
source_2.spacing = [1, 1, -1]

vol = mlab.pipeline.volume(source_2, vmin=vm_3, vmax=vm_4)

for axis in ['x', 'y',  'z']:


    plane = mlab.pipeline.image_plane_widget(source_2, 
                                    plane_orientation='{}_axes'.format(axis),
                                    slice_index=100, colormap='Spectral',opacity=0.2,  vmin=-vm2, vmax=vm2 )

    plane_2 = mlab.pipeline.image_plane_widget(source, 
                                    plane_orientation='{}_axes'.format(axis),
                                    slice_index=100, colormap='seismic',opacity=0.5,  vmin=-vm, vmax=vm )
    # Flip colormap. you can choose to ignore
    plane.module_manager.scalar_lut_manager.reverse_lut = True




mlab.outline()
mlab.show()

результаты: results two different volumes not blended

Я хочудва тома, которые нужно смешать, и видим только один ipw, есть ли способ достичь этого.

тот же slice_index: enter image description here

1 Ответ

0 голосов
/ 03 мая 2019

Я думаю, что вы забыли обновить slice_index для каждого набора данных и каждой оси.Глядя на вашу фигуру, обе плоскости XY изображены в одном месте, но это не относится к XZ и YZ.Это, вероятно, означает, что, учитывая плоскую ориентацию, slice_index не представляет одинаковое пространственное_расположение для обоих наборов данных.

Теперь, если вы исправите это, и оба набора image_plane_widget полностью перекрываются, как вы на самом деле хотите смешать ихи быть в состоянии различить их одновременно?Непрозрачность может быть единственным выбором здесь, и вы можете использовать plane_opacity .Другой вариант - построить один набор данных таким, какой он есть сейчас, а затем нанести значимые контуры второго набора данных поверх него.

РЕДАКТИРОВАТЬ: мне не удалось применить какую-либо прозрачностьили том_слайса или изображение_план_виджета.Тем не менее, похоже, что работает с scalar_cut_plane.Способ определения местоположения самолета, к сожалению, отличается.

scp = mlab.pipeline.scalar_cut_plane(
    mlab.pipeline.scalar_field(data), plane_orientation='y_axes', opacity=0.5)
scp.implicit_plane.widget.origin = np.array([X, Y , Z])
scp.implicit_plane.widget.enabled = False
...