大家好,有兴趣的朋友们
我在VTK中将alpha通道添加到卷(由rgb tiffstack制作)时遇到了一些问题。 在Slicer3d应用程序中,我只需在python shell中添加以下SKcript即可完成此操作:
colorVolume = slicer.mrmlScene.GetFirstNodeByClass("vtkMRMLVectorVolumeNode")
# Convert RGB image to RGBA
luminance = vtk.vtkImageLuminance()
luminance.SetInputConnection(colorVolume.GetImageDataConnection())
append=vtk.vtkImageAppendComponents()
append.AddInputConnection(colorVolume.GetImageDataConnection())
append.AddInputConnection(luminance.GetOutputPort())
append.Update()
colorVolume.SetAndObserveImageData(append.GetOutput())
# Enable volume rendering
volRenLogic = slicer.modules.volumerendering.logic()
displayNode = volRenLogic.CreateDefaultVolumeRenderingNodes(colorVolume)
displayNode.SetVisibility(True)
# Enable direct RGBA color mapping
displayNode.GetVolumePropertyNode().GetVolumeProperty().SetIndependentComponents(0)
现在,我正在使用vtk在自己的python脚本中尝试这一点。但我缺少从切片器到Python VTK的正确翻译
为了更好地理解,我的输入数据是RBG中的Tifftack/MultiImageTiff,我使用以下代码读取它:
filename = "D:/SomeFilePath/Some_Tiff_Stack.tif"
colors = vtk.vtkNamedColors()
# renderer, render window
# and interactor.
ren1 = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren1)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
# Create the reader for the Tiff-Data (Multi-Image-Tiff)
reader = vtk.vtkTIFFReader()
reader.SetFileName(filename)
reader.SetDataSpacing(1,1,1)
# Create transfer mapping scalar value to opacity (configured in Slicer app).
opacityTransferFunction = vtk.vtkPiecewiseFunction()
opacityTransferFunction.AddPoint(0, 0)
opacityTransferFunction.AddPoint(20, 0)
opacityTransferFunction.AddPoint(40, 0.45)
opacityTransferFunction.AddPoint(98.26, 0.78)
opacityTransferFunction.AddPoint(255, 0)
# Create transfer mapping scalar value to color.
colorTransferFunction = vtk.vtkColorTransferFunction()
colorTransferFunction.AddRGBPoint(0.0, 1, 1, 1)
colorTransferFunction.AddRGBPoint(64.0, 1.0, 1, 1)
colorTransferFunction.AddRGBPoint(128.0, 1.0, 1, 1.0)
colorTransferFunction.AddRGBPoint(192.0, 1.0, 1.0, 1.0)
colorTransferFunction.AddRGBPoint(255.0, 1, 1, 1)
# The property describes how the data will look.
volumeProperty = vtk.vtkVolumeProperty()
volumeProperty.SetColor(colorTransferFunction)
volumeProperty.SetScalarOpacity(opacityTransferFunction)
volumeProperty.SetInterpolationTypeToLinear()
'''
#This is what i need to translate to python/vtk
luminance = vtk.vtkImageLuminance()
luminance.SetInputConnection(colorVolume.GetImageDataConnection())
append=vtk.vtkImageAppendComponents()
append.AddInputConnection(colorVolume.GetImageDataConnection())
append.AddInputConnection(luminance.GetOutputPort())
append.Update()
colorVolume.SetAndObserveImageData(append.GetOutput())
volumeProperty.SetIndependentComponents(0)
'''
# The mapper / ray cast function know how to render the data.
#volumeMapper = vtk.vtkFixedPointVolumeRayCastMapper()
volumeMapper = vtk.vtkGPUVolumeRayCastMapper()
volumeMapper.SetInputConnection(reader.GetOutputPort())
volume = vtk.vtkVolume()
volume.SetMapper(volumeMapper)
volume.SetProperty(volumeProperty)
#volumeProperty.SetIndependentComponents(0)
ren1.AddVolume(volume)
ren1.ResetCameraClippingRange()
ren1.ResetCamera()
renWin.SetSize(600, 600)
renWin.Render()
iren.Start()
如果有人知道如何做到这一点,我真的非常感谢任何帮助。 直到现在,我“只”在我的图像/卷周围有一个黑匣子。在alpha chanel的帮助下,我将能够将黑盒设置为透明
致意 巴斯蒂安
作为修复/翻译,我建议如下:
这将创建亮度贴图,并将其与图像合并为RGBA图像
这一行作为创建图像到切片器的反馈,在本例中,当您执行自己的渲染时,不需要切片器
相关问题 更多 >
编程相关推荐