Настройки камеры VTK не влияют на 2D-рендеринг resliceCursorWidget в Python/DICOMPython

Программы на Python
Anonymous
Настройки камеры VTK не влияют на 2D-рендеринг resliceCursorWidget в Python/DICOM

Сообщение Anonymous »

Тело:
Описание:
Я работаю над приложением Python, использующим VTK для визуализации изображений DICOM. Я настроил несколько средств визуализации для отображения различных фрагментов данных объема для наклонного MPR, используя виджет изменения фрагмента курсора VTK. Однако у меня возникли проблемы с настройкой параметров камеры для этих средств визуализации. Несмотря на настройку положения камеры и направления обзора вверх, визуальный результат не меняется должным образом. В результате изображения перевернуты. Введите здесь описание изображения.
Проблема:
Я хочу настроить камеру так, чтобы она смотрела вдоль плоскости в отрицательном направлении. Я попытался установить положение камеры и вектор просмотра вверх, но кажется, что вызов ResetCamera переопределяет эти настройки. Настройки viewUp и положения камеры не отражаются в визуализации.
Фрагмент кода:
Вот упрощенная версия моего кода, в которой я настраиваю средства визуализации и пытаюсь настроить камера:

Код: Выделить всё

from vtk import *
import numpy as np

# Reslice cursor callback
def ResliceCursorCallback(obj, event):
for i in range(0, 3):
ps = planeWidgetArray[i].GetPolyDataAlgorithm()
origin = resliceCursorWidgetArray[i].GetResliceCursorRepresentation().GetPlaneSource().GetOrigin()
ps.SetOrigin(origin)
point1 = resliceCursorWidgetArray[i].GetResliceCursorRepresentation().GetPlaneSource().GetPoint1()
ps.SetPoint1(point1)
point2 = resliceCursorWidgetArray[i].GetResliceCursorRepresentation().GetPlaneSource().GetPoint2()
ps.SetPoint2(point2)
planeWidgetArray[i].UpdatePlacement()

# DICOM reader
reader = vtkDICOMImageReader()
reader.SetDirectoryName("/path/to/dicom")
reader.Update()
imageDims = reader.GetOutput().GetDimensions()

# Renderer setup
viewUp = [[0, 0, -1], [0, 0, -1], [0, -1, 0]]
RendererArray = [None] * 4
planeWidgetArray = [None] * 3
resliceCursorWidgetArray = [None] * 3
resliceCursorRepArray = [None] * 3

renWin = vtkRenderWindow()
iren = vtkRenderWindowInteractor()
renWin.SetInteractor(iren)

for i in range(0, 4):
RendererArray[i] = vtkRenderer()
renWin.AddRenderer(RendererArray[i])

for i in range(0, 3):
resliceCursorWidgetArray[i] = vtkResliceCursorWidget()
resliceCursorRepArray[i] = vtkResliceCursorLineRepresentation()
resliceCursorWidgetArray[i].SetInteractor(iren)
resliceCursorWidgetArray[i].SetRepresentation(resliceCursorRepArray[i])
resliceCursorRepArray[i].GetResliceCursorActor().GetCursorAlgorithm().SetResliceCursor(resliceCursor)
resliceCursorRepArray[i].GetResliceCursorActor().GetCursorAlgorithm().SetReslicePlaneNormal(i)
reslice = resliceCursorRepArray[i].GetReslice()
reslice.SetInputConnection(reader.GetOutputPort())
reslice.AutoCropOutputOn()
reslice.Update()
resliceCursorWidgetArray[i].SetDefaultRenderer(RendererArray[i])
resliceCursorWidgetArray[i].SetEnabled(1)
# Set the custom camera position and orientation
RendererArray[i].GetActiveCamera().SetFocalPoint(0, 0, 0)
camPos = [0, 0, 0]
camPos[i] = -1  # Set the camera position for the current plane orientation to negative direction
RendererArray[i].GetActiveCamera().SetPosition(camPos[0], camPos[1], camPos[2])
RendererArray[i].GetActiveCamera().ParallelProjectionOn()
RendererArray[i].GetActiveCamera().SetViewUp(viewUp[i][0], viewUp[i][1], viewUp[i][2])
RendererArray[i].ResetCamera()
# Print the camera position for debugging
camera_position = RendererArray[i].GetActiveCamera().GetPosition()
print(f"Camera Position for Renderer {i}: {camera_position}")

# Print the actual view up vector after setting it
actual_view_up = RendererArray[i].GetActiveCamera().GetViewUp()
print(f"View Up for Renderer {i}: {actual_view_up}")

resliceCursorWidgetArray[i].AddObserver('InteractionEvent', ResliceCursorCallback)

# Background and viewport settings
RendererArray[0].SetBackground(0.3, 0.1, 0.1)
RendererArray[1].SetBackground(0.1, 0.3, 0.1)
RendererArray[2].SetBackground(0.1, 0.1, 0.3)
RendererArray[3].SetBackground(0.1, 0.1, 0.1)
renWin.SetSize(600, 600)

RendererArray[0].SetViewport(0, 0, 0.5, 0.5)
RendererArray[1].SetViewport(0.5, 0, 1, 0.5)
RendererArray[2].SetViewport(0, 0.5, 0.5, 1)
RendererArray[3].SetViewport(0.5, 0.5, 1, 1)

# Start interaction
iren.Initialize()
iren.Start()
Вопрос:
Как я могу гарантировать, что настройки камеры (положение и вид вверх) правильно применяются и сохраняются для моих 2D-рендереров? Почему мои изменения в параметрах камеры не влияют на визуализацию? Возможно ли это вообще с помощью виджета reslice?
Будем очень признательны за любую помощь или рекомендации!

Подробнее здесь: https://stackoverflow.com/questions/787 ... -in-python

Вернуться в «Python»