Child pages
  • Multi-Atlas Label Fusion Validation
Skip to end of metadata
Go to start of metadata

Related Informations

Working Directory:

/hjohnson/HDNI/20130911_MultiLabel_Validation

GitHub for Nipype and Script:

https://github.com/reginakim/MultiAtlasLabelFusionValidation.git

Jira:

Unable to locate Jira server for this macro. It may be due to Application Link configuration.


Table of Contents

Method

1. Prepare Images

GitHub Nipype Version is available in

Above nipype pipeline includes a) brain stripping and b) affine registration to atlas. Following script is to run nipype:

export PYTHONPATH=/ipldev/scratch/eunyokim/src/BRAINS201308/BRAINSTools/AutoWorkup/:/ipldev/scratch/eunyokim/src/nipype/nipype-0.8:/ipldev/scratch/eunyokim/src/BRAINS201308/build/lib:
export PATH=/ipldev/scratch/eunyokim/src/BRAINS201308/buildNamic/UKF-build/ukf/bin/:/ipldev/scratch/eunyokim/src/BRAINS201308/build/bin/:$PATH
python ../MultiAtlasLabelFusionValidation/src/nipype/prepareMultiLabel.py --workflowName "CV_OneSet" \
  --inputAtlas /Shared/sinapse/scratch/eunyokim/src/BRAINS201308/build/ReferenceAtlas-build/Atlas/Atlas_20130711/template_t1_clipped.nii.gz \
  --outputDirectory . \
  --inputListFilename inputSpecification.csv

'inputSpecification.csv' is a list of dictionary that contains

    1. baselineImage : filename for a baseline image. usually subject t1 image
    2. additionalImages: a list of additional images paired with baselineImage, usually T2 or PD scanned at the same session
    3. labelMap: a manual label filename that provides an answer for training
    4. brainMask: a brain mask file name that will be used for clipping of the brain.


2. Train Multi-Atlas Label Fusion Module

 

Training input images, including a baseline image and the corresponding labelmap image should be in one directory without any subdirectories. For example, my training image directory looks like following:

$ ls trainingImages/
CV_OneSet_10_subjectToAtlasBaselineVolume.nii.gz
CV_OneSet_11_subjectToAtlasBaselineVolume.nii.gz
CV_OneSet_11_subjectToAtlasLabelMap.nii.gz
CV_OneSet_12_subjectToAtlasBaselineVolume.nii.gz
CV_OneSet_12_subjectToAtlasLabelMap.nii.gz
CV_OneSet_13_subjectToAtlasBaselineVolume.nii.gz
CV_OneSet_13_subjectToAtlasLabelMap.nii.gz
CV_OneSet_14_subjectToAtlasBaselineVolume.nii.gz
CV_OneSet_14_subjectToAtlasLabelMap.nii.gz
CV_OneSet_15_subjectToAtlasBaselineVolume.nii.gz
CV_OneSet_15_subjectToAtlasLabelMap.nii.gz
CV_OneSet_16_subjectToAtlasBaselineVolume.nii.gz
...

Now, we can train the slicer module:

/ipldev/scratch/eunyokim/src/LabelFusion_Slicer/MultiAtlas/build/lib/Slicer-4.3/cli-modules/IGR3D_MABMIS_Training \
    -i 15,10,5 \
    -s 1.5 \
    --trainingXML /Shared/johnsonhj/HDNI/20130911_MultiLabel_Validation/CrossValidation_OneSet/inputTrainSpecificationOnOneDir.xml \
    --atlasTreeXML outputTrainedAtlasSpecificationOnOneDir.xml

Above line will take some hours (easily overnight) depending on the number of images you are using for your training. For 31 training images, I have spend about more than a day.

3. Test the trained Multi-Atlas Label Fusion model on the Testing Images
/ipldev/scratch/eunyokim/src/LabelFusion_Slicer/MultiAtlas/build/lib/Slicer-4.3/cli-modules/IGR3D_MABMIS_Testing \
    -i 15,10,5 \
    -s 1.5 \
    --imageListXML /Shared/johnsonhj/HDNI/20130911_MultiLabel_Validation/CrossValidation_OneSet/inputTestingSpecification.xml \
    --atlasTreeXML outputTrainedAtlasSpecificationOnOneDir.xml

Again, a set of testing images should be located under one directory separated by names without any subdirectories.

Once the process completes, the result labelmaps will be under the same directory to the input testing images with '_seg' postfix.

 

