【问题标题】:mayavi enthought volume rendering buggy guimayavi 考虑体积渲染 buggy gui
【发布时间】:2015-08-19 17:45:12
【问题描述】:

我想我遇到了一个真正的错误。似乎颜色传递函数(CTF)接口发生了一些非常奇怪且肯定不直观的事情。

我将在下面的链接 (5MB) 中描述我在电影中展示的内容: https://drive.google.com/file/d/0B2DsQIFbCQmELTZzWVc1MDc1MGM/view?usp=sharing

动作:mlab.pipeline.volume(随便)。如何创建体积渲染并不重要。 结果:卷源显示为红色。很好。

操作:用户只需点击音量传输功能,无需对其进行太多更改。您甚至可以将其移回原来的位置。 结果:体积源完全从红色变为绿色:表明“Mayavi pipeline”窗口中的CTF与“Mayavi Scene 1”中最初使用的CTF不同

操作:用户至少点击过一次不透明度传递函数,然后点击离开。然后用户点击返回。 结果:CTF完全变成了这种蓝红渐变色,而不是之前那种好看的三色款式。如果用户再次与 OTF 发生冲突,更新 CTF 将再次更改音量!从这种绿色到这种红紫色。

注意:导致 CTF 发生这种奇怪变化的不仅仅是“点击离开”和点击返回。我最初在更改数据源时遇到了这个问题。我说过 5 个不同的卷。每当我说“array_src.scalar_values=my_volumes.next()”时,当且仅当我尝试在 GUI 中手动更改 ctf 时,CTF 才会从 rgb 变为蓝红色渐变。

我真的希望我们能解决这个问题。

谢谢, 克里斯·斯奈德

【问题讨论】:

    标签: python-2.7 enthought mayavi volume-rendering


    【解决方案1】:

    我有一个解决方法。这里的要点是,当您将数据切换为体积渲染时,ctf 和 otf 保持原位,而不是进行奇怪的重新缩放和颜色更改。解决方案有两个。

    1) 确保所有数据量都精确 0-255。您必须确保最小值和最大值分别正好是 0 和 255,而不仅仅是在 [0,255] 范围内。这很重要,因为当您切换出 array.scalar_data 时,mayavi 会尝试根据您的数据重新调整 ctf/otf 范围。但是,它以奇怪的方式失败了。

    2) 不要使用 SceneEditor(MayaviScene) 的内置编辑器,而是直接公开与您的数据关联的 Volume.view 特征。更改基础数据时,对此 ctf/otf 编辑器的更改不会将音量从蓝绿红模式切换到蓝红渐变。这是如何做到的:(关键行是 Item('vol_module',style='custom',show_label=False)

    B=io.imread(bad)
    G=io.imread(good)
    B=B-B.min();B/=B.max();B*=255
    G=G-G.min();G/=G.max();G*=255
    class Vis(HasTraits):
        query=Str()
        scene     = Instance(MlabSceneModel,())    
    
        switch_data=Button()
    
        #You have to put vol_module here (or call add_trait later in init) for View() to see it
        vol_module=Instance(Volume(),())
        editor=SceneEditor(scene_class=MayaviScene)
        def __init__(self,G,B):
            self.G=G
            self.B=B
            HasTraits.__init__(self)
            self.array_src=ArraySource()
            self.array_src.scalar_data=G
            self.G_active=True
            self.scene.mayavi_scene.add_child(self.array_src)
            self.volume=self.array_src.add_module(self.vol_module)
    
    
        def _switch_data_fired(self):
            if self.G_active:
                self.array_src.scalar_data=self.B
                self.G_active=False
            else:
                self.array_src.scalar_data=self.G
                self.G_active=True
    
        traits_view = View( 
                HGroup(
                        Item('scene',editor=editor,height=250, width=300, show_label=False),
    
                        Item('vol_module',style='custom',show_label=False),#critical
                      )
                         )
    
    vis=Vis(G,B)
    #vis=Vis(B,G)
    vis.configure_traits()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多