Browse Source

gin commit from rMBP-15-Malthe.local

Modified files: 4
malthe.nielsen 4 years ago
parent
commit
97d24a1919
4 changed files with 13 additions and 16 deletions
  1. 3 3
      Example/preprocess.py
  2. 3 3
      Example/registration.py
  3. 6 9
      Example/runner.py
  4. 1 1
      Example_folder.zip

+ 3 - 3
Example/preprocess.py

@@ -30,6 +30,7 @@ def image_data_to_nii(pixdim, image_data, shrink, out_dir, file_path, save_unsca
     scale = 1/shrink
     new_dim = (round(image_dim[1] * scale), round(image_dim[0] * scale))
     new_arr = np.ndarray(new_dim + (image_data.shape[2],))
+    print(f'Pixel dimensions: {pixdim} um')
 
     for i in range(0,image_data.shape[2]):
         cur_channel = image_data[:, :, i]
@@ -37,7 +38,6 @@ def image_data_to_nii(pixdim, image_data, shrink, out_dir, file_path, save_unsca
         new_arr[:, :, i] = resized
     path_scaled, path_unscaled = get_out_paths(out_dir, Path(file_path).stem)
     nii_scaled = nib.Nifti1Image(new_arr, np.eye(4))
-    nii_scaled.header['xyzt_units'] = 3
     nii_scaled.header['pixdim'][1:3] = pixdim * shrink, pixdim * shrink
     nib.save(nii_scaled, str(path_scaled))
 
@@ -56,14 +56,14 @@ def tiff_to_nii(tif_path, out_dir, pixdim=None, shrink=10):
     tif_header = dict(tif_image.tag)
     output = np.empty(np.array(tif_image).shape + (0,))
     if not pixdim:
-        pixdim = 10e6/tif_header[282][0][0]
+        pixdim = 10e2/tif_header[282][0][0]
     for i, page in enumerate(ImageSequence.Iterator(tif_image)):
         page_data = np.expand_dims(np.array(page), 2)
         output = np.concatenate((output, page_data), 2)
     return image_data_to_nii(pixdim, output, shrink, out_dir, tif_path)
 
 
-def split_nii_channels(nii_path, out_dir=None, flip=False, mask_index=-1, bias=False):
+def split_nii_channels(nii_path, out_dir=None, flip=False, mask_index=-1, bias=True):
     if out_dir is None:
         out_dir = nii_path.parent
     nii = nib.load(str(nii_path))

+ 3 - 3
Example/registration.py

@@ -18,7 +18,7 @@ def full_registration(fixed, moving, output='full_trans.nii', transform_pre=''):
         initial_moving_transform_com=1,
         interpolation='BSpline',
         metric_weight=[0.5] * 6,
-        radius_or_number_of_bins=[4,32] * 3,
+        radius_or_number_of_bins=[4, 32] * 3,
         sampling_strategy=['Regular'] * 3,
         use_histogram_matching=True,
         winsorize_lower_quantile=0.05,
@@ -37,7 +37,7 @@ def full_registration(fixed, moving, output='full_trans.nii', transform_pre=''):
 
 
 # A faster rigid registration
-def rigid_registration(fixed, moving, output='affine_trans.nii', transform_pre=''):
+def rigid_registration(fixed, moving, output='rigid_trans.nii', transform_pre=''):
     ants.Registration(
         dimension=2,
         transforms=['Rigid'],
@@ -47,7 +47,7 @@ def rigid_registration(fixed, moving, output='affine_trans.nii', transform_pre='
         convergence_threshold=[1.e-6],
         number_of_iterations=[[1000, 1000, 1000]],
         shrink_factors=[[32, 16, 8]],
-        initial_moving_transform_com=0,
+        initial_moving_transform_com=1,
         interpolation='BSpline',
         metric_weight=[1],
         radius_or_number_of_bins=[32],

+ 6 - 9
Example/runner.py

@@ -34,7 +34,7 @@ def find_optimal_index(slice_path, template_path, approx, temporary_directory, d
         nib.save(nib.Nifti1Image(registered_data, np.eye(4)), registered_loc)
 
         mutualinfo = tools.mutual_info_mask(template_data, registered_data)
-        norm_factor = scipy.stats.norm.pdf(i-approx+dist, dist, dist*2) / scipy.stats.norm.pdf(dist, dist, dist*2)
+        norm_factor = scipy.stats.norm.pdf(i-approx+dist, dist, dist*10) / scipy.stats.norm.pdf(dist, dist, dist*10)
         dice_coef = tools.dice_coef(template_data, registered_data)
         weights.append((i, norm_factor * (0.7 * mutualinfo + 0.3 * dice_coef)))
 
@@ -47,7 +47,6 @@ def apply_transform(segmentation, fixed, index, out_dir, temporary_directory):
 
     seg_slice_loc = out_dir / "segment_slice.nii" 
     tools.save_slice(str(segmentation), str(seg_slice_loc), index, np.eye(4), nib.load(str(fixed)).header)
-    #  post_transform_loc = out_dir / f'{seg_slice_loc.stem}_t.nii'
     post_transform_loc = out_dir / f'Segmentation.nii'
 
     template_slice_loc = str(temporary_directory / f't_slice{index}.nii')
@@ -68,14 +67,10 @@ def apply_transform(segmentation, fixed, index, out_dir, temporary_directory):
     return post_transform_loc
 
 def generate_segmentation(slice_path, segment_path, template_path, approx_index, dapi, output_directory):     
-        
+    tools.create_dir(output_directory)
+
     if slice_path.endswith('.tiff') or slice_path.endswith('.tif'):
         Image.MAX_IMAGE_PIXELS = None
-        #  tif_image = Image.open(slice_path)
-        #  ch_nm = (list(tif_image.tag_v2[270].split('='))[2])
-        #  if int(ch_nm[0]) < dapi:
-        #      print(f'DAPI channel out of range, max range is {ch_nm[0]} channels')
-        #      sys.exit()
         tif_path = preprocess.tiff_to_nii(slice_path, output_directory)
         slice_path = tif_path[0]
     elif not slice_path.endswith(".nii"):
@@ -84,15 +79,17 @@ def generate_segmentation(slice_path, segment_path, template_path, approx_index,
         
     out_subdir = Path(output_directory) / Path(slice_path).stem.replace(' ', '_').replace(',','_').replace('.','')
     tools.create_dir(out_subdir)
-    temporary_directory = Path(output_directory) / Path(out_subdir) / 'tmp'
+    temporary_directory = Path(out_subdir) / 'tmp'
     tools.create_dir(temporary_directory)
     channel_paths = preprocess.split_nii_channels(slice_path, out_subdir, True, dapi-1)
     optimal_index = find_optimal_index(channel_paths[dapi-1], template_path, approx_index, temporary_directory)
     seg_loc = apply_transform(segment_path, channel_paths[dapi-1], optimal_index, out_subdir, temporary_directory)
+    
     tools.remove_dir(temporary_directory)
     os.remove(Path(out_subdir) / 'segment_slice.nii')
     os.rename(Path(out_subdir) / 'TemplateSlice_Composite.h5', Path(out_subdir) / 'Transformation_Composite.h5')
     os.rename(Path(out_subdir) / 'TemplateSlice_InverseComposite.h5', Path(out_subdir) / 'Transformation_InverseComposite.h5')
+    
     return seg_loc
 
 if __name__ == "__main__":

+ 1 - 1
Example_folder.zip

@@ -1 +1 @@
-/annex/objects/MD5-s504090068--676cd1c25e1d9c8b2ddd0062ea84fc88
+/annex/objects/MD5-s504089965--c0f085e62bc44c1a7fa5dd09bf02fd09