File: ThresholdSegmentationLevelSetImageFilter.py

package info (click to toggle)
insighttoolkit 3.20.1%2Bgit20120521-5
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 80,672 kB
  • ctags: 85,253
  • sloc: cpp: 458,133; ansic: 196,222; fortran: 28,000; python: 3,839; tcl: 1,811; sh: 1,184; java: 583; makefile: 428; csh: 220; perl: 193; xml: 20
file content (117 lines) | stat: -rw-r--r-- 3,464 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117

#     INPUTS: {BrainProtonDensitySlice.png}
#     OUTPUTS: {ThresholdSegmentationLevelSetImageFilterWhiteMatter.png}
#     60 116 5 150 180

#     INPUTS: {BrainProtonDensitySlice.png}
#     OUTPUTS: {ThresholdSegmentationLevelSetImageFilterVentricle.png}
#     81 112 5 210 250

#     INPUTS: {BrainProtonDensitySlice.png}
#     OUTPUTS: {ThresholdSegmentationLevelSetImageFilterGrayMatter.png}
#     107 69 5 180  210

import itk
from sys import argv, stderr, exit
itk.auto_progress(2)

# itk.auto_progress(1)

if len(argv) < 8 :
  print >> stderr, """Missing Parameters
Usage: ThresholdSegmentationLevelSetImageFilter.py inputImage  outputImage seedX seedY InitialDistance LowerThreshold UpperThreshold [CurvatureScaling == 1.0]"""
  exit(1)

InternalPixelType = itk.F
Dimension = 2
InternalImageType = itk.Image[ InternalPixelType, Dimension ]

OutputPixelType = itk.UC
OutputImageType = itk.Image[ OutputPixelType, Dimension ]

thresholder = itk.BinaryThresholdImageFilter[ InternalImageType, OutputImageType ].New()
                      
thresholder.SetLowerThreshold( -1000.0 )
thresholder.SetUpperThreshold(     0.0 )

thresholder.SetOutsideValue(  0  )
thresholder.SetInsideValue(  255 )

ReaderType = itk.ImageFileReader[ InternalImageType ]
WriterType = itk.ImageFileWriter[  OutputImageType  ]

reader = ReaderType.New()
writer = WriterType.New()

reader.SetFileName( argv[1] )
writer.SetFileName( argv[2] )


FastMarchingFilterType = itk.FastMarchingImageFilter[ InternalImageType, InternalImageType ]
fastMarching = FastMarchingFilterType.New()

ThresholdSegmentationLevelSetImageFilterType = itk.ThresholdSegmentationLevelSetImageFilter[ InternalImageType, InternalImageType, InternalPixelType ] 
thresholdSegmentation = ThresholdSegmentationLevelSetImageFilterType.New()
thresholdSegmentation.SetPropagationScaling( 1.0 )
if len(argv) > 8 :
  thresholdSegmentation.SetCurvatureScaling( float(argv[8]) )
else:
  thresholdSegmentation.SetCurvatureScaling( 1.0 )

thresholdSegmentation.SetMaximumRMSError( 0.02 )
thresholdSegmentation.SetNumberOfIterations( 1200 )

thresholdSegmentation.SetUpperThreshold( float(argv[7]) )
thresholdSegmentation.SetLowerThreshold( float(argv[6]) )
thresholdSegmentation.SetIsoSurfaceValue(0.0)

thresholdSegmentation.SetInput( fastMarching.GetOutput() )
thresholdSegmentation.SetFeatureImage( reader.GetOutput() )
thresholder.SetInput( thresholdSegmentation.GetOutput() )
writer.SetInput( thresholder.GetOutput() )

NodeType = itk.LevelSetNode[InternalPixelType, Dimension]
NodeContainer = itk.VectorContainer[itk.UI, NodeType]
seeds = NodeContainer.New()
seedPosition = [int( argv[3] ), int( argv[4] )]

initialDistance = float( argv[5] )

node = NodeType()

seedValue = - initialDistance

node.SetValue( seedValue )
node.SetIndex( seedPosition )

seeds.Initialize()
seeds.InsertElement( 0, node )

fastMarching.SetTrialPoints(  seeds  )

fastMarching.SetSpeedConstant( 1.0 )


reader.Update()
fastMarching.SetOutputSize( 
  reader.GetOutput().GetBufferedRegion().GetSize() )
writer.Update()

itk.echo(thresholdSegmentation)


InternalWriterType = itk.ImageFileWriter[ InternalImageType ] 

mapWriter = InternalWriterType.New()
mapWriter.SetInput( fastMarching.GetOutput() )
mapWriter.SetFileName("fastMarchingImage.mha")
mapWriter.Update()

speedWriter = InternalWriterType.New()
speedWriter.SetInput( thresholdSegmentation.GetSpeedImage() )
speedWriter.SetFileName("speedTermImage.mha")
speedWriter.Update()