ViewFrogBoth
VTKExamples/Python/Visualization/ViewFrogBoth
Code¶
ViewFrogBoth.py
#!/usr/bin/env python """ """ import vtk def main(): colors = vtk.vtkNamedColors() fileName, tissue = get_program_parameters() tissueMap = CreateTissueMap() colorLut = CreateFrogLut() # Setup render window, renderer, and interactor. rendererLeft = vtk.vtkRenderer() rendererLeft.SetViewport(0, 0, .5, 1) rendererRight = vtk.vtkRenderer() rendererRight.SetViewport(.5, 0, 1, 1) renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(rendererLeft) renderWindow.AddRenderer(rendererRight) renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) actor = CreateFrogActor(fileName, tissueMap[tissue]) actor.GetProperty().SetDiffuseColor(colorLut.GetTableValue(tissueMap[tissue])[:3]) rendererLeft.AddActor(actor) actorSmooth = CreateSmoothFrogActor(fileName, tissueMap[tissue]) actorSmooth.GetProperty().SetDiffuseColor(colorLut.GetTableValue(tissueMap[tissue])[:3]) actorSmooth.GetProperty().SetDiffuse(1.0) actorSmooth.GetProperty().SetSpecular(.5) actorSmooth.GetProperty().SetSpecularPower(100) rendererRight.AddActor(actorSmooth) rendererLeft.ResetCamera() rendererLeft.GetActiveCamera().SetViewUp(-1, 0, 0) rendererLeft.GetActiveCamera().Azimuth(180) rendererLeft.ResetCameraClippingRange() rendererLeft.SetBackground(colors.GetColor3d("SlateGray")) rendererRight.SetBackground(colors.GetColor3d("SlateGray")) rendererRight.SetActiveCamera(rendererLeft.GetActiveCamera()) renderWindow.SetSize(640, 480) renderWindow.Render() renderWindowInteractor.Start() def get_program_parameters(): import argparse description = 'The frog’s brain.' epilogue = ''' Model extracted without smoothing (left) and with smoothing (right). ''' parser = argparse.ArgumentParser(description=description, epilog=epilogue, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument('filename', help='frog.mhd.') parser.add_argument('tissue', default='brain', nargs='?', help='The tissue to use.') args = parser.parse_args() return args.filename, args.tissue def CreateFrogLut(): colors = vtk.vtkNamedColors() colorLut = vtk.vtkLookupTable() colorLut.SetNumberOfColors(17) colorLut.SetTableRange(0, 16) colorLut.Build() colorLut.SetTableValue(0, 0, 0, 0, 0) colorLut.SetTableValue(1, colors.GetColor4d("salmon")) # blood colorLut.SetTableValue(2, colors.GetColor4d("beige")) # brain colorLut.SetTableValue(3, colors.GetColor4d("orange")) # duodenum colorLut.SetTableValue(4, colors.GetColor4d("misty_rose")) # eye_retina colorLut.SetTableValue(5, colors.GetColor4d("white")) # eye_white colorLut.SetTableValue(6, colors.GetColor4d("tomato")) # heart colorLut.SetTableValue(7, colors.GetColor4d("raspberry")) # ileum colorLut.SetTableValue(8, colors.GetColor4d("banana")) # kidney colorLut.SetTableValue(9, colors.GetColor4d("peru")) # l_intestine colorLut.SetTableValue(10, colors.GetColor4d("pink")) # liver colorLut.SetTableValue(11, colors.GetColor4d("powder_blue")) # lung colorLut.SetTableValue(12, colors.GetColor4d("carrot")) # nerve colorLut.SetTableValue(13, colors.GetColor4d("wheat")) # skeleton colorLut.SetTableValue(14, colors.GetColor4d("violet")) # spleen colorLut.SetTableValue(15, colors.GetColor4d("plum")) # stomach return colorLut def CreateTissueMap(): tissueMap = dict() tissueMap["blood"] = 1 tissueMap["brain"] = 2 tissueMap["duodenum"] = 3 tissueMap["eyeRetina"] = 4 tissueMap["eyeWhite"] = 5 tissueMap["heart"] = 6 tissueMap["ileum"] = 7 tissueMap["kidney"] = 8 tissueMap["intestine"] = 9 tissueMap["liver"] = 10 tissueMap["lung"] = 11 tissueMap["nerve"] = 12 tissueMap["skeleton"] = 13 tissueMap["spleen"] = 14 tissueMap["stomach"] = 15 return tissueMap def CreateSmoothFrogActor(fileName, tissue): reader = vtk.vtkMetaImageReader() reader.SetFileName(fileName) reader.Update() selectTissue = vtk.vtkImageThreshold() selectTissue.ThresholdBetween(tissue, tissue) selectTissue.SetInValue(255) selectTissue.SetOutValue(0) selectTissue.SetInputConnection(reader.GetOutputPort()) gaussianRadius = 1 gaussianStandardDeviation = 2.0 gaussian = vtk.vtkImageGaussianSmooth() gaussian.SetStandardDeviations(gaussianStandardDeviation, gaussianStandardDeviation, gaussianStandardDeviation) gaussian.SetRadiusFactors(gaussianRadius, gaussianRadius, gaussianRadius) gaussian.SetInputConnection(selectTissue.GetOutputPort()) isoValue = 127.5 mcubes = vtk.vtkMarchingCubes() mcubes.SetInputConnection(gaussian.GetOutputPort()) mcubes.ComputeScalarsOff() mcubes.ComputeGradientsOff() mcubes.ComputeNormalsOff() mcubes.SetValue(0, isoValue) smoothingIterations = 0 passBand = 0.001 featureAngle = 60.0 smoother = vtk.vtkWindowedSincPolyDataFilter() smoother.SetInputConnection(mcubes.GetOutputPort()) smoother.SetNumberOfIterations(smoothingIterations) smoother.BoundarySmoothingOff() smoother.FeatureEdgeSmoothingOff() smoother.SetFeatureAngle(featureAngle) smoother.SetPassBand(passBand) smoother.NonManifoldSmoothingOn() smoother.NormalizeCoordinatesOn() smoother.Update() normals = vtk.vtkPolyDataNormals() normals.SetInputConnection(smoother.GetOutputPort()) normals.SetFeatureAngle(featureAngle) stripper = vtk.vtkStripper() stripper.SetInputConnection(normals.GetOutputPort()) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(stripper.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) return actor def CreateFrogActor(fileName, tissue): reader = vtk.vtkMetaImageReader() reader.SetFileName(fileName) reader.Update() selectTissue = vtk.vtkImageThreshold() selectTissue.ThresholdBetween(tissue, tissue) selectTissue.SetInValue(255) selectTissue.SetOutValue(0) selectTissue.SetInputConnection(reader.GetOutputPort()) isoValue = 63.5 mcubes = vtk.vtkMarchingCubes() mcubes.SetInputConnection(selectTissue.GetOutputPort()) mcubes.ComputeScalarsOff() mcubes.ComputeGradientsOff() mcubes.ComputeNormalsOn() mcubes.SetValue(0, isoValue) stripper = vtk.vtkStripper() stripper.SetInputConnection(mcubes.GetOutputPort()) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(stripper.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) return actor if __name__ == '__main__': main()