Results

Test on Leaved-out Testing data: 

Train Images: 31 scans with manual labels of accumben, caudate, putamen, globus. Yes. Sorry. I forgot to include hippo and thalamus. 

<?xml version="1.0"?>
<!DOCTYPE MABMISImageData>
<MABMISImageData>
<!-- DataPath is empty for using path relative to the location of this xml file -->
<DataPath>/Shared/johnsonhj/HDNI/20130911_MultiLabel_Validation/CrossValidation_OneSet/</DataPath>
<NumberOfImageData>31</NumberOfImageData>
<ImageDataSets>
<Dataset ImageFile="./CV_OneSet_5/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_5/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_6/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_6/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_7/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_7/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_8/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_8/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_9/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_9/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_10/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_11/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_11/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_11/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_12/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_12/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_13/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_13/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_14/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_14/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_15/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_15/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_16/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_16/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_17/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_17/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_18/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_18/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_19/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_19/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_20/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_11/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_21/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_21/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_22/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_22/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_23/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_23/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_24/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_24/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_25/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_25/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_26/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_26/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_27/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_27/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_28/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_28/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_29/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_29/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_30/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_31/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_31/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_31/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_32/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_32/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_33/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_33/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_34/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_34/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
<Dataset ImageFile="./CV_OneSet_35/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/subjectToAtlasBaselineVolume.nii.gz" SegmentationFile="./CV_OneSet_35/WarpSubjectToAtlas/WarpSubjectToAtlasWF/ResampleLabelToAtlas/subjectToAtlasLabelMap.nii.gz"/>
</ImageDataSets>
</MABMISImageData> 

 

Testing Images: 4 scans 

Note that this output specification is an auto-generated output from Multi-Atlas Label Fusion Module.

 <?xml version="1.0"?>
<!DOCTYPE MABMISAtlas>
<MABMISAtlas>
<AtlasDirectory>./outputTrainedAtlasSpecification</AtlasDirectory>
<NumberOfAtlases>93</NumberOfAtlases>
<NumberOfSimulatedAtlases>62</NumberOfSimulatedAtlases>
<AtlasFileList>
<Atlas ID="0" FileName="subjectToAtlasBaselineVolume.nii.gz" SegmentationFileName="subjectToAtlasLabelMap.nii.gz" Simulated="false"/>
<Atlas ID="1" FileName="subjectToAtlasBaselineVolume.nii.gz" SegmentationFileName="subjectToAtlasLabelMap.nii.gz" Simulated="false"/>
<Atlas ID="2" FileName="subjectToAtlasBaselineVolume.nii.gz" SegmentationFileName="subjectToAtlasLabelMap.nii.gz" Simulated="false"/>
...
<Atlas ID="31" FileName="simulated_cbq_000.nii.gz" Simulated="true"/>
<Atlas ID="32" FileName="simulated_cbq_001.nii.gz" Simulated="true"/>
<Atlas ID="33" FileName="simulated_cbq_002.nii.gz" Simulated="true"/>
<Atlas ID="34" FileName="simulated_cbq_003.nii.gz" Simulated="true"/>
..
</Tree>
</AtlasTree>
</MABMISAtlas>

 

Results: summary with plots

Time for one session: 3hrs Debug
Reverse deformation field ...
0, 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, Done!
Done. 
---------------------------------------
Pairwise registration via the tree root...
Generate all pairwise registration ...
Done!
Done.
---------------------------------------
Segment images using label fusion... 
Start to process segmentation...
iteration 1: 0,  
iteration 2: 0,
iteration 3: 0,
Done. 
---------------------------------------
Removing intermediate registration files...
Done. 
Time took: 11144
test_One.out           
Time for one session: 1hr Release
Reverse deformation field ... 
0, 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, Done!
Done. 
---------------------------------------
Pairwise registration via the tree root... 
Generate all pairwise registration ...
Done!
Done. 
---------------------------------------
Segment images using label fusion... 
Start to process segmentation...
iteration 1: 0, 
iteration 2: 0, 
iteration 3: 0, 
Done. 
---------------------------------------
Removing intermediate registration files...
Done. 
Time took: 3716

    • Results looks smooth and nice
    • TODO:
      • Affine BACK to original scale and space to the subject.
      • Compare labels to the manual labels.
Test on PHD data 1 (with BAD BCut Results): 


