如何使用python中的VTK库渲染显微镜图像?

2024-07-03 07:31:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个DICOM文件中的两个显微镜图像,我想使用VTK渲染它们。我能够渲染CT DICOM图像,但我无法可视化显微镜图像。可视化框在我运行下面的代码后显示,但它没有显示图像,我认为它与颜色或其他东西有关。 所以我的问题是我该如何修复它

import vtk

# source—filter——mapper——actor——render——renderwindow——interactor
aRenderer = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(aRenderer)
# renWin.Render()
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)


v16 = vtk.vtkDICOMImageReader()
v16.SetDirectoryName('/home/Micro/')


skinExtractor = vtk.vtkContourFilter()
skinExtractor.SetInputConnection(v16.GetOutputPort())
skinExtractor.SetValue(0, -10)
# skinExtractor.GenerateValues(2, 100, 110)
skinNormals = vtk.vtkPolyDataNormals()
skinNormals.SetInputConnection(skinExtractor.GetOutputPort())
skinNormals.SetFeatureAngle(60.0)
skinMapper = vtk.vtkPolyDataMapper()
skinMapper.SetInputConnection(skinNormals.GetOutputPort())
skinMapper.ScalarVisibilityOff()

skin = vtk.vtkActor()

skin.GetProperty().SetColor(0, 0, 1)
skin.SetMapper(skinMapper)

skin.GetProperty().SetDiffuseColor(0, 10, 1000)

skin.GetProperty().SetSpecular(100.5)

skin.GetProperty().SetSpecularPower(200)


outlineData = vtk.vtkOutlineFilter()
outlineData.SetInputConnection(v16.GetOutputPort())
mapOutline = vtk.vtkPolyDataMapper()
mapOutline.SetInputConnection(outlineData.GetOutputPort())
outline = vtk.vtkActor()
outline.SetMapper(mapOutline)
outline.GetProperty().SetColor(0, 0, 0)


aCamera = vtk.vtkCamera()
aCamera.SetViewUp(0, 0, -1)
aCamera.SetPosition(0, 1, 0)
aCamera.SetFocalPoint(0, 0, 0)
aCamera.ComputeViewPlaneNormal()

aRenderer.AddActor(outline)
aRenderer.AddActor(skin)
aRenderer.SetActiveCamera(aCamera)

aRenderer.ResetCamera()
# aCamera.Dolly(1.5)
# aCamera.Roll(180)
# aCamera.Yaw(60)

aRenderer.SetBackground(250, 250, 250)
# renWin.SetSize(640, 480)

renWin.SetSize(500, 500)
aRenderer.ResetCameraClippingRange()

style = vtk.vtkInteractorStyleTrackballCamera()
iren.SetInteractorStyle(style)

iren.Initialize()
iren.Start()

有什么建议吗? 另一个问题是,除了使用VTK,还有没有更好更有效的方法将120幅Dicom图像重建成3D? 我不认为我会有太多的颜色选项控制,一旦它显示使用VTK。是吗


Tags: 图像skinvtkv16outlinegetoutputportsetinputconnectionrenwin