Diff of /src/generateROI.py [000000] .. [e9ece0]

Switch to side-by-side view

--- a
+++ b/src/generateROI.py
@@ -0,0 +1,112 @@
+""" 
+Copyright (c) 2017, Jose Dolz .All rights reserved.
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright notice,
+       this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright notice,
+       this list of conditions and the following disclaimer in the documentation
+       and/or other materials provided with the distribution.
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
+Jose Dolz. Dec, 2017.
+email: jose.dolz.upv@gmail.com
+LIVIA Department, ETS, Montreal.
+"""
+
+import sys
+import pdb
+from os.path import isfile, join
+import os
+import numpy as np
+import nibabel as nib
+import scipy.io as sio
+
+from LiviaNet.Modules.IO.loadData import load_nii
+from LiviaNet.Modules.IO.loadData import load_matlab
+from LiviaNet.Modules.IO.saveData import saveImageAsNifti
+from LiviaNet.Modules.IO.saveData import saveImageAsMatlab
+
+# NOTE: Only has been tried on nifti images. However, it should not give any error for Matlab images. 
+""" To print function usage """
+def printUsage(error_type):
+    if error_type == 1:
+        print(" ** ERROR!!: Few parameters used.")
+    else:
+        print(" ** ERROR!!: ...") # TODO
+        
+    print(" ******** USAGE ******** ")
+    print(" --- argv 1: Folder containing mr images")
+    print(" --- argv 2: Folder to save corrected label images")
+    print(" --- argv 3: Image type")
+    print(" ------------- 0: nifti format")
+    print(" ------------- 1: matlab format")
+
+def getImageImageList(imagesFolder):
+    if os.path.exists(imagesFolder):
+       imageNames = [f for f in os.listdir(imagesFolder) if isfile(join(imagesFolder, f))]
+
+    imageNames.sort()
+
+    return imageNames
+    
+def checkAnotatedLabels(argv):
+    # Number of input arguments
+    #    1: Folder containing label images
+    #    2: Folder to save corrected label images
+    #    3: Image type
+    #             0: nifti format
+    #             1: matlab format  
+    # Do some sanity checks
+    
+    if len(argv) < 3:
+        printUsage(1)
+        sys.exit()
+    
+    imagesFolder = argv[0]
+    imagesFolderdst  = argv[1]
+    imageType = int(argv[2])
+    
+    imageNames = getImageImageList(imagesFolder)
+    printFileNames = False
+    
+    for i_d in xrange(len(imageNames)) :
+        if imageType == 0:
+            imageFileName = imagesFolder + '/' + imageNames[i_d]
+            [imageData,img_proxy] = load_nii(imageFileName, printFileNames)
+        else:
+            imageFileName = imagesFolder + '/' + imageNames[i_d]
+            imageData = load_matlab(imageFileName, printFileNames)
+
+        # Find voxels different to 0
+        # NOTE: I assume voxels equal to 0 are outside my ROI (like in the skull stripped datasets)
+        idx = np.where(imageData > 0 )
+
+        # Create ROI and assign those indexes to 1
+        roiImage = np.zeros(imageData.shape,dtype=np.int8)
+        roiImage[idx] = 1
+        
+        print(" ... Saving roi...")
+        nameToSave =  imagesFolderdst + '/ROI_' + imageNames[i_d]
+        if imageType == 0: # nifti
+            imageTypeToSave = np.dtype(np.int8)
+            saveImageAsNifti(roiImage,
+                             nameToSave,
+                             imageFileName,
+                             imageTypeToSave)
+        else: # Matlab
+            # Cast to int8 for saving purposes
+            saveImageAsMatlab(labelCorrectedImage.astype('int8'),nameToSave)
+
+            
+    print " ******************************************  PROCESSING LABELS DONE  ******************************************"
+  
+   
+if __name__ == '__main__':
+   checkAnotatedLabels(sys.argv[1:])