Data information with BRAINSCut Review Score:

  • location _analysis = /Shared/paulsen/Experiments  20130202_PREDICTHD_Results
  • _project _subject  _session = PHD_144 341 74445
  • accumben_right = 2
  • accumben_left = 2
  • caudate_right  =0
  • caudate_left  =0
  • globus_right  =1
  • globus_left  =1
  • hippocampus_right = 1
  • hippocampus_left  =1
  • putamen_right  =0
  • putamen_left =1
  • thalamus_right  =1
  • thalamus_left  =1
  • review_time  =11:34.4
  • t1_average  =2
  • labels_tissue  =0
  • t2_average  =-2
  • notes = over. hippos under.
  • first_name = Kathryn
  • last_name = Jones
  • login = scoresjoneskl 27

 

Preprocessing:
inputSpecification.csv
{'baselineImage':['/Shared/paulsen/Experiments/20130202_PREDICTHD_Results/PHD_144/0341/74445/TissueClassify/t1_average_BRAINSABC.nii.gz'],  'labelMap':'/Shared/paulsen/Experiments/20130202_PREDICTHD_Results/PHD_144/0341/74445/CleanedDenoisedRFSegmentations/allLabels_seg.nii.gz',         'brainMask':'/Shared/paulsen/Experiments/20130202_PREDICTHD_Results/PHD_144/0341/74445//TissueClassify/masked_fixed_brainlabels_seg.nii.gz'}

 
export PYTHONPATH=/ipldev/scratch/eunyokim/src/BRAINS201308/BRAINSTools/AutoWorkup/:/ipldev/scratch/eunyokim/src/nipype/nipype-0.8:/ipldev/scratch/eunyokim/src/BRAINS201308/build/lib:
export PATH=/ipldev/scratch/eunyokim/src/BRAINS201308/buildNamic/UKF-build/ukf/bin/:/ipldev/scratch/eunyokim/src/BRAINS201308/build/bin/:$PATH

python /hjohnson/HDNI/20130911_MultiLabel_Validation/MultiAtlasLabelFusionValidation/src/nipype/prepareMultiLabel.py --workflowName "PHD" \
  --inputAtlas /Shared/sinapse/scratch/eunyokim/src/BRAINS201308/build/ReferenceAtlas-build/Atlas/Atlas_20130711/template_t1_clipped.nii.gz \
  --outputDirectory . \
  --inputListFilename /Shared/johnsonhj/HDNI/20130911_MultiLabel_Validation/CrossValidation_OneSet/testingPHD/inputSpecification.csv 

exit 
MALF:
inputSpecification.xml
<?xml version="1.0"?>
<!DOCTYPE MABMISImageData>
<MABMISImageData>
  <DataPath>/Shared/johnsonhj/HDNI/20130911_MultiLabel_Validation/CrossValidation_OneSet/testingPHD/PHD_1/WarpSubjectToAtlas/WarpSubjectToAtlasWF/BFitSubjectToAtlas/</DataPath>
<NumberOfImageData>1</NumberOfImageData>
<ImageDataSets>
<Dataset ImageFile="subjectToAtlasBaselineVolume.nii.gz"/>
</ImageDataSets>
</MABMISImageData>
/ipldev/scratch/eunyokim/src/LabelFusion_Slicer/MultiAtlas/build/lib/Slicer-4.3/cli-modules/IGR3D_MABMIS_Testing \
    -i 15,10,5 \
    -s 1.5 \
    --imageListXML /Shared/johnsonhj/HDNI/20130911_MultiLabel_Validation/CrossValidation_OneSet/testingPHD/inputSpecification.xml \
    --atlasTreeXML ../outputTrainedAtlasSpecificationOnOneDir.xml
Results: Disappointing
  • Following images show the scan of " PHD_144, 0341, 74445", which 1. brain clipped and 2. affine transformed to atlas space. 
  • Line is MALF and solid is BRAINSCut on affine warped subject space. 
  • MALF does not do any good here.
  • I highly suspect an improper registration from atlas to subject. 

 

Test on PHD data 2 (with Good BCut Results):

directory: /hjohnson/HDNI/20130911_MultiLabel_Validation/CrossValidation_OneSet/testingPHD_Good

Data information:

/Shared/paulsen/Experiments20130202_PREDICTHD_ResultsPHD_045626669822222222222240:43.320-2NULLJacquieMariettamariettaj100
Results: 
 AxialSagittalCoronal
BCut
MALF
BCut
MALF

 

 

  • No labels