from image_processing import ImageProcessing import matplotlib.pyplot as plt path = "/Volumes/Files/imagenes/ALMANZA_RUIZ_JUAN_CARLOS/TAC_DE_PELVIS - 84441/_Bone_10_4/" # path = "/Volumes/Files/imagenes/AVILA_MALAGON_ZULMA_IVONNE/TAC_DE_PELVIS_SIMPLE - 89589/_Bone_10_2/" # path = "/Volumes/Files/imagenes/ALVAREZ_PATINO_SOFIA/PELVIS - 73864/_Bone_10_5/" # path = "/Volumes/Files/imagenes/CHACON_BARBA_SERGIO_ANDRES/CADERA_SIMPLE - 103000/_Bone_10_4/" # path = "/Volumes/Files/imagenes/LOAIZA_ORTIZ_JONATHAN_ESTEVEN/CADERA_IZQUIERDA - 94647/_Bone_10_5/" # path = "/Volumes/Files/imagenes/VARGAS_DIAZ_CLAUDIA_PATRICIA/PELVIS_3D - 84024/_Bone_10_5/" c = ImageProcessing() c.execute(path) legs = c.legs segmented_legs = c.segmented_legs segmented_hips = c.segmented_hips for leg_key in legs.keys(): for k in range(100, legs[leg_key].shape[0]): fig = plt.figure(k) a = fig.add_subplot(1, 2, 1) img = plt.imshow(segmented_legs[leg_key][k, :, :], cmap='Greys_r', interpolation="none") a = fig.add_subplot(1, 2, 2) img = plt.imshow(segmented_hips[leg_key][k, :, :], cmap='Greys_r', interpolation="none") if k % 20 == 0: plt.show() plt.show()
class MainWindow(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QMainWindow.__init__(self, parent) self.frame = QtGui.QFrame() self.vl = QtGui.QGridLayout() self.vtkWidget_right_femur = QVTKRenderWindowInteractor(self.frame) self.vtkWidget_right_hip = QVTKRenderWindowInteractor(self.frame) self.vtkWidget_left_femur = QVTKRenderWindowInteractor(self.frame) self.vtkWidget_left_hip = QVTKRenderWindowInteractor(self.frame) title_right_femur = QtGui.QLabel('Femur derecho') title_right_hip = QtGui.QLabel('Cadera derecha') title_left_femur = QtGui.QLabel('Femur izquierdo') title_left_hip = QtGui.QLabel('Cadera izquierda') self.vl.addWidget(title_right_femur, 0, 0) self.vl.addWidget(self.vtkWidget_right_femur, 1, 0) self.vl.addWidget(title_right_hip, 0, 1) self.vl.addWidget(self.vtkWidget_right_hip, 1, 1) self.vl.addWidget(title_left_femur, 2, 0) self.vl.addWidget(self.vtkWidget_left_femur, 3, 0) self.vl.addWidget(title_left_hip, 2, 1) self.vl.addWidget(self.vtkWidget_left_hip, 3, 1) self.ren_right_femur = vtk.vtkRenderer() self.ren_right_hip = vtk.vtkRenderer() self.ren_left_femur = vtk.vtkRenderer() self.ren_left_hip = vtk.vtkRenderer() self.vtkWidget_right_femur.GetRenderWindow().AddRenderer(self.ren_right_femur) self.vtkWidget_right_hip.GetRenderWindow().AddRenderer(self.ren_right_hip) self.vtkWidget_left_femur.GetRenderWindow().AddRenderer(self.ren_left_femur) self.vtkWidget_left_hip.GetRenderWindow().AddRenderer(self.ren_left_hip) self.iren_right_femur = self.vtkWidget_right_femur.GetRenderWindow().GetInteractor() self.iren_right_hip = self.vtkWidget_right_hip.GetRenderWindow().GetInteractor() self.iren_left_femur = self.vtkWidget_left_femur.GetRenderWindow().GetInteractor() self.iren_left_hip = self.vtkWidget_left_hip.GetRenderWindow().GetInteractor() openFile = QtGui.QAction(QtGui.QIcon('open.png'), 'Open', self) openFile.setShortcut('Ctrl+O') openFile.setStatusTip('Open new File') openFile.triggered.connect(self.show_dialog) menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(openFile) self.image_processing = ImageProcessing() self.frame.setLayout(self.vl) self.setCentralWidget(self.frame) self.setGeometry(50, 50, 1200, 800) self.show() def show_dialog(self): fname = QtGui.QFileDialog.getExistingDirectory(None, 'Select a folder:', '', QtGui.QFileDialog.ShowDirsOnly) if fname: self.image_processing.execute(str(fname)) self.update_gui() def update_gui(self): self.clean_gui() self.process_femurs() self.process_hips() self.show() def clean_gui(self): self.ren_right_femur = vtk.vtkRenderer() self.ren_right_hip = vtk.vtkRenderer() self.ren_left_femur = vtk.vtkRenderer() self.ren_left_hip = vtk.vtkRenderer() self.vtkWidget_right_femur.GetRenderWindow().AddRenderer(self.ren_right_femur) self.vtkWidget_right_hip.GetRenderWindow().AddRenderer(self.ren_right_hip) self.vtkWidget_left_femur.GetRenderWindow().AddRenderer(self.ren_left_femur) self.vtkWidget_left_hip.GetRenderWindow().AddRenderer(self.ren_left_hip) self.iren_right_femur = self.vtkWidget_right_femur.GetRenderWindow().GetInteractor() self.iren_right_hip = self.vtkWidget_right_hip.GetRenderWindow().GetInteractor() self.iren_left_femur = self.vtkWidget_left_femur.GetRenderWindow().GetInteractor() self.iren_left_hip = self.vtkWidget_left_hip.GetRenderWindow().GetInteractor() def process_hips(self): hips = self.image_processing.segmented_hips.copy() for key in hips.keys(): actor = self.process_image(hips[key]) if key == self.image_processing.RIGHT_LEG: self.ren_right_hip.AddActor(actor) self.ren_right_hip.ResetCamera() self.iren_right_hip.Initialize() else: self.ren_left_hip.AddActor(actor) self.ren_left_hip.ResetCamera() self.iren_left_hip.Initialize() def process_femurs(self): femurs = self.image_processing.segmented_legs.copy() for key in femurs.keys(): actor = self.process_image(femurs[key]) if key == self.image_processing.RIGHT_LEG: self.ren_right_femur.AddActor(actor) self.ren_right_femur.ResetCamera() self.iren_right_femur.Initialize() else: self.ren_left_femur.AddActor(actor) self.ren_left_femur.ResetCamera() self.iren_left_femur.Initialize() def process_image(self, image): dims = image.shape width = dims[1] height = dims[2] depth = dims[0] vtk_data = numpy_support.numpy_to_vtk(num_array=image.ravel(), deep=True, array_type=vtk.VTK_FLOAT) imgdat = vtk.vtkImageData() imgdat.GetPointData().SetScalars(vtk_data) imgdat.SetDimensions(height, width, depth) imgdat.SetOrigin(0, 0, 0) spacing = self.image_processing.spacing imgdat.SetSpacing(spacing[0], spacing[1], spacing[2]) dmc = vtk.vtkDiscreteMarchingCubes() dmc.SetInputData(imgdat) dmc.GenerateValues(1, 1, 1) dmc.Update() smoothing_iterations = 15 pass_band = 0.001 feature_angle = 120.0 smoother = vtk.vtkWindowedSincPolyDataFilter() smoother.SetInputConnection(dmc.GetOutputPort()) smoother.SetNumberOfIterations(smoothing_iterations) smoother.BoundarySmoothingOff() smoother.FeatureEdgeSmoothingOff() smoother.SetFeatureAngle(feature_angle) smoother.SetPassBand(pass_band) smoother.NonManifoldSmoothingOn() smoother.NormalizeCoordinatesOn() smoother.Update() mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(smoother.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) return actor