~ubuntu-branches/debian/sid/simpleitk/sid

« back to all changes in this revision

Viewing changes to Examples/Python/GeodesicActiceContourSegmentation.py

  • Committer: Package Import Robot
  • Author(s): Ghislain Antony Vaillant
  • Date: 2017-11-02 08:49:18 UTC
  • Revision ID: package-import@ubuntu.com-20171102084918-7hs09ih668xq87ej
Tags: upstream-1.0.1
ImportĀ upstreamĀ versionĀ 1.0.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#=========================================================================
 
2
#
 
3
#  Copyright Insight Software Consortium
 
4
#
 
5
#  Licensed under the Apache License, Version 2.0 (the "License");
 
6
#  you may not use this file except in compliance with the License.
 
7
#  You may obtain a copy of the License at
 
8
#
 
9
#         http://www.apache.org/licenses/LICENSE-2.0.txt
 
10
#
 
11
#  Unless required by applicable law or agreed to in writing, software
 
12
#  distributed under the License is distributed on an "AS IS" BASIS,
 
13
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
14
#  See the License for the specific language governing permissions and
 
15
#  limitations under the License.
 
16
#
 
17
#=========================================================================
 
18
 
 
19
from __future__ import print_function
 
20
 
 
21
import SimpleITK as sitk
 
22
import os
 
23
import sys
 
24
 
 
25
if len ( sys.argv ) < 8:
 
26
    print( "Usage:", sys.argv[0], " <inputImage> <outputImage> <sigma> <InitialDistance> <PropagationScaling> <seedX> <seedY> <?seedZ>" )
 
27
    sys.exit ( 1 )
 
28
 
 
29
inputImage = sys.argv[1]
 
30
outputImage = sys.argv[2]
 
31
sigma = float(sys.argv[3])
 
32
initialDistance = float(sys.argv[4])
 
33
propagationScaling = float(sys.argv[5])
 
34
seed = [float(sys.argv[6]), float(sys.argv[7]) ]
 
35
 
 
36
if len( sys.argv ) > 8:
 
37
    seed.append( float(sys.argv[8]) )
 
38
 
 
39
 
 
40
reader = sitk.ImageFileReader()
 
41
reader.SetFileName ( inputImage )
 
42
image = reader.Execute()
 
43
 
 
44
gradientMagnitude = sitk.GradientMagnitudeRecursiveGaussianImageFilter()
 
45
gradientMagnitude.SetSigma( sigma )
 
46
 
 
47
featureImage = sitk.BoundedReciprocal( gradientMagnitude.Execute( image ) )
 
48
 
 
49
seedImage = sitk.Image( image.GetSize()[0], image.GetSize()[1], sitk.sitkUInt8 )
 
50
seedImage.SetSpacing( image.GetSpacing() )
 
51
seedImage.SetOrigin( image.GetOrigin() )
 
52
seedImage.SetDirection( image.GetDirection() )
 
53
seedImage[ seedImage.TransformPhysicalPointToIndex(seed) ] = 1
 
54
 
 
55
distance = sitk.SignedMaurerDistanceMapImageFilter()
 
56
distance.InsideIsPositiveOff()
 
57
distance.UseImageSpacingOn()
 
58
 
 
59
initialImage = sitk.BinaryThreshold( distance.Execute( seedImage ), -1000, 10 )
 
60
initialImage = sitk.Cast( initialImage, featureImage.GetPixelID() ) * -1 + 0.5
 
61
 
 
62
 
 
63
geodesicActiveContour = sitk.GeodesicActiveContourLevelSetImageFilter()
 
64
geodesicActiveContour.SetPropagationScaling( propagationScaling )
 
65
geodesicActiveContour.SetCurvatureScaling( .5 )
 
66
geodesicActiveContour.SetAdvectionScaling( 1.0 )
 
67
geodesicActiveContour.SetMaximumRMSError( 0.01 )
 
68
geodesicActiveContour.SetNumberOfIterations( 1000 )
 
69
 
 
70
levelset = geodesicActiveContour.Execute( initialImage, featureImage )
 
71
 
 
72
print( "RMS Change: ", geodesicActiveContour.GetRMSChange() )
 
73
print( "Elapsed Iterations: ", geodesicActiveContour.GetElapsedIterations() )
 
74
 
 
75
contour = sitk.BinaryContour( sitk.BinaryThreshold( levelset, -1000, 0 ) )
 
76
 
 
77
if ( not "SITK_NOSHOW" in os.environ ):
 
78
    sitk.Show( sitk.LabelOverlay( image, contour ), "Levelset Countour" )