Skip to content

Instantly share code, notes, and snippets.

@fk128
Created April 30, 2019 16:16
Show Gist options
  • Save fk128/d11c70e6809ce59d049d877c755e9f7b to your computer and use it in GitHub Desktop.
Save fk128/d11c70e6809ce59d049d877c755e9f7b to your computer and use it in GitHub Desktop.
import os
import argparse
import glob
import re
import time
MIN = -1024
MAX = 3072
def main():
itksnap_path = 'itksnap'
images_dir = 'images/native'
labelmaps_dir = 'labelmaps/native'
ext = '.nii.gz'
template = open('workspace_template.itksnap', 'r').read()
parser = argparse.ArgumentParser(description='output image list')
parser.add_argument('-i','--image', default=-1, type=int)
parser.add_argument('-o','--offset', default=0, type=int)
parser.add_argument('-p','--path', default='.', type=str)
parser.add_argument('--min', default=-200, type=int)
parser.add_argument('--mid', default=None, type=int)
parser.add_argument('--max', default=400, type=int)
args = parser.parse_args()
images_dir = os.path.join(args.path, images_dir)
labelmaps_dir = os.path.join(args.path, labelmaps_dir)
print(images_dir)
image_list_pre = glob.glob(os.path.join(images_dir,'*' + ext))
print('found {} images'.format(len(image_list_pre)))
labelmap_list_pre = glob.glob(os.path.join(labelmaps_dir,'*' + ext))
print('found {} segmentations'.format(len(labelmap_list_pre)))
if len(image_list_pre) == 0:
print('Could not find images at directory')
exit(0)
if len(labelmap_list_pre) == 0:
print('Could not find segmentations at directory')
exit(0)
image_list = []
labelmap_list = []
names = []
for image_path in image_list_pre:
name = image_path.split('/')[-1].replace(ext, '')
print(name)
labelmap_path = glob.glob(os.path.join(labelmaps_dir, name + '*' + ext))
if len(labelmap_path) == 1:
image_list.append(image_path)
labelmap_list.append(labelmap_path[0])
names.append(name)
else:
print('Could not match image with segmentation: ', name)
if len(names) == 0:
print('Could not load images')
exit(1)
if args.image == -1:
idxs = list(range(args.offset, len(image_list)))
else:
idxs = [args.image]
for idx in idxs:
print(idx, names[idx])
minv = (args.min - MIN)/(MAX - MIN)
maxv = (args.max - MIN)/(MAX - MIN)
if not args.mid:
mid = 0.5*(maxv + minv)
substitutions = {'min': str(minv), 'mid':str(mid), 'max': str(maxv), 'save_path': args.path, 'image_path': image_list[idx], 'segmentation_path': labelmap_list[idx]}
pattern = re.compile(r'%([^%]+)%')
xmlstring = re.sub(pattern, lambda m: substitutions[m.group(1)], template)
with open('workspace_temp.itksnap', 'w') as f:
f.write(xmlstring)
os.system(' '.join([itksnap_path,'-w', 'workspace_temp.itksnap']))
time.sleep(0.1)
# os.system(' '.join([itksnap_path,'-g' , image_list[idx], '-s', labelmap_list[idx]]))
if __name__ == "__main__":
main()
<?xml version="1.0" encoding="UTF-8" ?>
<!--ITK-SNAP (itksnap.org) Project File
This file can be moved/copied along with the images that it references
as long as the relative location of the images to the project file is
the same. Do not modify the SaveLocation entry, or this will not work.
-->
<!DOCTYPE registry [
<!ELEMENT registry (entry*,folder*)>
<!ELEMENT folder (entry*,folder*)>
<!ELEMENT entry EMPTY>
<!ATTLIST folder key CDATA #REQUIRED>
<!ATTLIST entry key CDATA #REQUIRED>
<!ATTLIST entry value CDATA #REQUIRED>
]>
<registry>
<entry key="SaveLocation" value="%save_path%" />
<entry key="Version" value="20170401" />
<folder key="Annotations" >
<entry key="Format" value="ITK-SNAP Annotation File" />
<entry key="FormatDate" value="20150624" />
</folder>
<folder key="Layers" >
<folder key="Layer[000]" >
<entry key="AbsolutePath" value="%image_path%" />
<entry key="Role" value="MainRole" />
<folder key="LayerMetaData" >
<entry key="Alpha" value="255" />
<entry key="CustomNickName" value="" />
<entry key="Sticky" value="0" />
<folder key="DisplayMapping" >
<folder key="ColorMap" >
<entry key="Preset" value="Grayscale" />
</folder>
<folder key="Curve" >
<entry key="NumberOfControlPoints" value="3" />
<folder key="ControlPoint[0]" >
<entry key="tValue" value="%min%" />
<entry key="xValue" value="0" />
</folder>
<folder key="ControlPoint[1]" >
<entry key="tValue" value="%mid%" />
<entry key="xValue" value="0.5" />
</folder>
<folder key="ControlPoint[2]" >
<entry key="tValue" value="%max%" />
<entry key="xValue" value="1" />
</folder>
</folder>
</folder>
</folder>
<folder key="ProjectMetaData" >
<entry key="GaussianBlurScale" value="1" />
<entry key="RemappingExponent" value="3" />
<entry key="RemappingSteepness" value="0.04" />
<folder key="IOHistory" >
<folder key="LabelImage" >
<entry key="ArraySize" value="1" />
<entry key="Element[0]" value="%segmentation_path%" />
</folder>
</folder>
<folder key="IRIS" >
<entry key="SliceViewLayerLayout" value="Stacked" />
<folder key="DisplayMapping" >
<folder key="ColorMap" >
<entry key="Preset" value="Grayscale" />
</folder>
<folder key="Curve" >
<entry key="NumberOfControlPoints" value="3" />
<folder key="ControlPoint[0]" >
<entry key="tValue" value="0" />
<entry key="xValue" value="0" />
</folder>
<folder key="ControlPoint[1]" >
<entry key="tValue" value="0.5" />
<entry key="xValue" value="0.5" />
</folder>
<folder key="ControlPoint[2]" >
<entry key="tValue" value="1" />
<entry key="xValue" value="1" />
</folder>
</folder>
</folder>
<folder key="LabelState" >
<entry key="CoverageMode" value="OverAll" />
<entry key="DrawingLabel" value="1" />
<entry key="OverwriteLabel" value="0" />
<entry key="PolygonInvert" value="0" />
<entry key="SegmentationAlpha" value="0.5" />
</folder>
<folder key="LabelTable" >
<entry key="NumberOfElements" value="6" />
<folder key="Element[0]" >
<entry key="Alpha" value="255" />
<entry key="Color" value="255 0 0" />
<entry key="Flags" value="1 1" />
<entry key="Index" value="1" />
<entry key="Label" value="Label 1" />
</folder>
<folder key="Element[1]" >
<entry key="Alpha" value="255" />
<entry key="Color" value="0 255 0" />
<entry key="Flags" value="1 1" />
<entry key="Index" value="2" />
<entry key="Label" value="Label 2" />
</folder>
<folder key="Element[2]" >
<entry key="Alpha" value="255" />
<entry key="Color" value="0 0 255" />
<entry key="Flags" value="1 1" />
<entry key="Index" value="3" />
<entry key="Label" value="Label 3" />
</folder>
<folder key="Element[3]" >
<entry key="Alpha" value="255" />
<entry key="Color" value="255 255 0" />
<entry key="Flags" value="1 1" />
<entry key="Index" value="4" />
<entry key="Label" value="Label 4" />
</folder>
<folder key="Element[4]" >
<entry key="Alpha" value="255" />
<entry key="Color" value="0 255 255" />
<entry key="Flags" value="1 1" />
<entry key="Index" value="5" />
<entry key="Label" value="Label 5" />
</folder>
<folder key="Element[5]" >
<entry key="Alpha" value="255" />
<entry key="Color" value="255 0 255" />
<entry key="Flags" value="1 1" />
<entry key="Index" value="6" />
<entry key="Label" value="Label 6" />
</folder>
</folder>
<folder key="MeshOptions" >
<entry key="DecimateFeatureAngle" value="45" />
<entry key="DecimateMaximumError" value="0.002" />
<entry key="DecimatePreserveTopology" value="1" />
<entry key="DecimateTargetReduction" value="0.95" />
<entry key="GaussianError" value="0.03" />
<entry key="GaussianStandardDeviation" value="0.8" />
<entry key="MeshSmoothingBoundarySmoothing" value="0" />
<entry key="MeshSmoothingConvergence" value="0" />
<entry key="MeshSmoothingFeatureAngle" value="45" />
<entry key="MeshSmoothingFeatureEdgeSmoothing" value="0" />
<entry key="MeshSmoothingIterations" value="20" />
<entry key="MeshSmoothingRelaxationFactor" value="0.01" />
<entry key="UseDecimation" value="0" />
<entry key="UseGaussianSmoothing" value="1" />
<entry key="UseMeshSmoothing" value="0" />
</folder>
</folder>
<folder key="SNAP" >
<folder key="SnakeParameters" >
<entry key="AdvectionSpeedExponent" value="0" />
<entry key="AdvectionWeight" value="0" />
<entry key="AutomaticTimeStep" value="1" />
<entry key="Clamp" value="1" />
<entry key="CurvatureSpeedExponent" value="-1" />
<entry key="CurvatureWeight" value="0.2" />
<entry key="Ground" value="5" />
<entry key="LaplacianSpeedExponent" value="0" />
<entry key="LaplacianWeight" value="0" />
<entry key="PropagationSpeedExponent" value="1" />
<entry key="PropagationWeight" value="1" />
<entry key="SnakeType" value="RegionCompetition" />
<entry key="SolverAlgorithm" value="ParallelSparseField" />
<entry key="TimeStepFactor" value="1" />
</folder>
</folder>
</folder>
</folder>
<folder key="Layer[001]" >
<entry key="AbsolutePath" value="%segmentation_path%" />
<entry key="Role" value="SegmentationRole" />
<folder key="LayerMetaData" >
<entry key="Alpha" value="0" />
<entry key="CustomNickName" value="" />
<entry key="Sticky" value="1" />
</folder>
</folder>
</folder>
</registry>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment