def ShowSlice(self, index = 0): dicom = self.dicom_list[index] # UPDATE GUI ## Text related to size value = STR_SIZE %(dicom.image.size[0], dicom.image.size[1]) self.text_image_size.SetValue(value) ## Text related to slice position if not(dicom.image.spacing): value1 = '' else: value1 = STR_SPC %(dicom.image.spacing[2]) if dicom.image.orientation_label == 'AXIAL': value2 = STR_LOCAL %(dicom.image.position[2]) elif dicom.image.orientation_label == 'CORONAL': value2 = STR_LOCAL %(dicom.image.position[1]) elif dicom.image.orientation_label == 'SAGITTAL': value2 = STR_LOCAL %(dicom.image.position[0]) else: value2 = '' value = "%s\n%s" %(value1, value2) self.text_image_location.SetValue(value) ## Text related to patient/ acquisiiton data value = STR_PATIENT %(dicom.patient.id,\ dicom.acquisition.protocol_name) self.text_patient.SetValue(value) ## Text related to acquisition date and time value = STR_ACQ % (dicom.acquisition.date, dicom.acquisition.time) self.text_acquisition.SetValue(value) rdicom = vtkgdcm.vtkGDCMImageReader() rdicom.SetFileName(dicom.image.file) rdicom.Update() # ADJUST CONTRAST window_level = dicom.image.level window_width = dicom.image.window colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInputConnection(rdicom.GetOutputPort()) colorer.SetWindow(float(window_width)) colorer.SetLevel(float(window_level)) colorer.Update() if self.actor is None: self.actor = vtk.vtkImageActor() self.renderer.AddActor(self.actor) # PLOT IMAGE INTO VIEWER self.actor.SetInputData(colorer.GetOutput()) self.renderer.ResetCamera() self.interactor.Render() # Setting slider position self.slider.SetValue(index)
def SetInput(self, imagedata, mask_dict): print "SETINPUT!" self.imagedata = imagedata self.extent = imagedata.GetExtent() imagedata_bg = self.__create_background(imagedata) if not mask_dict: imagedata_mask = self.__build_mask(imagedata, create=True) else: self.__load_masks(imagedata, mask_dict) imagedata_mask = self.img_colours_mask.GetOutput() mask_opacity = self.current_mask.opacity # blend both imagedatas, so it can be inserted into viewer blend_filter = vtk.vtkImageBlend() blend_filter.SetBlendModeToNormal() blend_filter.SetOpacity(0, 1) if self.current_mask.is_shown: blend_filter.SetOpacity(1, mask_opacity) else: blend_filter.SetOpacity(1, 0) blend_filter.SetInput(0, imagedata_bg) blend_filter.SetInput(1, imagedata_mask) blend_filter.SetBlendModeToNormal() blend_filter.GetOutput().ReleaseDataFlagOn() self.blend_filter = blend_filter self.window_level = vtk.vtkImageMapToWindowLevelColors() self.window_level.SetInput(self.imagedata)
def ShowSlice(self, index=0): dicom = self.dicom_list[index] # UPDATE GUI ## Text related to size value = STR_SIZE % (dicom.image.size[0], dicom.image.size[1]) self.text_image_size.SetValue(value) ## Text related to slice position if not (dicom.image.spacing): value1 = '' else: value1 = STR_SPC % (dicom.image.spacing[2]) if dicom.image.orientation_label == 'AXIAL': value2 = STR_LOCAL % (dicom.image.position[2]) elif dicom.image.orientation_label == 'CORONAL': value2 = STR_LOCAL % (dicom.image.position[1]) elif dicom.image.orientation_label == 'SAGITTAL': value2 = STR_LOCAL % (dicom.image.position[0]) else: value2 = '' value = "%s\n%s" % (value1, value2) self.text_image_location.SetValue(value) ## Text related to patient/ acquisiiton data value = STR_PATIENT %(dicom.patient.id,\ dicom.acquisition.protocol_name) self.text_patient.SetValue(value) ## Text related to acquisition date and time value = STR_ACQ % (dicom.acquisition.date, dicom.acquisition.time) self.text_acquisition.SetValue(value) rdicom = vtkgdcm.vtkGDCMImageReader() rdicom.SetFileName(dicom.image.file) rdicom.Update() # ADJUST CONTRAST window_level = dicom.image.level window_width = dicom.image.window colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInputConnection(rdicom.GetOutputPort()) colorer.SetWindow(float(window_width)) colorer.SetLevel(float(window_level)) colorer.Update() if self.actor is None: self.actor = vtk.vtkImageActor() self.renderer.AddActor(self.actor) # PLOT IMAGE INTO VIEWER self.actor.SetInputData(colorer.GetOutput()) self.renderer.ResetCamera() self.interactor.Render() # Setting slider position self.slider.SetValue(index)
def __init__(self, module_manager): SimpleVTKClassModuleBase.__init__(self, module_manager, vtk.vtkImageMapToWindowLevelColors(), 'Processing.', ('vtkImageData', ), ('vtkImageData', ), replaceDoc=True, inputFunctions=None, outputFunctions=None)
def do_ww_wl(self, image): colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInputData(image) colorer.SetWindow(self.ww) colorer.SetLevel(self.wl) colorer.SetOutputFormatToRGB() colorer.Update() return colorer.GetOutput()
def do_ww_wl(self, image): colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInput(image) colorer.SetWindow(self.window_width) colorer.SetLevel(self.window_level) colorer.SetOutputFormatToRGB() colorer.Update() return colorer.GetOutput()
def setImage(self, dicomfile): logging.debug("In VTKImageView::setImage()") if dicomfile: if os.path.exists(dicomfile): self.reader = vtkgdcm.vtkGDCMImageReader() self.reader.SetFileName(dicomfile) self.reader.Update() vtkImageData = self.reader.GetOutput() vtkImageData.UpdateInformation() srange = vtkImageData.GetScalarRange() cast = vtk.vtkImageCast() cast.SetInput(vtkImageData) cast.SetOutputScalarType(4) cast.Update() cast.GetOutput().SetUpdateExtentToWholeExtent() table = vtk.vtkLookupTable() table.SetNumberOfColors(256) table.SetHueRange(0.0, 0.0) table.SetSaturationRange(0.0, 0.0) table.SetValueRange(0.0, 1.0) table.SetAlphaRange(1.0, 1.0) table.SetRange(srange) table.SetRampToLinear() table.Build() color = vtk.vtkImageMapToColors() color.SetLookupTable(table) color.SetInputConnection(cast.GetOutputPort()) color.Update() self.cast = vtk.vtkImageMapToWindowLevelColors() self.cast.SetOutputFormatToLuminance() self.cast.SetInputConnection(color.GetOutputPort()) self.cast.SetWindow(255.0) self.cast.SetLevel(127.0) self.cast.Update() self.cast.UpdateWholeExtent() self.render.RemoveActor(self.actor) self.actor = vtk.vtkImageActor() self.actor.SetInput(self.cast.GetOutput()) self.render.AddActor(self.actor) self.render.ResetCamera() self.Render() else: self.render.RemoveActor(self.actor) self.Render() else: self.render.RemoveActor(self.actor) self.Render()
def __init__(self, module_manager): SimpleVTKClassModuleBase.__init__( self, module_manager, vtk.vtkImageMapToWindowLevelColors(), "Processing.", ("vtkImageData",), ("vtkImageData",), replaceDoc=True, inputFunctions=None, outputFunctions=None, )
def ShowSlice(self, index = 0): bitmap = self.bitmap_list[index] # UPDATE GUI ## Text related to size value = STR_SIZE %(bitmap[3], bitmap[4]) self.text_image_size.SetValue(value) value1 = '' value2 = '' value = "%s\n%s" %(value1, value2) self.text_image_location.SetValue(value) #self.text_patient.SetValue(value) self.text_patient.SetValue('') #self.text_acquisition.SetValue(value) self.text_acquisition.SetValue('') n_array = bitmap_reader.ReadBitmap(bitmap[0]) image = converters.to_vtk(n_array, spacing=(1,1,1),\ slice_number=1, orientation="AXIAL") # ADJUST CONTRAST window_level = n_array.max()/2 window_width = n_array.max() colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInputData(image) colorer.SetWindow(float(window_width)) colorer.SetLevel(float(window_level)) colorer.Update() if self.actor is None: self.actor = vtk.vtkImageActor() self.renderer.AddActor(self.actor) # PLOT IMAGE INTO VIEWER self.actor.SetInputData(colorer.GetOutput()) self.renderer.ResetCamera() self.interactor.Render() # Setting slider position self.slider.SetValue(index)
def iniVTK(self): self.last_added_sphere_ren1 = None self.newed_spheres = vtk.vtkCollection() self.sphere_radius_ren1 = 2.0 self.bouttons_spheres = [] self.slice_assembly = None self.image_roi = None self.im_importer = vtk.vtkImageImport() self.sphere = vtk.vtkSphereSource() self.sphere.SetRadius(2.0) self.sphere_mapper = vtk.vtkPolyDataMapper() self.sphere_mapper.SetInputConnection(self.sphere.GetOutputPort()) self.sphere_actor_ren2 = vtk.vtkActor() self.sphere.SetCenter(show_height / 2, show_width / 2, 0) self.sphere_actor_ren2.SetMapper(self.sphere_mapper) self.sphere_actor_ren2.GetProperty().SetColor(255.0, 0, 0) self.vtk_widget.GetRenderWindow().SetSize(800, 400) self.image_actor = vtk.vtkImageActor() self.ren1 = vtk.vtkRenderer() self.ren2 = vtk.vtkRenderer() self.interactorStyle = BouttonInteractorStyle() self.vtk_widget.SetInteractorStyle(self.interactorStyle) self.vtk_widget.GetRenderWindow().AddRenderer(self.ren1) self.vtk_widget.GetRenderWindow().AddRenderer(self.ren2) self.ren1.SetViewport(0.0, 0.0, 0.5, 1.0) self.ren2.SetViewport(0.5, 0.0, 1.0, 1.0) self.ren2.AddActor(self.sphere_actor_ren2) self.imageLevelFilter = vtk.vtkImageMapToWindowLevelColors() self.imageLevelFilter.SetLevel(400) self.imageLevelFilter.SetWindow(800) self.im_importer.SetNumberOfScalarComponents(1) self.im_importer.SetDataScalarTypeToUnsignedShort() self.im_importer.SetDataExtent(0, show_width - 1, 0, show_height - 1, 0, 0) self.im_importer.SetWholeExtent(0, show_width - 1, 0, show_height - 1, 0, 0) self.imageLevelFilter.SetInputConnection( self.im_importer.GetOutputPort()) self.image_actor.SetInput(self.imageLevelFilter.GetOutput()) self.ren1_sphere_actors = vtk.vtkActorCollection() self.pointPicker = vtk.vtkPointPicker() self.actorPicker = vtk.vtkPropPicker() self.pickedActor = None self.ren1.AddActor(self.image_actor) self.ren2.AddActor(self.image_actor)
def preview(self): if self._preview: return self._preview else: colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInput(self.dicom.image.imagedata) colorer.SetWindow(float(self.dicom.image.window)) colorer.SetLevel(float(self.dicom.image.level)) colorer.SetOutputFormatToRGB() colorer.Update() width, height, z = colorer.GetOutput().GetDimensions() r = colorer.GetOutput().GetPointData().GetScalars() ni = numpy_support.vtk_to_numpy(r) self.img = wx.ImageFromBuffer(width, height, ni) self._preview = self.img.Mirror(False) return self._preview
def iniVTK(self): self.last_added_sphere_ren1 = None self.newed_spheres = vtk.vtkCollection() self.sphere_radius_ren1 = 2.0 self.bouttons_spheres = [] self.slice_assembly = None self.image_roi = None self.im_importer = vtk.vtkImageImport() self.sphere = vtk.vtkSphereSource() self.sphere.SetRadius(2.0) self.sphere_mapper = vtk.vtkPolyDataMapper() self.sphere_mapper.SetInputConnection(self.sphere.GetOutputPort()) self.sphere_actor_ren2 = vtk.vtkActor() self.sphere.SetCenter(show_height / 2, show_width / 2, 0) self.sphere_actor_ren2.SetMapper(self.sphere_mapper) self.sphere_actor_ren2.GetProperty().SetColor(255.0, 0, 0) self.vtk_widget.GetRenderWindow().SetSize(800, 400) self.image_actor = vtk.vtkImageActor() self.ren1 = vtk.vtkRenderer() self.ren2 = vtk.vtkRenderer() self.interactorStyle = BouttonInteractorStyle() self.vtk_widget.SetInteractorStyle(self.interactorStyle) self.vtk_widget.GetRenderWindow().AddRenderer(self.ren1) self.vtk_widget.GetRenderWindow().AddRenderer(self.ren2) self.ren1.SetViewport(0.0, 0.0, 0.5, 1.0) self.ren2.SetViewport(0.5, 0.0, 1.0, 1.0) self.ren2.AddActor(self.sphere_actor_ren2) self.imageLevelFilter = vtk.vtkImageMapToWindowLevelColors() self.imageLevelFilter.SetLevel(400) self.imageLevelFilter.SetWindow(800) self.im_importer.SetNumberOfScalarComponents(1) self.im_importer.SetDataScalarTypeToUnsignedShort() self.im_importer.SetDataExtent(0, show_width - 1, 0, show_height - 1, 0, 0) self.im_importer.SetWholeExtent(0, show_width - 1, 0, show_height - 1, 0, 0) self.imageLevelFilter.SetInputConnection(self.im_importer.GetOutputPort()) self.image_actor.SetInput(self.imageLevelFilter.GetOutput()) self.ren1_sphere_actors = vtk.vtkActorCollection() self.pointPicker = vtk.vtkPointPicker() self.actorPicker = vtk.vtkPropPicker() self.pickedActor = None self.ren1.AddActor(self.image_actor) self.ren2.AddActor(self.image_actor)
def enhance(self): """ Enhance a b&w picture using the laplacian, enhancing high-freq edges. Example: .. code-block:: python import vedo p = vedo.Picture(vedo.dataurl+'images/dog.jpg').bw() vedo.show(p, p.clone().enhance(), N=2, mode='image') """ img = self._data scalarRange = img.GetPointData().GetScalars().GetRange() cast = vtk.vtkImageCast() cast.SetInputData(img) cast.SetOutputScalarTypeToDouble() cast.Update() laplacian = vtk.vtkImageLaplacian() laplacian.SetInputData(cast.GetOutput()) laplacian.SetDimensionality(2) laplacian.Update() subtr = vtk.vtkImageMathematics() subtr.SetInputData(0, cast.GetOutput()) subtr.SetInputData(1, laplacian.GetOutput()) subtr.SetOperationToSubtract() subtr.Update() colorWindow = scalarRange[1] - scalarRange[0] colorLevel = colorWindow / 2 originalColor = vtk.vtkImageMapToWindowLevelColors() originalColor.SetWindow(colorWindow) originalColor.SetLevel(colorLevel) originalColor.SetInputData(subtr.GetOutput()) originalColor.Update() return self._update(originalColor.GetOutput())
def ShowSlice(self, index = 0): dicom = self.dicom_list[index] # UPDATE GUI ## Text related to size value = STR_SIZE %(dicom.image.size[0], dicom.image.size[1]) self.text_image_size.SetValue(value) ## Text related to slice position value1 = STR_SPC %(dicom.image.spacing[2]) value2 = STR_LOCAL %(dicom.image.position[2]) value = "%s\n%s" %(value1, value2) self.text_image_location.SetValue(value) ## Text related to patient/ acquisiiton data value = STR_PATIENT %(dicom.patient.id,\ dicom.acquisition.protocol_name) self.text_patient.SetValue(value) ## Text related to acquisition date and time value = STR_ACQ % (dicom.acquisition.date, dicom.acquisition.time) self.text_acquisition.SetValue(value) # ADJUST CONTRAST window_level = dicom.image.level window_width = dicom.image.window colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInput(dicom.image.imagedata) colorer.SetWindow(float(window_width)) colorer.SetLevel(float(window_level)) # PLOT IMAGE INTO VIEWER self.actor.SetInput(colorer.GetOutput()) self.renderer.ResetCamera() self.interactor.Render() # Setting slider position self.slider.SetValue(index)
def ShowBlackSlice(self, pub_sub): n_array = numpy.zeros((100, 100)) self.text_image_size.SetValue('') image = converters.to_vtk(n_array, spacing=(1,1,1),\ slice_number=1, orientation="AXIAL") colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInputData(image) colorer.Update() if self.actor is None: self.actor = vtk.vtkImageActor() self.renderer.AddActor(self.actor) # PLOT IMAGE INTO VIEWER self.actor.SetInputData(colorer.GetOutput()) self.renderer.ResetCamera() self.interactor.Render() # Setting slider position self.slider.SetValue(0)
def ShowBlackSlice(self, pub_sub): n_array = numpy.zeros((100,100)) self.text_image_size.SetValue('') image = converters.to_vtk(n_array, spacing=(1,1,1),\ slice_number=1, orientation="AXIAL") colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInputData(image) colorer.Update() if self.actor is None: self.actor = vtk.vtkImageActor() self.renderer.AddActor(self.actor) # PLOT IMAGE INTO VIEWER self.actor.SetInputData(colorer.GetOutput()) self.renderer.ResetCamera() self.interactor.Render() # Setting slider position self.slider.SetValue(0)
def create_dicom_thumbnails(filename, window=None, level=None): rvtk = vtkgdcm.vtkGDCMImageReader() rvtk.SetFileName(utils.encode(filename, const.FS_ENCODE)) rvtk.Update() img = rvtk.GetOutput() if window is None or level is None: _min, _max = img.GetScalarRange() window = _max - _min level = _min + window / 2 dx, dy, dz = img.GetDimensions() if dz > 1: thumbnail_paths = [] for i in range(dz): img_slice = ExtractVOI(img, 0, dx-1, 0, dy-1, i, i+1) colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInputData(img_slice) colorer.SetWindow(window) colorer.SetLevel(level) colorer.SetOutputFormatToRGB() colorer.Update() resample = vtk.vtkImageResample() resample.SetInputData(colorer.GetOutput()) resample.SetAxisMagnificationFactor ( 0, 0.25 ) resample.SetAxisMagnificationFactor ( 1, 0.25 ) resample.SetAxisMagnificationFactor ( 2, 1 ) resample.Update() thumbnail_path = tempfile.mktemp() write_png = vtk.vtkPNGWriter() write_png.SetInputData(resample.GetOutput()) write_png.SetFileName(thumbnail_path) write_png.Write() thumbnail_paths.append(thumbnail_path) return thumbnail_paths else: colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInputData(img) colorer.SetWindow(window) colorer.SetLevel(level) colorer.SetOutputFormatToRGB() colorer.Update() resample = vtk.vtkImageResample() resample.SetInputData(colorer.GetOutput()) resample.SetAxisMagnificationFactor ( 0, 0.25 ) resample.SetAxisMagnificationFactor ( 1, 0.25 ) resample.SetAxisMagnificationFactor ( 2, 1 ) resample.Update() thumbnail_path = tempfile.mktemp() write_png = vtk.vtkPNGWriter() write_png.SetInputData(resample.GetOutput()) write_png.SetFileName(thumbnail_path) write_png.Write() return thumbnail_path
def create_dicom_thumbnails(filename, window=None, level=None): rvtk = vtkgdcm.vtkGDCMImageReader() rvtk.SetFileName(filename) rvtk.Update() img = rvtk.GetOutput() if window is None or level is None: _min, _max = img.GetScalarRange() window = _max - _min level = _min + window / 2 dx, dy, dz = img.GetDimensions() if dz > 1: thumbnail_paths = [] for i in xrange(dz): img_slice = ExtractVOI(img, 0, dx-1, 0, dy-1, i, i+1) colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInputData(img_slice) colorer.SetWindow(window) colorer.SetLevel(level) colorer.SetOutputFormatToRGB() colorer.Update() resample = vtk.vtkImageResample() resample.SetInputData(colorer.GetOutput()) resample.SetAxisMagnificationFactor ( 0, 0.25 ) resample.SetAxisMagnificationFactor ( 1, 0.25 ) resample.SetAxisMagnificationFactor ( 2, 1 ) resample.Update() thumbnail_path = tempfile.mktemp() write_png = vtk.vtkPNGWriter() write_png.SetInputData(resample.GetOutput()) write_png.SetFileName(thumbnail_path) write_png.Write() thumbnail_paths.append(thumbnail_path) return thumbnail_paths else: colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInputData(img) colorer.SetWindow(window) colorer.SetLevel(level) colorer.SetOutputFormatToRGB() colorer.Update() resample = vtk.vtkImageResample() resample.SetInputData(colorer.GetOutput()) resample.SetAxisMagnificationFactor ( 0, 0.25 ) resample.SetAxisMagnificationFactor ( 1, 0.25 ) resample.SetAxisMagnificationFactor ( 2, 1 ) resample.Update() thumbnail_path = tempfile.mktemp() write_png = vtk.vtkPNGWriter() write_png.SetInputData(resample.GetOutput()) write_png.SetFileName(thumbnail_path) write_png.Write() return thumbnail_path
def __init__(self, dimx=600, dimy=600, renWin=None, iren=None, ren=None, debug=False): '''creates the rendering pipeline''' # Handle arguments if renWin is not None: self.renWin = renWin else: self.renWin = vtk.vtkRenderWindow() if iren is not None: self.iren = iren else: self.iren = vtk.vtkRenderWindowInteractor() # create a rendering window and renderer if ren is not None: self.ren = ren else: self.ren = vtk.vtkRenderer() self.renWin.SetSize(dimx, dimy) self.renWin.AddRenderer(self.ren) # img 3D as slice self.img3D = None self.slicenos = [0, 0, 0] self.sliceOrientation = SLICE_ORIENTATION_XY self.sliceActor = vtk.vtkImageActor() self.voi = vtk.vtkExtractVOI() self.wl = vtk.vtkImageMapToWindowLevelColors() self.ia = vtk.vtkImageHistogramStatistics() self.sliceActorNo = 0 # Viewer Event manager self.event = ViewerEventManager() # create a renderwindowinteractor self.style = CILInteractorStyle(self) self.iren.SetInteractorStyle(self.style) self.iren.SetRenderWindow(self.renWin) # Render decimation self.decimate = vtk.vtkDecimatePro() self.ren.SetBackground(.1, .2, .4) self.actors = {} # Help text self.helpActor = vtk.vtkActor2D() self.helpActor.GetPositionCoordinate( ).SetCoordinateSystemToNormalizedDisplay() self.helpActor.GetPositionCoordinate().SetValue(0.1, 0.5) self.helpActor.VisibilityOff() self.ren.AddActor(self.helpActor) # volume render volumeMapper = vtk.vtkSmartVolumeMapper() #volumeMapper = vtk.vtkFixedPointVolumeRayCastMapper() self.volume_mapper = volumeMapper volumeProperty = vtk.vtkVolumeProperty() self.volume_property = volumeProperty # The volume holds the mapper and the property and # can be used to position/orient the volume. volume = vtk.vtkVolume() volume.SetMapper(volumeMapper) volume.SetProperty(volumeProperty) self.volume = volume self.volume_render_initialised = False # axis orientation widget om = vtk.vtkAxesActor() ori = vtk.vtkOrientationMarkerWidget() ori.SetOutlineColor(0.9300, 0.5700, 0.1300) ori.SetInteractor(self.iren) ori.SetOrientationMarker(om) ori.SetViewport(0.0, 0.0, 0.4, 0.4) ori.SetEnabled(1) ori.InteractiveOff() self.orientation_marker = ori self.iren.Initialize()
def ShowSlice(self, index=0): try: dicom = self.dicom_list[index] except IndexError: dicom = self.dicom_list[0] if self.actor is None: self.__init_vtk() # UPDATE GUI ## Text related to size value = STR_SIZE % (dicom.image.size[0], dicom.image.size[1]) self.text_image_size.SetValue(value) ## Text related to slice position if not (dicom.image.spacing): value1 = '' else: value1 = STR_SPC % (dicom.image.spacing[2]) if dicom.image.orientation_label == 'AXIAL': value2 = STR_LOCAL % (dicom.image.position[2]) elif dicom.image.orientation_label == 'CORONAL': value2 = STR_LOCAL % (dicom.image.position[1]) elif dicom.image.orientation_label == 'SAGITTAL': value2 = STR_LOCAL % (dicom.image.position[0]) else: value2 = '' value = "%s\n%s" % (value1, value2) self.text_image_location.SetValue(value) ## Text related to patient/ acquisiiton data value = STR_PATIENT %(dicom.patient.id,\ dicom.acquisition.protocol_name) self.text_patient.SetValue(value) ## Text related to acquisition date and time value = STR_ACQ % (dicom.acquisition.date, dicom.acquisition.time) self.text_acquisition.SetValue(value) if isinstance(dicom.image.thumbnail_path, list): reader = vtk.vtkPNGReader() if _has_win32api: reader.SetFileName( win32api.GetShortPathName( dicom.image.thumbnail_path[index]).encode( const.FS_ENCODE)) else: reader.SetFileName(dicom.image.thumbnail_path[index]) reader.Update() image = reader.GetOutput() else: filename = dicom.image.file if _has_win32api: filename = win32api.GetShortPathName(filename).encode( const.FS_ENCODE) np_image = imagedata_utils.read_dcm_slice_as_np2(filename) vtk_image = converters.to_vtk(np_image, dicom.image.spacing, 0, 'AXIAL') # ADJUST CONTRAST window_level = dicom.image.level window_width = dicom.image.window colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInputData(vtk_image) colorer.SetWindow(float(window_width)) colorer.SetLevel(float(window_level)) colorer.Update() image = colorer.GetOutput() flip = vtk.vtkImageFlip() flip.SetInputData(image) flip.SetFilteredAxis(1) flip.FlipAboutOriginOn() flip.ReleaseDataFlagOn() flip.Update() if self.actor is None: self.actor = vtk.vtkImageActor() self.renderer.AddActor(self.actor) self.canvas.modified = True # PLOT IMAGE INTO VIEWER self.actor.SetInputData(flip.GetOutput()) self.renderer.ResetCamera() self.interactor.Render() # Setting slider position self.slider.SetValue(index)
def run(self): grouper = self.grouper reader = gdcm.ImageReader() reader.SetFileName(self.filepath) if (reader.Read()): file = reader.GetFile() # Retrieve data set dataSet = file.GetDataSet() # Retrieve header header = file.GetHeader() stf = gdcm.StringFilter() field_dict = {} data_dict = {} tag = gdcm.Tag(0x0008, 0x0005) ds = reader.GetFile().GetDataSet() if ds.FindDataElement(tag): encoding_value = str(ds.GetDataElement(tag).GetValue()).split('\\')[0] if encoding_value.startswith("Loaded"): encoding = "ISO_IR 100" else: try: encoding = const.DICOM_ENCODING_TO_PYTHON[encoding_value] except KeyError: encoding = 'ISO_IR 100' else: encoding = "ISO_IR 100" # Iterate through the Header iterator = header.GetDES().begin() while (not iterator.equal(header.GetDES().end())): dataElement = iterator.next() stf.SetFile(file) tag = dataElement.GetTag() data = stf.ToStringPair(tag) stag = tag.PrintAsPipeSeparatedString() group = str(tag.GetGroup()) field = str(tag.GetElement()) tag_labels[stag] = data[0] if not group in data_dict.keys(): data_dict[group] = {} if not(utils.VerifyInvalidPListCharacter(data[1])): data_dict[group][field] = data[1].decode(encoding) else: data_dict[group][field] = "Invalid Character" # Iterate through the Data set iterator = dataSet.GetDES().begin() while (not iterator.equal(dataSet.GetDES().end())): dataElement = iterator.next() stf.SetFile(file) tag = dataElement.GetTag() data = stf.ToStringPair(tag) stag = tag.PrintAsPipeSeparatedString() group = str(tag.GetGroup()) field = str(tag.GetElement()) tag_labels[stag] = data[0] if not group in data_dict.keys(): data_dict[group] = {} if not(utils.VerifyInvalidPListCharacter(data[1])): data_dict[group][field] = data[1].decode(encoding, 'replace') else: data_dict[group][field] = "Invalid Character" # -------------- To Create DICOM Thumbnail ----------- rvtk = vtkgdcm.vtkGDCMImageReader() rvtk.SetFileName(self.filepath) rvtk.Update() try: data = data_dict[str(0x028)][str(0x1050)] level = [float(value) for value in data.split('\\')][0] data = data_dict[str(0x028)][str(0x1051)] window = [float(value) for value in data.split('\\')][0] except(KeyError): level = 300.0 window = 2000.0 colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInput(rvtk.GetOutput()) colorer.SetWindow(float(window)) colorer.SetLevel(float(level)) colorer.SetOutputFormatToRGB() colorer.Update() resample = vtk.vtkImageResample() resample.SetInput(colorer.GetOutput()) resample.SetAxisMagnificationFactor ( 0, 0.25 ) resample.SetAxisMagnificationFactor ( 1, 0.25 ) resample.SetAxisMagnificationFactor ( 2, 1 ) resample.Update() thumbnail_path = tempfile.mktemp() write_png = vtk.vtkPNGWriter() write_png.SetInput(resample.GetOutput()) write_png.SetFileName(thumbnail_path) write_png.Write() #------ Verify the orientation -------------------------------- img = reader.GetImage() direc_cosines = img.GetDirectionCosines() orientation = gdcm.Orientation() try: type = orientation.GetType(tuple(direc_cosines)) except TypeError: type = orientation.GetType(direc_cosines) label = orientation.GetLabel(type) # ---------- Refactory -------------------------------------- data_dict['invesalius'] = {'orientation_label' : label} # ------------------------------------------------------------- dict_file[self.filepath] = data_dict #---------- Verify is DICOMDir ------------------------------- is_dicom_dir = 1 try: if (data_dict[str(0x002)][str(0x002)] != "1.2.840.10008.1.3.10"): #DICOMDIR is_dicom_dir = 0 except(KeyError): is_dicom_dir = 0 if not(is_dicom_dir): parser = dicom.Parser() parser.SetDataImage(dict_file[self.filepath], self.filepath, thumbnail_path) dcm = dicom.Dicom() #self.l.acquire() dcm.SetParser(parser) grouper.AddFile(dcm)
def main(): colors = vtk.vtkNamedColors() fileName = get_program_parameters() # Read the image. readerFactory = vtk.vtkImageReader2Factory() reader = readerFactory.CreateImageReader2(fileName) reader.SetFileName(fileName) reader.Update() fft = vtk.vtkImageFFT() fft.SetInputConnection(reader.GetOutputPort()) idealHighPass = vtk.vtkImageIdealHighPass() idealHighPass.SetInputConnection(fft.GetOutputPort()) idealHighPass.SetXCutOff(0.1) idealHighPass.SetYCutOff(0.1) idealRfft = vtk.vtkImageRFFT() idealRfft.SetInputConnection(idealHighPass.GetOutputPort()) idealReal = vtk.vtkImageExtractComponents() idealReal.SetInputConnection(idealRfft.GetOutputPort()) idealReal.SetComponents(0) butterworthHighPass = vtk.vtkImageButterworthHighPass() butterworthHighPass.SetInputConnection(fft.GetOutputPort()) butterworthHighPass.SetXCutOff(0.1) butterworthHighPass.SetYCutOff(0.1) butterworthRfft = vtk.vtkImageRFFT() butterworthRfft.SetInputConnection(butterworthHighPass.GetOutputPort()) butterworthReal = vtk.vtkImageExtractComponents() butterworthReal.SetInputConnection(butterworthRfft.GetOutputPort()) butterworthReal.SetComponents(0) # Create the actors. idealColor = vtk.vtkImageMapToWindowLevelColors() idealColor.SetWindow(500) idealColor.SetLevel(0) idealColor.SetInputConnection(idealReal.GetOutputPort()) idealActor = vtk.vtkImageActor() idealActor.GetMapper().SetInputConnection(idealColor.GetOutputPort()) idealActor.GetProperty().SetInterpolationTypeToNearest() butterworthColor = vtk.vtkImageMapToWindowLevelColors() butterworthColor.SetWindow(500) butterworthColor.SetLevel(0) butterworthColor.SetInputConnection(butterworthReal.GetOutputPort()) butterworthActor = vtk.vtkImageActor() butterworthActor.GetMapper().SetInputConnection(butterworthColor.GetOutputPort()) butterworthActor.GetProperty().SetInterpolationTypeToNearest() # Setup the renderers. idealRenderer = vtk.vtkRenderer() idealRenderer.SetViewport(0.0, 0.0, 0.5, 1.0) idealRenderer.AddActor(idealActor) idealRenderer.ResetCamera() idealRenderer.SetBackground(colors.GetColor3d("SlateGray")) butterworthRenderer = vtk.vtkRenderer() butterworthRenderer.SetViewport(0.5, 0.0, 1.0, 1.0) butterworthRenderer.AddActor(butterworthActor) butterworthRenderer.SetActiveCamera(idealRenderer.GetActiveCamera()) butterworthRenderer.SetBackground(colors.GetColor3d("LightSlateGray")) renderWindow = vtk.vtkRenderWindow() renderWindow.SetSize(600, 300) renderWindow.SetWindowName('IdealHighPass') renderWindow.AddRenderer(idealRenderer) renderWindow.AddRenderer(butterworthRenderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() style = vtk.vtkInteractorStyleImage() renderWindowInteractor.SetInteractorStyle(style) renderWindowInteractor.SetRenderWindow(renderWindow) idealRenderer.GetActiveCamera().Dolly(1.4) idealRenderer.ResetCameraClippingRange() renderWindowInteractor.Initialize() renderWindowInteractor.Start()
gradInvert.SetOutputScalarTypeToFloat() gradInvert.SetInputConnection( grad.GetOutputPort() ) gradInvert.Update() renderer = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.AddRenderer( renderer ) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow( renWin ) style = vtk.vtkInteractorStyleImage() iren.SetInteractorStyle( style ) del style # The color map will accept any scalar image type and convert to # unsigned char for the image actor colorMap = vtk.vtkImageMapToWindowLevelColors() colorMap.SetInputConnection(gradInvert.GetOutputPort()) range = gradInvert.GetOutput().GetScalarRange(); colorMap.SetWindow(1.0) colorMap.SetLevel(0.5) actor = vtk.vtkImageActor() actor.SetInput( colorMap.GetOutput() ) actor.SetDisplayExtent(0, 255, 0, 255, 0, 0) renderer.AddActor( actor ) renderer.SetBackground(0.2, 0.2, 1) renWin.SetSize(400, 400)
def main(): colors = vtk.vtkNamedColors() fileName = get_program_parameters() # Read the image. readerFactory = vtk.vtkImageReader2Factory() reader = readerFactory.CreateImageReader2(fileName) reader.SetFileName(fileName) reader.Update() # Pipelines constantPad = vtk.vtkImageConstantPad() constantPad.SetInputConnection(reader.GetOutputPort()) constantPad.SetConstant(800) constantPad.SetOutputWholeExtent(-127, 383, -127, 383, 22, 22) mirrorPad = vtk.vtkImageMirrorPad() mirrorPad.SetInputConnection(reader.GetOutputPort()) mirrorPad.SetOutputWholeExtent(constantPad.GetOutputWholeExtent()) # Create actors constantPadColor = vtk.vtkImageMapToWindowLevelColors() constantPadColor.SetWindow(2000) constantPadColor.SetLevel(1000) constantPadColor.SetInputConnection(constantPad.GetOutputPort()) constantPadActor = vtk.vtkImageActor() constantPadActor.GetMapper().SetInputConnection( constantPadColor.GetOutputPort()) constantPadActor.GetProperty().SetInterpolationTypeToNearest() mirrorPadColor = vtk.vtkImageMapToWindowLevelColors() mirrorPadColor.SetWindow(2000) mirrorPadColor.SetLevel(1000) mirrorPadColor.SetInputConnection(mirrorPad.GetOutputPort()) mirrorPadActor = vtk.vtkImageActor() mirrorPadActor.GetMapper().SetInputConnection( mirrorPadColor.GetOutputPort()) mirrorPadActor.GetProperty().SetInterpolationTypeToNearest() # Setup the renderers. constantPadRenderer = vtk.vtkRenderer() constantPadRenderer.SetViewport(0.0, 0.0, 0.5, 1.0) constantPadRenderer.AddActor(constantPadActor) constantPadRenderer.ResetCamera() constantPadRenderer.SetBackground(colors.GetColor3d("SlateGray")) mirrorPadRenderer = vtk.vtkRenderer() mirrorPadRenderer.SetViewport(0.5, 0.0, 1.0, 1.0) mirrorPadRenderer.AddActor(mirrorPadActor) mirrorPadRenderer.SetActiveCamera(constantPadRenderer.GetActiveCamera()) mirrorPadRenderer.SetBackground(colors.GetColor3d("LightSlateGray")) renderWindow = vtk.vtkRenderWindow() renderWindow.SetSize(600, 300) renderWindow.SetWindowName('Pad') renderWindow.AddRenderer(constantPadRenderer) renderWindow.AddRenderer(mirrorPadRenderer) renderWindowInteractor = vtk.vtkRenderWindowInteractor() style = vtk.vtkInteractorStyleImage() renderWindowInteractor.SetInteractorStyle(style) renderWindowInteractor.SetRenderWindow(renderWindow) constantPadRenderer.GetActiveCamera().Dolly(1.2) constantPadRenderer.ResetCameraClippingRange() renderWindowInteractor.Initialize() renderWindowInteractor.Start()
def __init__(self): vtkViewImage.__init__(self) self.FirstRender = 1 self.FirstImage = 1 self.ShowCurrentPoint = True self.ShowDirections = True self.ShowSliceNumber = True self.Orientation = vtkViewImage.AXIAL_ID self.InteractionStyle = self.SELECT_INTERACTION self.LeftButtonInteractionStyle = self.SELECT_INTERACTION self.MiddleButtonInteractionStyle = self.SELECT_INTERACTION self.RightButtonInteractionStyle = self.SELECT_INTERACTION self.WheelInteractionStyle = self.SELECT_INTERACTION self.Conventions = self.RADIOLOGIC self.InitialParallelScale = 1.0 self.OverlappingImage = None self.ImageReslice = vtk.vtkImageReslice() self.ImageActor = vtk.vtkImageActor() self.WindowLevelForCorner = vtk.vtkImageMapToWindowLevelColors() self.WindowLevel = vtk.vtkImageMapToColors() #self.MaskFilter = vtk.vtkImageBlendWithMask() self.Blender = vtk.vtkImageBlend() self.HorizontalLineSource = vtk.vtkLineSource() self.VerticalLineSource = vtk.vtkLineSource() self.HorizontalLineActor = vtk.vtkActor() self.VerticalLineActor = vtk.vtkActor() self.DataSetCutPlane = vtk.vtkPlane() self.DataSetCutBox = vtk.vtkBox() self.DataSetCutPlane.SetOrigin(0,0,0) self.DataSetCutPlane.SetNormal(0,0,1) self.DataSetCutBox.SetBounds(0, 0, 0, 0, 0, 0) self.BoxThickness = 2 self.LinkCameraFocalAndPosition = 0 # set the filters properties self.Blender.SetBlendModeToNormal() self.Blender.SetOpacity(0, 0.25) self.Blender.SetOpacity(1, 0.75) # set up the vtk pipeline self.ImageReslice.SetOutputDimensionality(2) self.ImageReslice.InterpolateOff() self.ImageReslice.SetInputConnection(self.WindowLevel.GetOutputPort()) self.AuxInput = self.WindowLevel.GetOutput() self.ResliceInput = self.WindowLevel.GetOutput() # Interactor Style self.InitInteractorStyle(self.SELECT_INTERACTION) # Initialize cursor lines mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(self.HorizontalLineSource.GetOutputPort()) self.HorizontalLineActor.SetMapper(mapper) self.HorizontalLineActor.GetProperty().SetColor(1.0, 0.0, 0.0) #del mapper self.HorizontalLineActor.SetVisibility(0) mapper2 = vtk.vtkPolyDataMapper() mapper2.SetInputConnection(self.VerticalLineSource.GetOutputPort()) self.VerticalLineActor.SetMapper(mapper2) self.VerticalLineActor.GetProperty().SetColor(1.0, 0.0, 0.0) #del mapper2 self.VerticalLineActor.SetVisibility(0) self.CornerAnnotation.SetWindowLevel(self.WindowLevelForCorner) self.SetOrientation(vtkViewImage.AXIAL_ID) if self.GetViewImage2DDisplayConventions() == 0: self.SetConventionsToRadiological() else: self.SetConventionsToNeurological()
#!/usr/bin/env python import vtk from vtk.test import Testing from vtk.util.misc import vtkGetDataRoot VTK_DATA_ROOT = vtkGetDataRoot() RANGE = 150 MAX_ITERATIONS_1 = RANGE MAX_ITERATIONS_2 = RANGE XRAD = 200 YRAD = 200 mandelbrot1 = vtk.vtkImageMandelbrotSource() mandelbrot1.SetMaximumNumberOfIterations(150) mandelbrot1.SetWholeExtent(0,expr.expr(globals(), locals(),["XRAD","-1"]),0,expr.expr(globals(), locals(),["YRAD","-1"]),0,0) mandelbrot1.SetSampleCX(expr.expr(globals(), locals(),["1.3","/","XRAD"]),expr.expr(globals(), locals(),["1.3","/","XRAD"]),expr.expr(globals(), locals(),["1.3","/","XRAD"]),expr.expr(globals(), locals(),["1.3","/","XRAD"])) mandelbrot1.SetOriginCX(-0.72,0.22,0.0,0.0) mandelbrot1.SetProjectionAxes(0,1,2) mapToWL = vtk.vtkImageMapToWindowLevelColors() mapToWL.SetInputConnection(mandelbrot1.GetOutputPort()) mapToWL.SetWindow(RANGE) mapToWL.SetLevel(expr.expr(globals(), locals(),["RANGE","/","3.0"])) # set the window/level to 255.0/127.5 to view full range viewer = vtk.vtkImageViewer() viewer.SetInputConnection(mapToWL.GetOutputPort()) viewer.SetColorWindow(255.0) viewer.SetColorLevel(127.5) viewer.Render() # --- end of script --
def run(self): grouper = self.grouper reader = gdcm.ImageReader() reader.SetFileName(self.filepath) if (reader.Read()): file = reader.GetFile() # Retrieve data set dataSet = file.GetDataSet() # Retrieve header header = file.GetHeader() stf = gdcm.StringFilter() field_dict = {} data_dict = {} tag = gdcm.Tag(0x0008, 0x0005) ds = reader.GetFile().GetDataSet() if ds.FindDataElement(tag): encoding_value = str( ds.GetDataElement(tag).GetValue()).split('\\')[0] if encoding_value.startswith("Loaded"): encoding = "ISO_IR 100" else: try: encoding = const.DICOM_ENCODING_TO_PYTHON[ encoding_value] except KeyError: encoding = 'ISO_IR 100' else: encoding = "ISO_IR 100" # Iterate through the Header iterator = header.GetDES().begin() while (not iterator.equal(header.GetDES().end())): dataElement = iterator.next() stf.SetFile(file) tag = dataElement.GetTag() data = stf.ToStringPair(tag) stag = tag.PrintAsPipeSeparatedString() group = str(tag.GetGroup()) field = str(tag.GetElement()) tag_labels[stag] = data[0] if not group in data_dict.keys(): data_dict[group] = {} if not (utils.VerifyInvalidPListCharacter(data[1])): data_dict[group][field] = data[1].decode(encoding) else: data_dict[group][field] = "Invalid Character" # Iterate through the Data set iterator = dataSet.GetDES().begin() while (not iterator.equal(dataSet.GetDES().end())): dataElement = iterator.next() stf.SetFile(file) tag = dataElement.GetTag() data = stf.ToStringPair(tag) stag = tag.PrintAsPipeSeparatedString() group = str(tag.GetGroup()) field = str(tag.GetElement()) tag_labels[stag] = data[0] if not group in data_dict.keys(): data_dict[group] = {} if not (utils.VerifyInvalidPListCharacter(data[1])): data_dict[group][field] = data[1].decode( encoding, 'replace') else: data_dict[group][field] = "Invalid Character" # -------------- To Create DICOM Thumbnail ----------- rvtk = vtkgdcm.vtkGDCMImageReader() rvtk.SetFileName(self.filepath) rvtk.Update() try: data = data_dict[str(0x028)][str(0x1050)] level = [float(value) for value in data.split('\\')][0] data = data_dict[str(0x028)][str(0x1051)] window = [float(value) for value in data.split('\\')][0] except (KeyError): level = 300.0 window = 2000.0 colorer = vtk.vtkImageMapToWindowLevelColors() colorer.SetInputConnection(rvtk.GetOutputPort()) colorer.SetWindow(float(window)) colorer.SetLevel(float(level)) colorer.SetOutputFormatToRGB() colorer.Update() resample = vtk.vtkImageResample() resample.SetInputConnection(colorer.GetOutputPort()) resample.SetAxisMagnificationFactor(0, 0.25) resample.SetAxisMagnificationFactor(1, 0.25) resample.SetAxisMagnificationFactor(2, 1) resample.Update() thumbnail_path = tempfile.mktemp() write_png = vtk.vtkPNGWriter() write_png.SetInputConnection(resample.GetOutputPort()) write_png.SetFileName(thumbnail_path) write_png.Write() #------ Verify the orientation -------------------------------- img = reader.GetImage() direc_cosines = img.GetDirectionCosines() orientation = gdcm.Orientation() try: type = orientation.GetType(tuple(direc_cosines)) except TypeError: type = orientation.GetType(direc_cosines) label = orientation.GetLabel(type) # ---------- Refactory -------------------------------------- data_dict['invesalius'] = {'orientation_label': label} # ------------------------------------------------------------- dict_file[self.filepath] = data_dict #---------- Verify is DICOMDir ------------------------------- is_dicom_dir = 1 try: if (data_dict[str(0x002)][str(0x002)] != "1.2.840.10008.1.3.10"): #DICOMDIR is_dicom_dir = 0 except (KeyError): is_dicom_dir = 0 if not (is_dicom_dir): parser = dicom.Parser() parser.SetDataImage(dict_file[self.filepath], self.filepath, thumbnail_path) dcm = dicom.Dicom() #self.l.acquire() dcm.SetParser(parser) grouper.AddFile(dcm)
def main(): # colors = vtk.vtkNamedColors() fileName = get_program_parameters() # Read the image. readerFactory = vtk.vtkImageReader2Factory() reader = readerFactory.CreateImageReader2(fileName) reader.SetFileName(fileName) reader.Update() scalarRange = [0] * 2 scalarRange[0] = reader.GetOutput().GetPointData().GetScalars().GetRange()[0] scalarRange[1] = reader.GetOutput().GetPointData().GetScalars().GetRange()[1] print("Range:", scalarRange) middleSlice = 22 # Work with triple images. cast = vtk.vtkImageCast() cast.SetInputConnection(reader.GetOutputPort()) cast.SetOutputScalarTypeToDouble() cast.Update() laplacian = vtk.vtkImageLaplacian() laplacian.SetInputConnection(cast.GetOutputPort()) laplacian.SetDimensionality(3) enhance = vtk.vtkImageMathematics() enhance.SetInputConnection(0, cast.GetOutputPort()) enhance.SetInputConnection(1, laplacian.GetOutputPort()) enhance.SetOperationToSubtract() colorWindow = (scalarRange[1] - scalarRange[0]) colorLevel = colorWindow / 2 # Map the image through the lookup table. originalColor = vtk.vtkImageMapToWindowLevelColors() originalColor.SetWindow(colorWindow) originalColor.SetLevel(colorLevel) originalColor.SetInputConnection(reader.GetOutputPort()) originalActor = vtk.vtkImageActor() originalActor.GetMapper().SetInputConnection(originalColor.GetOutputPort()) originalActor.GetProperty().SetInterpolationTypeToNearest() originalActor.SetDisplayExtent( reader.GetDataExtent()[0], reader.GetDataExtent()[1], reader.GetDataExtent()[2], reader.GetDataExtent()[3], middleSlice, middleSlice) laplacianColor = vtk.vtkImageMapToWindowLevelColors() laplacianColor.SetWindow(1000) laplacianColor.SetLevel(0) laplacianColor.SetInputConnection(laplacian.GetOutputPort()) laplacianActor = vtk.vtkImageActor() laplacianActor.GetMapper().SetInputConnection(laplacianColor.GetOutputPort()) laplacianActor.GetProperty().SetInterpolationTypeToNearest() laplacianActor.SetDisplayExtent(originalActor.GetDisplayExtent()) enhancedColor = vtk.vtkImageMapToWindowLevelColors() enhancedColor.SetWindow(colorWindow) enhancedColor.SetLevel(colorLevel) enhancedColor.SetInputConnection(enhance.GetOutputPort()) enhancedActor = vtk.vtkImageActor() enhancedActor.GetMapper().SetInputConnection(enhancedColor.GetOutputPort()) enhancedActor.GetProperty().SetInterpolationTypeToNearest() enhancedActor.SetDisplayExtent(originalActor.GetDisplayExtent()) # Setup the renderers. originalRenderer = vtk.vtkRenderer() originalRenderer.AddActor(originalActor) laplacianRenderer = vtk.vtkRenderer() laplacianRenderer.AddActor(laplacianActor) enhancedRenderer = vtk.vtkRenderer() enhancedRenderer.AddActor(enhancedActor) renderers = list() renderers.append(originalRenderer) renderers.append(laplacianRenderer) renderers.append(enhancedRenderer) # Setup viewports for the renderers. rendererSize = 400 xGridDimensions = 3 yGridDimensions = 1 renderWindow = vtk.vtkRenderWindow() renderWindow.SetSize(rendererSize * xGridDimensions, rendererSize * yGridDimensions) for row in range(0, yGridDimensions): for col in range(xGridDimensions): index = row * xGridDimensions + col # (xmin, ymin, xmax, ymax) viewport = [float(col) / xGridDimensions, float(yGridDimensions - (row + 1)) / yGridDimensions, float(col + 1) / xGridDimensions, float(yGridDimensions - row) / yGridDimensions] renderers[index].SetViewport(viewport) renderWindow.AddRenderer(renderers[index]) renderWindowInteractor = vtk.vtkRenderWindowInteractor() style = vtk.vtkInteractorStyleImage() renderWindowInteractor.SetInteractorStyle(style) renderWindowInteractor.SetRenderWindow(renderWindow) # Renderers share one camera. renderWindow.Render() renderers[0].GetActiveCamera().Dolly(1.5) renderers[0].ResetCameraClippingRange() for r in range(1, len(renderers)): renderers[r].SetActiveCamera(renderers[0].GetActiveCamera()) renderWindowInteractor.Initialize() renderWindowInteractor.Start()
#!/usr/bin/env python import vtk from vtk.util.misc import vtkGetDataRoot VTK_DATA_ROOT = vtkGetDataRoot() RANGE = 150 MAX_ITERATIONS_1 = RANGE MAX_ITERATIONS_2 = RANGE XRAD = 200 YRAD = 200 mandelbrot1 = vtk.vtkImageMandelbrotSource() mandelbrot1.SetMaximumNumberOfIterations(150) mandelbrot1.SetWholeExtent(0, XRAD - 1, 0, YRAD - 1, 0, 0) mandelbrot1.SetSampleCX(1.3 / XRAD, 1.3 / XRAD, 1.3 / XRAD, 1.3 / XRAD) mandelbrot1.SetOriginCX(-0.72, 0.22, 0.0, 0.0) mandelbrot1.SetProjectionAxes(0, 1, 2) mapToWL = vtk.vtkImageMapToWindowLevelColors() mapToWL.SetInputConnection(mandelbrot1.GetOutputPort()) mapToWL.SetWindow(RANGE) mapToWL.SetLevel(RANGE / 3.0) # set the window/level to 255.0/127.5 to view full range viewer = vtk.vtkImageViewer() viewer.SetInputConnection(mapToWL.GetOutputPort()) viewer.SetColorWindow(255.0) viewer.SetColorLevel(127.5) viewer.Render()