def __init__(self): #os.system("pwd") if os.path.exists(self.gladeFile): theFile = self.gladeFile elif os.path.exists("gui/"+self.gladeFile): theFile = "gui/"+self.gladeFile else: theFile = os.path.join( distutils.sysconfig.PREFIX, 'share', 'pbrain', self.gladeFile) self.widgets = gtk.glade.XML (theFile) self.widgets.signal_autoconnect(GladeHandlers.__dict__) #self['entryDir'].set_text('/home/jdhunter/python/examples/vtk/images/') self.outDim = 256, 256 self.viewer = vtk.vtkImageViewer() self.preview = GtkGLExtVTKRenderWindow() self.preview.set_size_request(self.outDim[0], self.outDim[1]) self.preview.show() self.renderer = self.viewer.GetRenderer() self.preview.GetRenderWindow().AddRenderer(self.renderer) self['vboxPreview'].pack_start(self.preview, False, False) self['vboxPreview'].reorder_child(self.preview, 1)
def main(): file_name = get_program_parameters() reader = vtk.vtkHDRReader() # Check the image can be read if not reader.CanReadFile(file_name): print('CanReadFile failed for ', file_name) return reader.SetFileName(file_name) reader.UpdateInformation() # Whole extent we = reader.GetDataExtent() extents = [we[0], we[1], we[2], we[3], 0, 0] reader.UpdateExtent(extents) # Visualize image_viewer = vtk.vtkImageViewer() image_viewer.SetInputData(reader.GetOutput()) image_viewer.SetColorWindow(1) image_viewer.SetColorLevel(1) image_viewer.SetPosition(0, 100) iren = vtk.vtkRenderWindowInteractor() image_viewer.SetupInteractor(iren) image_viewer.GetRenderWindow().SetWindowName('HDRReader') image_viewer.Render() iren.AddObserver('EndInteractionEvent', ColorCallback(image_viewer)) iren.Start()
def viewVtk(mat): import vtk imageData = vtk.vtkImageData() imageData.SetDimensions(mat.shape[0], mat.shape[1], 1) imageData.SetScalarTypeToUnsignedShort() imageData.SetNumberOfScalarComponents(1) imageData.AllocateScalars() viewer = vtk.vtkImageViewer() viewer.SetInput(imageData) viewer.SetZSlice(0) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(viewer.GetRenderWindow()) iren.Initialize() iren.Start() imageData = vtk.vtkImageSinusoidSource() imageData.SetWholeExtent(0, 300, 0, 300, 0, 10) imageData.SetAmplitude(63) imageData.SetDirection(1, 1, 0) imageData.SetPeriod(25) viewer = vtk.vtkImageViewer() viewer.SetInput(imageData.GetOutput()) viewer.SetColorWindow(126) viewer.SetColorLevel(0) viewer.SetZSlice(0) def hamschti(obj, event): print 'Haam:' print obj print event iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(viewer.GetRenderWindow()) iren.Initialize() interactor = vtk.vtkInteractorStyleImage() ##interactor.AddObserver('LeftButtonPressEvent', hamschti) iren.SetInteractorStyle(interactor) iren.Start()
def viewVtk(mat): import vtk imageData = vtk.vtkImageData() imageData.SetDimensions(mat.shape[0], mat.shape[1], 1) imageData.SetScalarTypeToUnsignedShort() imageData.SetNumberOfScalarComponents(1) imageData.AllocateScalars() viewer = vtk.vtkImageViewer() viewer.SetInput(imageData) viewer.SetZSlice(0) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(viewer.GetRenderWindow()) iren.Initialize() iren.Start() imageData = vtk.vtkImageSinusoidSource() imageData.SetWholeExtent(0, 300, 0, 300, 0, 10) imageData.SetAmplitude(63) imageData.SetDirection(1, 1, 0) imageData.SetPeriod(25) viewer = vtk.vtkImageViewer() viewer.SetInput(imageData.GetOutput()) viewer.SetColorWindow(126) viewer.SetColorLevel(0) viewer.SetZSlice(0) def hamschti(obj, event): print "Haam:" print obj print event iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(viewer.GetRenderWindow()) iren.Initialize() interactor = vtk.vtkInteractorStyleImage() ##interactor.AddObserver('LeftButtonPressEvent', hamschti) iren.SetInteractorStyle(interactor) iren.Start()
def __getattr__(self, attr): # because the tk part of vtkTkImageViewerWidget must have # the only remaining reference to the ImageViewer when # it is destroyed, we can't actually store the ImageViewer # as an attribute but instead have to get it from the tk-side if attr == "_ImageViewer": addr = self.tk.call(self._w, "GetImageViewer")[5:] return vtk.vtkImageViewer("_%s_vtkImageViewer_p" % addr) raise AttributeError, self.__class__.__name__ + " has no attribute named " + attr
def View(imagedata): viewer = vtk.vtkImageViewer() viewer.SetInput(imagedata) viewer.SetColorWindow(200) viewer.SetColorLevel(100) viewer.Render() import time time.sleep(10)
def __getattr__(self, attr): # because the tk part of vtkTkImageViewerWidget must have # the only remaining reference to the ImageViewer when # it is destroyed, we can't actually store the ImageViewer # as an attribute but instead have to get it from the tk-side if attr == '_ImageViewer': addr = self.tk.call(self._w, 'GetImageViewer')[5:] return vtk.vtkImageViewer('_%s_vtkImageViewer_p' % addr) raise AttributeError, self.__class__.__name__ + \ " has no attribute named " + attr
def displayOneSlice(image, slice=30, window=255, level=127): viewer = vtk.vtkImageViewer() viewer.SetInput(image) viewer.SetZSlice(slice) viewer.SetColorWindow(window) viewer.SetColorLevel(level) viewer.Render() interact = vtk.vtkRenderWindowInteractor() viewer.SetupInteractor(interact) interact.Initialize() interact.Start()
def slotShowDICOMImage(self, item): reader = vtkgdcm.vtkGDCMImageReader() dicom_file = unicode(item.data(QtCore.Qt.UserRole).toString()) reader.SetFileName(dicom_file) reader.Update() imageViewer = vtk.vtkImageViewer() imageViewer.SetInputConnection(reader.GetOutputPort()) self.qvtkWidget.SetRenderWindow(imageViewer.GetRenderWindow()) imageViewer.SetupInteractor(self.qvtkWidget.GetRenderWindow().GetInteractor()) #imageViewer.SetColorLevel(128) #imageViewer.SetColorWindow(256) imageViewer.SetSize(self.qvtkWidget.geometry().width(), self.qvtkWidget.geometry().height())
def __init__(self, master, cnf={}, **kw): """ Constructor. Keyword arguments: iv -- Use passed image viewer instead of creating a new one. double -- If True, generate a double-buffered viewer. Defaults to False. focus_on_enter -- If True, use a focus-follows-mouse mode. Defaults to False where the widget will use a click-to-focus mode. """ # load the necessary extensions into tk vtkLoadPythonTkWidgets(master.tk) try: # use specified vtkImageViewer imageViewer = kw['iv'] except KeyError: # or create one if none specified imageViewer = vtk.vtkImageViewer() doubleBuffer = 0 try: if kw['double']: doubleBuffer = 1 del kw['double'] except: pass # check if focus should follow mouse if kw.get('focus_on_enter'): self._FocusOnEnter = 1 del kw['focus_on_enter'] else: self._FocusOnEnter = 0 kw['iv'] = imageViewer.GetAddressAsString("vtkImageViewer") Tkinter.Widget.__init__(self, master, 'vtkTkImageViewerWidget', cnf, kw) if doubleBuffer: imageViewer.GetRenderWindow().DoubleBufferOn() self.BindTkImageViewer()
def setupUi(self, ReadDICOMSeriesQt): ReadDICOMSeriesQt.setObjectName(_fromUtf8("ReadDICOMSeriesQt")) ReadDICOMSeriesQt.resize(541, 531) self.centralWidget = QtGui.QWidget(ReadDICOMSeriesQt) self.centralWidget.setObjectName(_fromUtf8("centralWidget")) self.buttonOpenFolder = QtGui.QPushButton(self.centralWidget) self.buttonOpenFolder.setGeometry(QtCore.QRect(10, 430, 121, 24)) self.buttonOpenFolder.setObjectName(_fromUtf8("buttonOpenFolder")) self.sliderSlices = QtGui.QSlider(self.centralWidget) self.sliderSlices.setGeometry(QtCore.QRect(140, 430, 381, 23)) self.sliderSlices.setOrientation(QtCore.Qt.Horizontal) self.sliderSlices.setObjectName(_fromUtf8("sliderSlices")) self.labelFolderName = QtGui.QLabel(self.centralWidget) self.labelFolderName.setGeometry(QtCore.QRect(140, 470, 381, 15)) self.labelFolderName.setObjectName(_fromUtf8("labelFolderName")) self.labelSlicesNumber = QtGui.QLabel(self.centralWidget) self.labelSlicesNumber.setGeometry(QtCore.QRect(140, 500, 381, 15)) self.labelSlicesNumber.setObjectName(_fromUtf8("labelSlicesNumber")) self.labelSlicesNumberTitle = QtGui.QLabel(self.centralWidget) self.labelSlicesNumberTitle.setGeometry(QtCore.QRect(20, 500, 59, 15)) self.labelSlicesNumberTitle.setObjectName( _fromUtf8("labelSlicesNumberTitle")) self.labelFolderNameTitle = QtGui.QLabel(self.centralWidget) self.labelFolderNameTitle.setGeometry(QtCore.QRect(20, 470, 59, 15)) self.labelFolderNameTitle.setObjectName( _fromUtf8("labelFolderNameTitle")) self.qvtkWidget = QVTKRenderWindowInteractor(self.centralWidget) self.qvtkWidget.setGeometry(QtCore.QRect(10, 10, 521, 411)) self.qvtkWidget.setObjectName(_fromUtf8("qvtkWidget")) ReadDICOMSeriesQt.setCentralWidget(self.centralWidget) self.reader = vtk.vtkDICOMImageReader() self.imageViewer = vtk.vtkImageViewer() self.interactor = vtk.vtkInteractorStyleImage() self.renderWindowInteractor = vtk.vtkRenderWindowInteractor() self.minSlice = 0 self.maxSlice = 0 self.fname = "" self.dicomfiles = [] self.retranslateUi(ReadDICOMSeriesQt) QtCore.QMetaObject.connectSlotsByName(ReadDICOMSeriesQt)
def ImageActor(img): reader = vtkImageImportFromArray() reader.SetArray(img) ImageDataGeometryFilter = vtk.vtkImageDataGeometryFilter() ImageDataGeometryFilter.SetInputConnection(reader.GetOutputPort()) ImageDataGeometryFilter.Update() # textureCoordinates = vtk.vtkFloatArray() # textureCoordinates.SetNumberOfComponents(2) # textureCoordinates.InsertNextTuple2(0.0, 1.0) # textureCoordinates.InsertNextTuple2(1.0, 1.0) # textureCoordinates.InsertNextTuple2(1.0, 0.0) # textureCoordinates.InsertNextTuple2(0.0, 0.0) mag = vtk.vtkImageMagnify() mag.SetMagnificationFactors(512, 512, 1) mag.InterpolateOff() mag.SetInputConnection(reader.GetOutputPort()) mapper = vtk.vtkImageMapper() # mapper.SetInputConnection(reader.GetOutputPort()) # mapper.SetColorWindow(4) # mapper.SetColorLevel(255) # mapper.SetZSlice(0) mapper.SetInputConnection(mag.GetOutputPort()) # mapper.SetColorlevel(1000) viewer = vtk.vtkImageViewer() viewer.SetInputConnection(reader.GetOutputPort()) viewer.SetColorWindow(4) viewer.SetColorLevel(255) # viewer.SetZSlice(0) viewer.Render() actor = vtk.vtkActor2D() actor.SetMapper(mapper.GetOutputPort()) # actor=vtk.vtkImageActor() # actor.SetMapper(mapper) # actor.SetInputData(reader.GetOutput()) return actor, viewer
def initGUI(self): QtGui.QMainWindow.__init__(self) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setWindowTitle("Simple Dicom Viewer") #self.dicomReader = vtk.vtkDICOMImageReader() #self.dicomReader = vtkgdcm.vtkGDCMImageReader() self.show() self.figure = plt.figure() self.canvas = FigureCanvas(self.figure) self.toolbar = NavigationToolbar(self.canvas, self) self.ui.numpyLayout.addWidget(self.toolbar) self.ui.numpyLayout.addWidget(self.canvas) self.vtkWidget = QVTKRenderWindowInteractor(self.ui.imageFrame) self.vtkWidget.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) #self.ui.imageLayout.removeWidget(self.ui.dicomSlider) self.ui.imageLayout.addWidget(self.vtkWidget) #self.ui.imageLayout.addWidget(self.ui.dicomSlider) self.disableSlider() self.viewer= vtk.vtkImageViewer() #self.viewer.SetupInteractor(MyInteractor()) self.vtkWidget.GetRenderWindow().AddRenderer(self.viewer.GetRenderer()) self.iren = self.vtkWidget.GetRenderWindow().GetInteractor() #self.iren.SetRenderWindow(self.vtkWidget.GetRenderWindow()) self.drag = False self.measuring = False self.iren.AddObserver("LeftButtonPressEvent", self.leftClick) self.iren.AddObserver("LeftButtonReleaseEvent", self.leftRelease) self.iren.AddObserver("EnterEvent", self.mouseEntered) self.iren.AddObserver("LeaveEvent", self.mouseLeft) self.iren.AddObserver("MouseMoveEvent", self.mouseMoved)
def SetUp(self): ''' Set up cursor3D ''' def OnClosing(): self.root.quit() def ViewerDown(tkvw): viewer = tkvw.GetImageViewer() ViewerSetZSlice(tkvw, viewer.GetZSlice() - 1) def ViewerUp(tkvw): viewer = tkvw.GetImageViewer() ViewerSetZSlice(tkvw, viewer.GetZSlice() + 1) def ViewerSetZSlice(tkvw, z): viewer = tkvw.GetImageViewer() viewer.SetZSlice(z) txt = 'slice: ' + str(z) sliceLabel.configure(text=txt) tkvw.Render() def SetCursorFromViewer(event): x = int(event.x) y = int(event.y) # We have to flip y axis because tk uses upper right origin. self.root.update_idletasks() height = int(self.tkvw.configure()['height'][4]) y = height - y z = self.tkvw.GetImageViewer().GetZSlice() SetCursor(x / IMAGE_MAG_X, y / IMAGE_MAG_Y, z / IMAGE_MAG_Z) def SetCursor(x, y, z): CURSOR_X = x CURSOR_Y = y CURSOR_Z = z axes.SetOrigin(CURSOR_X, CURSOR_Y, CURSOR_Z) imageCursor.SetCursorPosition(CURSOR_X * IMAGE_MAG_X, CURSOR_Y * IMAGE_MAG_Y, CURSOR_Z * IMAGE_MAG_Z) self.viewer.Render() self.tkrw.Render() # Pipeline stuff. reader = vtk.vtkSLCReader() reader.SetFileName(VTK_DATA_ROOT + "/Data/neghip.slc") # Cursor stuff magnify = vtk.vtkImageMagnify() magnify.SetInputConnection(reader.GetOutputPort()) magnify.SetMagnificationFactors(IMAGE_MAG_X, IMAGE_MAG_Y, IMAGE_MAG_Z) imageCursor = vtk.vtkImageCursor3D() imageCursor.SetInputConnection(magnify.GetOutputPort()) imageCursor.SetCursorPosition(CURSOR_X * IMAGE_MAG_X, CURSOR_Y * IMAGE_MAG_Y, CURSOR_Z * IMAGE_MAG_Z) imageCursor.SetCursorValue(255) imageCursor.SetCursorRadius(50 * IMAGE_MAG_X) axes = vtk.vtkAxes() axes.SymmetricOn() axes.SetOrigin(CURSOR_X, CURSOR_Y, CURSOR_Z) axes.SetScaleFactor(50.0) axes_mapper = vtk.vtkPolyDataMapper() axes_mapper.SetInputConnection(axes.GetOutputPort()) axesActor = vtk.vtkActor() axesActor.SetMapper(axes_mapper) axesActor.GetProperty().SetAmbient(0.5) # Image viewer stuff. viewer = vtk.vtkImageViewer() viewer.SetInputConnection(imageCursor.GetOutputPort()) viewer.SetZSlice(CURSOR_Z * IMAGE_MAG_Z) viewer.SetColorWindow(256) viewer.SetColorLevel(128) # Create transfer functions for opacity and color. opacity_transfer_function = vtk.vtkPiecewiseFunction() opacity_transfer_function.AddPoint(20, 0.0) opacity_transfer_function.AddPoint(255, 0.2) color_transfer_function = vtk.vtkColorTransferFunction() color_transfer_function.AddRGBPoint(0, 0, 0, 0) color_transfer_function.AddRGBPoint(64, 1, 0, 0) color_transfer_function.AddRGBPoint(128, 0, 0, 1) color_transfer_function.AddRGBPoint(192, 0, 1, 0) color_transfer_function.AddRGBPoint(255, 0, .2, 0) # Create properties, mappers, volume actors, and ray cast function. volume_property = vtk.vtkVolumeProperty() volume_property.SetColor(color_transfer_function) # volume_property.SetColor(color_transfer_function[0], # color_transfer_function[1], # color_transfer_function[2]) volume_property.SetScalarOpacity(opacity_transfer_function) volume_mapper = vtk.vtkFixedPointVolumeRayCastMapper() volume_mapper.SetInputConnection(reader.GetOutputPort()) volume = vtk.vtkVolume() volume.SetMapper(volume_mapper) volume.SetProperty(volume_property) # Create outline. outline = vtk.vtkOutlineFilter() outline.SetInputConnection(reader.GetOutputPort()) outline_mapper = vtk.vtkPolyDataMapper() outline_mapper.SetInputConnection(outline.GetOutputPort()) outlineActor = vtk.vtkActor() outlineActor.SetMapper(outline_mapper) outlineActor.GetProperty().SetColor(1, 1, 1) # Create the renderer. ren = vtk.vtkRenderer() ren.AddActor(axesActor) ren.AddVolume(volume) ren.SetBackground(0.1, 0.2, 0.4) renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren) renWin.SetSize(256, 256) # Create the GUI: two renderer widgets and a quit button. self.root = tkinter.Tk() self.root.title("cursor3D") # Define what to do when the user explicitly closes a window. self.root.protocol("WM_DELETE_WINDOW", OnClosing) # Help label, frame and quit button helpLabel = tkinter.Label( self.root, text= "MiddleMouse (or shift-LeftMouse) in image viewer to place cursor") displayFrame = tkinter.Frame(self.root) quitButton = tkinter.Button(self.root, text="Quit", command=OnClosing) # Pack the GUI. helpLabel.pack() displayFrame.pack(fill=BOTH, expand=TRUE) quitButton.pack(fill=X) # Create the viewer widget. viewerFrame = tkinter.Frame(displayFrame) viewerFrame.pack(padx=3, pady=3, side=LEFT, anchor=N, fill=BOTH, expand=FALSE) self.tkvw = vtkTkImageViewerWidget(viewerFrame, iv=viewer, width=264, height=264) viewerControls = tkinter.Frame(viewerFrame) viewerControls.pack(side=BOTTOM, anchor=S, fill=BOTH, expand=TRUE) self.tkvw.pack(side=TOP, anchor=N, fill=BOTH, expand=FALSE) downButton = tkinter.Button(viewerControls, text="Down", command=[ViewerDown, self.tkvw]) upButton = tkinter.Button(viewerControls, text="Up", command=[ViewerUp, self.tkvw]) sliceLabel = tkinter.Label(viewerControls, text="slice: " + str(CURSOR_Z * IMAGE_MAG_Z)) downButton.pack(side=LEFT, expand=TRUE, fill=BOTH) upButton.pack(side=LEFT, expand=TRUE, fill=BOTH) sliceLabel.pack(side=LEFT, expand=TRUE, fill=BOTH) # Create the render widget renderFrame = tkinter.Frame(displayFrame) renderFrame.pack(padx=3, pady=3, side=LEFT, anchor=N, fill=BOTH, expand=TRUE) self.tkrw = vtkTkRenderWidget(renderFrame, rw=renWin, width=264, height=264) self.tkrw.pack(side=TOP, anchor=N, fill=BOTH, expand=TRUE) # Bindings self.tkvw.BindTkImageViewer() self.tkrw.BindTkRenderWidget() # Lets add an extra binding of the middle button in the image viewer # to set the cursor location. self.tkvw.bind('<Button-2>', SetCursorFromViewer) self.tkvw.bind('<Shift-Button-1>', SetCursorFromViewer) # Associate the functions with the buttons and label. # downButton.config(command=partial(ViewerDown, self.tkvw)) upButton.config(command=partial(ViewerUp, self.tkvw))
def visualize(txt_Wurl): winSize = 800 ############################################# def LoadData(datapath): ''' Function to load input image in NIFTI or DICOM Argument: path to the input file Returns: a vtkImageData ''' reader = vtk.vtkImageReader() if (os.path.isdir(datapath)): reader = vtk.vtkDICOMImageReader() reader.SetDirectoryName(datapath) else: reader = vtk.vtkNIFTIImageReader() reader.SetFileName(datapath) reader.SetDataScalarType(vtk.VTK_UNSIGNED_SHORT) reader.SetDataByteOrderToLittleEndian() reader.SetNumberOfScalarComponents(1) reader.Update() return reader.GetOutput() def Global_theresholding2(Image): T1=random.randint(Image.GetScalarRange()[0],Image.GetScalarRange()[1]) T1=low T2=high T0=0 Height = Image.GetDimensions()[0] Width = Image.GetDimensions()[1] Depth = Image.GetDimensions()[2] # Image newImage(3, Matrix(newImageHeight, Array(newImageWidth))) newImage = np.zeros((Height, Width, Depth), float) F1=[] F2=[] # for d in range(0,3): for i in range(3, Height - 3): for j in range(3, Width - 3): for z in range(3, Depth - 3): voxelValue = Image.GetScalarComponentAsFloat(i, j, z, 0) if voxelValue>T1 and voxelValue<T2: F1.append((voxelValue)) Image.SetScalarComponentFromFloat(i, j, z, 0, 255) else: F2.append((voxelValue)) Image.SetScalarComponentFromFloat(i, j, z, 0, 0) return Image # Display using image view\ # er convenience class ################################################### def volume_renderer(img): #Create the renderers, render window, and interactor renWin=vtk.vtkRenderWindow() iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) ren=vtk.vtkRenderer() ren.SetBackground(0.0, 0.0, 0.0) renWin.AddRenderer(ren) #Create a transfer function mapping scalar value to opacity oTFun=vtk.vtkPiecewiseFunction() # oTFun.AddSegment(0,1.0,256,0.1) oTFun.AddPoint(0, 0.0) oTFun.AddPoint(low, 0.1) oTFun.AddPoint(high, 0.8) oTFun.AddPoint(100, 0.05) cTFun=vtk.vtkColorTransferFunction() cTFun.AddRGBPoint(0, 0.0, 0.0, 0.0) # background cTFun.AddRGBPoint(low, 0.7, 0.0, 0.3) cTFun.AddRGBPoint(high, 0.0, 0.0, 0.5) cTFun.AddRGBPoint(200, 1.0, 0.8, 0.5) gradient = vtk.vtkPiecewiseFunction() gradient.AddPoint(0, 0.0) gradient.AddPoint(high, 0.5) gradient.AddPoint(150, 1.0) property =vtk.vtkVolumeProperty() property.SetScalarOpacity(oTFun) property.SetColor(cTFun) property.SetInterpolationTypeToLinear() mapper =vtk.vtkFixedPointVolumeRayCastMapper() #mapper.SetBlendModeToMinimumIntensity() mapper.SetInputData(img ) volume =vtk.vtkVolume() volume.SetMapper(mapper) volume.SetProperty(property) volume.Update() ren.AddViewProp(volume) iren.Initialize() iren.Start() ################################################### def surface_renderer(img): # get iso surface as polydata marcher = vtk.vtkMarchingCubes() marcher.SetInputData(img) marcher.SetValue(0, 255) marcher.ComputeNormalsOn() marcher.Update() # mapper-actor-render-renderwindow sequence mapper = vtk.vtkPolyDataMapper() mapper.SetInputData(marcher.GetOutput()) mapper.ScalarVisibilityOff() actor = vtk.vtkLODActor() actor.SetMapper(mapper) actor.SetNumberOfCloudPoints(1000000) actor.GetProperty().SetColor(1.6, 0.0, 2) actor.GetProperty().SetOpacity(0.5) render = vtk.vtkRenderer() render.AddActor(actor) render.SetBackground(0.0, 0.0, 0.0) window = vtk.vtkRenderWindow() window.AddRenderer(render) window.PolygonSmoothingOn() window.SetSize(500, 500) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(window) iren.Initialize() window.Render() iren.Start() vtkImg = LoadData(txt_Wurl) # filename='/Users/Fatemeh/Documents/Advance_Medical_Image_Datasets/head.nii' #options of visualization # option='volume' option='surface' low=70 high=3000 viewer = vtk.vtkImageViewer() # Smooth the image data gauss = vtk.vtkImageGaussianSmooth() gauss.SetInputData(vtkImg) gauss.SetDimensionality(3) gauss.SetStandardDeviations([2.0,2.0,2.0]) gauss.SetRadiusFactors(1.0,1.0,1.0) gauss.Update() #theresholding image thresh = vtk.vtkImageThreshold() thresh.SetInputData(gauss.GetOutput()) thresh.ThresholdBetween(low, high) thresh.ReplaceInOn() thresh.SetInValue(255) thresh.ReplaceOutOn() thresh.SetOutValue(0) thresh.SetOutputScalarTypeToFloat() thresh.Update() if option == 'surface': surface_renderer(thresh.GetOutput()) #surface_renderer(numpy_array) if option == 'volume': volume_renderer(vtkImg)
def SetUp(self): """ Set up cursor3D """ def OnClosing(): self.root.quit() def ViewerDown(tkvw): viewer = tkvw.GetImageViewer() ViewerSetZSlice(tkvw, viewer.GetZSlice() - 1) def ViewerUp(tkvw): viewer = tkvw.GetImageViewer() ViewerSetZSlice(tkvw, viewer.GetZSlice() + 1) def ViewerSetZSlice(tkvw, z): viewer = tkvw.GetImageViewer() viewer.SetZSlice(z) txt = "slice: " + str(z) sliceLabel.configure(text=txt) tkvw.Render() def SetCursorFromViewer(event): x = int(event.x) y = int(event.y) # We have to flip y axis because tk uses upper right origin. self.root.update_idletasks() height = int(self.tkvw.configure()["height"][4]) y = height - y z = self.tkvw.GetImageViewer().GetZSlice() SetCursor(x / IMAGE_MAG_X, y / IMAGE_MAG_Y, z / IMAGE_MAG_Z) def SetCursor(x, y, z): CURSOR_X = x CURSOR_Y = y CURSOR_Z = z axes.SetOrigin(CURSOR_X, CURSOR_Y, CURSOR_Z) imageCursor.SetCursorPosition(CURSOR_X * IMAGE_MAG_X, CURSOR_Y * IMAGE_MAG_Y, CURSOR_Z * IMAGE_MAG_Z) self.viewer.Render() self.tkrw.Render() # Pipeline stuff. reader = vtk.vtkSLCReader() reader.SetFileName(VTK_DATA_ROOT + "/Data/neghip.slc") # Cursor stuff magnify = vtk.vtkImageMagnify() magnify.SetInputConnection(reader.GetOutputPort()) magnify.SetMagnificationFactors(IMAGE_MAG_X, IMAGE_MAG_Y, IMAGE_MAG_Z) imageCursor = vtk.vtkImageCursor3D() imageCursor.SetInputConnection(magnify.GetOutputPort()) imageCursor.SetCursorPosition(CURSOR_X * IMAGE_MAG_X, CURSOR_Y * IMAGE_MAG_Y, CURSOR_Z * IMAGE_MAG_Z) imageCursor.SetCursorValue(255) imageCursor.SetCursorRadius(50 * IMAGE_MAG_X) axes = vtk.vtkAxes() axes.SymmetricOn() axes.SetOrigin(CURSOR_X, CURSOR_Y, CURSOR_Z) axes.SetScaleFactor(50.0) axes_mapper = vtk.vtkPolyDataMapper() axes_mapper.SetInputConnection(axes.GetOutputPort()) axesActor = vtk.vtkActor() axesActor.SetMapper(axes_mapper) axesActor.GetProperty().SetAmbient(0.5) # Image viewer stuff. viewer = vtk.vtkImageViewer() viewer.SetInputConnection(imageCursor.GetOutputPort()) viewer.SetZSlice(CURSOR_Z * IMAGE_MAG_Z) viewer.SetColorWindow(256) viewer.SetColorLevel(128) # Create transfer functions for opacity and color. opacity_transfer_function = vtk.vtkPiecewiseFunction() opacity_transfer_function.AddPoint(20, 0.0) opacity_transfer_function.AddPoint(255, 0.2) color_transfer_function = vtk.vtkColorTransferFunction() color_transfer_function.AddRGBPoint(0, 0, 0, 0) color_transfer_function.AddRGBPoint(64, 1, 0, 0) color_transfer_function.AddRGBPoint(128, 0, 0, 1) color_transfer_function.AddRGBPoint(192, 0, 1, 0) color_transfer_function.AddRGBPoint(255, 0, 0.2, 0) # Create properties, mappers, volume actors, and ray cast function. volume_property = vtk.vtkVolumeProperty() volume_property.SetColor(color_transfer_function) # volume_property.SetColor(color_transfer_function[0], # color_transfer_function[1], # color_transfer_function[2]) volume_property.SetScalarOpacity(opacity_transfer_function) volume_mapper = vtk.vtkFixedPointVolumeRayCastMapper() volume_mapper.SetInputConnection(reader.GetOutputPort()) volume = vtk.vtkVolume() volume.SetMapper(volume_mapper) volume.SetProperty(volume_property) # Create outline. outline = vtk.vtkOutlineFilter() outline.SetInputConnection(reader.GetOutputPort()) outline_mapper = vtk.vtkPolyDataMapper() outline_mapper.SetInputConnection(outline.GetOutputPort()) outlineActor = vtk.vtkActor() outlineActor.SetMapper(outline_mapper) outlineActor.GetProperty().SetColor(1, 1, 1) # Create the renderer. ren = vtk.vtkRenderer() ren.AddActor(axesActor) ren.AddVolume(volume) ren.SetBackground(0.1, 0.2, 0.4) renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren) renWin.SetSize(256, 256) # Create the GUI: two renderer widgets and a quit button. self.root = tkinter.Tk() self.root.title("cursor3D") # Define what to do when the user explicitly closes a window. self.root.protocol("WM_DELETE_WINDOW", OnClosing) # Help label, frame and quit button helpLabel = tkinter.Label(self.root, text="MiddleMouse (or shift-LeftMouse) in image viewer to place cursor") displayFrame = tkinter.Frame(self.root) quitButton = tkinter.Button(self.root, text="Quit", command=OnClosing) # Pack the GUI. helpLabel.pack() displayFrame.pack(fill=BOTH, expand=TRUE) quitButton.pack(fill=X) # Create the viewer widget. viewerFrame = tkinter.Frame(displayFrame) viewerFrame.pack(padx=3, pady=3, side=LEFT, anchor=N, fill=BOTH, expand=FALSE) self.tkvw = vtkTkImageViewerWidget(viewerFrame, iv=viewer, width=264, height=264) viewerControls = tkinter.Frame(viewerFrame) viewerControls.pack(side=BOTTOM, anchor=S, fill=BOTH, expand=TRUE) self.tkvw.pack(side=TOP, anchor=N, fill=BOTH, expand=FALSE) downButton = tkinter.Button(viewerControls, text="Down", command=[ViewerDown, self.tkvw]) upButton = tkinter.Button(viewerControls, text="Up", command=[ViewerUp, self.tkvw]) sliceLabel = tkinter.Label(viewerControls, text="slice: " + str(CURSOR_Z * IMAGE_MAG_Z)) downButton.pack(side=LEFT, expand=TRUE, fill=BOTH) upButton.pack(side=LEFT, expand=TRUE, fill=BOTH) sliceLabel.pack(side=LEFT, expand=TRUE, fill=BOTH) # Create the render widget renderFrame = tkinter.Frame(displayFrame) renderFrame.pack(padx=3, pady=3, side=LEFT, anchor=N, fill=BOTH, expand=TRUE) self.tkrw = vtkTkRenderWidget(renderFrame, rw=renWin, width=264, height=264) self.tkrw.pack(side=TOP, anchor=N, fill=BOTH, expand=TRUE) # Bindings self.tkvw.BindTkImageViewer() self.tkrw.BindTkRenderWidget() # Lets add an extra binding of the middle button in the image viewer # to set the cursor location. self.tkvw.bind("<Button-2>", SetCursorFromViewer) self.tkvw.bind("<Shift-Button-1>", SetCursorFromViewer) # Associate the functions with the buttons and label. # downButton.config(command=partial(ViewerDown, self.tkvw)) upButton.config(command=partial(ViewerUp, self.tkvw))
magnify2.SetInputConnection(reader.GetOutputPort()) magnify2.SetMagnificationFactors(IMAGE_MAG_X, IMAGE_MAG_Y, IMAGE_MAG_Z) magnify2.ReleaseDataFlagOn() # a filter that does in place processing (magnify ReleaseDataFlagOn) cursor = vtk.vtkImageCursor3D() cursor.SetInputConnection(magnify1.GetOutputPort()) cursor.SetCursorPosition(CURSOR_X * IMAGE_MAG_X, CURSOR_Y * IMAGE_MAG_Y, CURSOR_Z * IMAGE_MAG_Z) cursor.SetCursorValue(255) cursor.SetCursorRadius(50 * IMAGE_MAG_X) # stream to increase coverage of in place filter. # put the two together in one image imageAppend = vtk.vtkImageAppend() imageAppend.SetAppendAxis(0) imageAppend.AddInputConnection(magnify2.GetOutputPort()) imageAppend.AddInputConnection(cursor.GetOutputPort()) viewer = vtk.vtkImageViewer() viewer.SetInputConnection(imageAppend.GetOutputPort()) viewer.SetZSlice(CURSOR_Z * IMAGE_MAG_Z) viewer.SetColorWindow(200) viewer.SetColorLevel(80) # viewer DebugOn viewer.Render() viewer.SetPosition(50, 50) # make interface viewer.Render()
def main(): fileName = get_program_parameters() colors = vtk.vtkNamedColors() # Read the CT data of the human head. reader = vtk.vtkMetaImageReader() reader.SetFileName(fileName) reader.Update() cast = vtk.vtkImageCast() cast.SetInputConnection(reader.GetOutputPort()) cast.SetOutputScalarTypeToFloat() # Magnify the image. magnify = vtk.vtkImageMagnify() magnify.SetInputConnection(cast.GetOutputPort()) magnify.SetMagnificationFactors(2, 2, 1) magnify.InterpolateOn() # Smooth the data. # Remove high frequency artifacts due to linear interpolation. smooth = vtk.vtkImageGaussianSmooth() smooth.SetInputConnection(magnify.GetOutputPort()) smooth.SetDimensionality(2) smooth.SetStandardDeviations(1.5, 1.5, 0.0) smooth.SetRadiusFactors(2.01, 2.01, 0.0) # Compute the 2D gradient. gradient = vtk.vtkImageGradient() gradient.SetInputConnection(smooth.GetOutputPort()) gradient.SetDimensionality(2) # Convert the data to polar coordinates. # The image magnitude is mapped into saturation value, # whilst the gradient direction is mapped into hue value. polar = vtk.vtkImageEuclideanToPolar() polar.SetInputConnection(gradient.GetOutputPort()) polar.SetThetaMaximum(255.0) # Add a third component to the data. # This is needed since the gradient filter only generates two components, # and we need three components to represent color. pad = vtk.vtkImageConstantPad() pad.SetInputConnection(polar.GetOutputPort()) pad.SetOutputNumberOfScalarComponents(3) pad.SetConstant(200.0) # At this point we have Hue, Value, Saturation. # Permute components so saturation will be constant. # Re-arrange components into HSV order. permute = vtk.vtkImageExtractComponents() permute.SetInputConnection(pad.GetOutputPort()) permute.SetComponents(0, 2, 1) # Convert back into RGB values. rgb = vtk.vtkImageHSVToRGB() rgb.SetInputConnection(permute.GetOutputPort()) rgb.SetMaximum(255.0) # Set up a viewer for the image. # Note that vtkImageViewer and vtkImageViewer2 are convenience wrappers around # vtkActor2D, vtkImageMapper, vtkRenderer, and vtkRenderWindow. # So all that needs to be supplied is the interactor. viewer = vtk.vtkImageViewer() viewer.SetInputConnection(rgb.GetOutputPort()) viewer.SetZSlice(22) viewer.SetColorWindow(255.0) viewer.SetColorLevel(127.0) viewer.GetRenderWindow().SetSize(512, 512) viewer.GetRenderer().SetBackground(colors.GetColor3d("Silver")) # Create the RenderWindowInteractor. iren = vtk.vtkRenderWindowInteractor() viewer.SetupInteractor(iren) viewer.Render() iren.Initialize() iren.Start()
p2.SetPoint(7, 96, 96, 0) thinPlate = vtk.vtkThinPlateSplineTransform() thinPlate.SetSourceLandmarks(p2) thinPlate.SetTargetLandmarks(p1) thinPlate.SetBasisToR2LogR() # convert the thin plate spline into a grid transformToGrid = vtk.vtkTransformToGrid() transformToGrid.SetInput(thinPlate) transformToGrid.SetGridSpacing(16, 16, 1) transformToGrid.SetGridOrigin(-0.5, -0.5, 0) transformToGrid.SetGridExtent(0, 16, 0, 16, 0, 0) transformToGrid.Update() transform = vtk.vtkGridTransform() transform.SetDisplacementGridConnection(transformToGrid.GetOutputPort()) transform.SetInterpolationModeToCubic() # you must invert the transform before passing it to vtkImageReslice transform.Inverse() # apply the grid warp to the image reslice = vtk.vtkImageReslice() reslice.SetInputConnection(blend.GetOutputPort()) reslice.SetResliceTransform(transform) reslice.SetInterpolationModeToLinear() # set the window/level to 255.0/127.5 to view full range viewer = vtk.vtkImageViewer() viewer.SetInputConnection(reslice.GetOutputPort()) viewer.SetColorWindow(255.0) viewer.SetColorLevel(127.5) viewer.SetZSlice(0) viewer.Render() # --- end of script --
def main(): fn = get_program_parameters() # A script to test the stencil filter with a polydata stencil. # Image pipeline reader = vtk.vtkPNGReader() reader.SetDataSpacing(0.8, 0.8, 1.5) reader.SetDataOrigin(0.0, 0.0, 0.0) reader.SetFileName(fn) sphere = vtk.vtkSphereSource() sphere.SetPhiResolution(12) sphere.SetThetaResolution(12) sphere.SetCenter(102, 102, 0) sphere.SetRadius(60) triangle = vtk.vtkTriangleFilter() triangle.SetInputConnection(sphere.GetOutputPort()) stripper = vtk.vtkStripper() stripper.SetInputConnection(triangle.GetOutputPort()) dataToStencil = vtk.vtkPolyDataToImageStencil() dataToStencil.SetInputConnection(stripper.GetOutputPort()) dataToStencil.SetOutputSpacing(0.8, 0.8, 1.5) dataToStencil.SetOutputOrigin(0.0, 0.0, 0.0) stencil = vtk.vtkImageStencil() stencil.SetInputConnection(reader.GetOutputPort()) stencil.SetStencilConnection(dataToStencil.GetOutputPort()) stencil.ReverseStencilOn() stencil.SetBackgroundValue(500) # test again with a contour reader2 = vtk.vtkPNGReader() reader2.SetDataSpacing(0.8, 0.8, 1.5) reader2.SetDataOrigin(0.0, 0.0, 0.0) reader2.SetFileName(fn) plane = vtk.vtkPlane() plane.SetOrigin(0, 0, 0) plane.SetNormal(0, 0, 1) cutter = vtk.vtkCutter() cutter.SetInputConnection(sphere.GetOutputPort()) cutter.SetCutFunction(plane) stripper2 = vtk.vtkStripper() stripper2.SetInputConnection(cutter.GetOutputPort()) dataToStencil2 = vtk.vtkPolyDataToImageStencil() dataToStencil2.SetInputConnection(stripper2.GetOutputPort()) dataToStencil2.SetOutputSpacing(0.8, 0.8, 1.5) dataToStencil2.SetOutputOrigin(0.0, 0.0, 0.0) stencil2 = vtk.vtkImageStencil() stencil2.SetInputConnection(reader2.GetOutputPort()) stencil2.SetStencilConnection(dataToStencil2.GetOutputPort()) stencil2.SetBackgroundValue(500) imageAppend = vtk.vtkImageAppend() imageAppend.SetInputConnection(stencil.GetOutputPort()) imageAppend.AddInputConnection(stencil2.GetOutputPort()) viewer = vtk.vtkImageViewer() interator = vtk.vtkRenderWindowInteractor() viewer.SetInputConnection(imageAppend.GetOutputPort()) viewer.SetupInteractor(interator) viewer.SetZSlice(0) viewer.SetColorWindow(2000) viewer.SetColorLevel(1000) viewer.GetRenderWindow().SetWindowName('PolyDataToImageDataStencil') viewer.Render() interator.Start()