Ola pessoal!
Estamos com dificuldade de integrar o uso do wx com o vtk. Encontrei algo falando sobre dois modulos: o wxVTKRenderWindow.py e o wxVTKRenderWindowInteractor.py, mas nao consegui baixa-los.
Ainda nao consigo com o vtk para criar que seja um cone e visualiza-lo no frame criado pelo boa. Se pudessem mandar algum exemplo simples ou alguma ajuda, seria bem recebido.
Grato pela atencao!
Victor Hugo
Biomag Lab
Fisica Medica - USP
Autor: Victor Hugo de Oliveira Souza
1616 comentários
Imagino então que vou precisar de um mapper para intermediar o vtkImageAppend e o Actor. Encontrei algo sobre o vtkVolumeMapper, mas dá um erro de que esta é uma classe abstrata e não pode ser instanciada. Gostaria que pudessem me ajudar, sobre onde devo procurar informações, que caminho seguir e se estou certo. Obrigado pela atenção! Abraços.
import vtk
import vtkgdcm
import os
import glob directory = os.path.abspath('./arquivo_dcm') file_list = glob.glob(directory + os.sep + '*') array = vtk.vtkStringArray() for x in xrange(len(file_list)):
array.InsertValue(x,file_list[x]) read = vtkgdcm.vtkGDCMImageReader()
read.SetFileNames(array)
read.Update() img = vtk.vtkImageData()
img.DeepCopy(read.GetOutput())
img.SetSpacing(0.48, 0.48, 1.50) #Espaçamento que esta na DICOM
img.Update() # --- Continua partir ponto 1 abaixo #---------------------------- Usando o vtkImageAppend --------------------- import vtk
import glob file_list = glob.glob("D:\\DICOM\\*") #o nome dos arquivos dicom estam numeros na sequencia img_app = vtk.vtkImageAppend()
img_app.SetAppendAxis(2) #colocar de acordo com o eixo Z for x in xrange(len(file_list)): #Percorrer a lista de DICOM
read = vtk.vtkDICOMImageReader()
read.SetFileName(file_list[x])
read.Update() img_app.AddInput(read.GetOutput()) #Empilhar
img_app.Update() img = vtk.vtkImageData()
img.DeepCopy(img_app.GetOutput())
img.SetSpacing(0.47, 0.47, 2.0) #Espacamento da DICOM
img.Update()
# --------- Ponto 1 - Gerar superficie 3D ---------------------------------- thresh = vtk.vtkImageThreshold() #Segmentar
thresh.SetInput(img)
thresh.SetOutValue(1)
thresh.ThresholdBetween(0,1500) #Escolher niveis de cinza de 0 ate 1500
thresh.Update()
mcubes = vtk.vtkMarchingCubes() #Gerar triangulos partir da imagem 3D
mcubes.SetInputConnection(thresh.GetOutputPort())
mcubes.SetValue(0, 350)
mcubes.ComputeGradientsOn() polydata_mapper = vtk.vtkPolyDataMapper()
polydata_mapper.SetInput(mcubes.GetOutput())
polydata_mapper.ScalarVisibilityOff() actor = vtk.vtkActor()
actor.SetMapper(polydata_mapper)
renderer = vtk.vtkRenderer() #--------- Substituir pelo wx conforme exemplos ----- render_window = vtk.vtkRenderWindow()
window_interactor = vtk.vtkRenderWindowInteractor() render_window.AddRenderer( renderer )
window_interactor.SetRenderWindow( render_window )
renderer.AddActor( actor ) render_window.Render()
window_interactor.Start()
Estou com outro problema agora. Eu consegui visualizar 27 fatias de dicom de um experimento com bobina que fizemos aqui, mas a reconstrução ficou toda branca, não aparecia diferentes tons de cinza e foi MUITO lento. Além disso, quando fiz com 180 imagens de uma cabeça, a reconstrução mostrou apenas alguns poucos pontos, mas foi bem mais rápida que a outra, inclusive a interação. Não consegui fazer rodar, usando o directory = os.path.abspath('./arquivo_dcm'). Tentei colocar vários caminhos na string, mas toda vez que rodava simplesmente não apresentava erro nem frame nenhum. Sobre o SetSpacing(a, b, c ) quais valores são esses, grossura da fatia? espaçamento entre fatias? Espero que não esteja dando muito trabalho a você, mas é porque me economiza muito tempo que eu fico quebrando a cabeça. Obrigado novamente pela ajuda! Abraços, Victor Hugo
André.