Ejemplo n.º 1
0
 def spatial_transformation_volumetric_augmented(self, image):
     """
     The spatial image transformation with random augmentation.
     :return: The transformation.
     """
     dim = 3
     transformations_list = [translation.InputCenterToOrigin(dim),
                             scale.FitFixedAr(dim, self.image_size + [None], ignore_dim=[2])]
     if self.scale_factor[0] == 1.0 and self.scale_factor[1] == 1.0:
         # if no scale_factor, randomly shift by certain value
         transformations_list.append(translation.Random(dim, [self.image_size[0] * 0.35, self.image_size[1] * 0.35, 0.0]))
     else:
         # else, randomly move in imag size
         move_factor = [(1.0 - self.scale_factor[i]) * 0.5 for i in [0, 1]]
         transformations_list.append(translation.Random(dim, [self.image_size[0] * move_factor[0], self.image_size[1] * move_factor[1], 0]))
         transformations_list.append(scale.Fixed(dim, self.scale_factor + [1.0]))
     transformations_list.extend([flip.Random(dim, [0.5, 0.5, 0.0]),
                                  rotation.Random(dim, [0., 0., math.pi]),
                                  scale.RandomUniform(dim, 0.25, ignore_dim=[2]),
                                  scale.Random(dim, [0.25, 0.25, 0.0]),
                                  translation.OriginToOutputCenter(dim, self.image_size + [self.num_frames]),
                                  deformation.Output(dim, [6, 6, 4], [10, 10, 0], self.image_size + [self.num_frames])])
     comp = composite.Composite(dim, transformations_list,
                                name='image_transformation_comp',
                                kwparents={'image': image})
     return LambdaNode(lambda comp: sitk.DisplacementFieldTransform(sitk.TransformToDisplacementField(comp, sitk.sitkVectorFloat64, size=self.image_size + [self.num_frames])),
                       name='image_transformation',
                       kwparents={'comp': comp})
 def spatial_transformation_augmented(self, iterator, datasources, image_size):
     """
     The spatial image transformation with random augmentation.
     :param datasources: datasources dict.
     :return: The transformation.
     """
     transformation_list = []
     kwparents = {'image': datasources['image'], 'output_size': image_size}
     if self.translate_to_center_landmarks:
         kwparents['start'] = datasources['landmarks_bb_start']
         kwparents['extent'] = datasources['landmarks_bb_extent']
         transformation_list.append(translation.BoundingBoxCenterToOrigin(self.dim, None, self.image_spacing))
     elif self.generate_single_vertebrae or self.generate_single_vertebrae_heatmap:
         single_landmark = LambdaNode(lambda id_dict, landmarks: [landmarks[int(id_dict['landmark_id'])]],
                                      parents=[iterator, datasources['landmarks']])
         kwparents['landmarks'] = single_landmark
         transformation_list.append(landmark.Center(self.dim, True))
         transformation_list.append(translation.Fixed(self.dim, [0, 20, 0]))
     else:
         transformation_list.append(translation.InputCenterToOrigin(self.dim))
     if self.translate_by_random_factor:
         transformation_list.append(translation.RandomCropBoundingBox(self.dim, None, self.image_spacing))
     #    transformation_list.append(translation.RandomFactorInput(self.dim, [0, 0, 0.5], [0, 0, self.image_spacing[2] * image_size[2]]))
     transformation_list.extend([translation.Random(self.dim, [self.random_translation] * self.dim),
                                 rotation.Random(self.dim, [self.random_rotate] * self.dim),
                                 scale.RandomUniform(self.dim, self.random_scale),
                                 scale.Random(self.dim, [self.random_scale] * self.dim),
                                 flip.Random(self.dim, [0.5 if self.random_flip else 0.0, 0.0, 0.0]),
                                 translation.OriginToOutputCenter(self.dim, None, self.image_spacing),
                                 deformation.Output(self.dim, [6, 6, 6], [self.random_deformation] * self.dim, None, self.image_spacing)
                                 ])
     comp = composite.Composite(self.dim, transformation_list, name='image', kwparents=kwparents)
     return LambdaNode(lambda comp, output_size: sitk.DisplacementFieldTransform(sitk.TransformToDisplacementField(comp, sitk.sitkVectorFloat64, size=output_size, outputSpacing=self.image_spacing)),
                       name='image',
                       kwparents={'comp': comp, 'output_size': image_size})
Ejemplo n.º 3
0
 def spatial_transformation_augmented(self, image):
     """
     The spatial image transformation with random augmentation.
     :return: The transformation.
     """
     # bring image to center and fit to AR
     transformations_list = [translation.InputCenterToOrigin(self.dim),
                             scale.FitFixedAr(self.dim, self.image_size)]
     if self.scale_factor[0] == 1.0 and self.scale_factor[1] == 1.0:
         # if no scale_factor, randomly shift by certain value
         transformations_list.append(translation.Random(self.dim, [self.image_size[0] * 0.35, self.image_size[1] * 0.35]))
     else:
         # else, randomly move in imag size
         move_factor = [(1.0 - self.scale_factor[i]) * 0.5 for i in [0, 1]]
         transformations_list.append(translation.Random(self.dim, [self.image_size[0] * move_factor[0], self.image_size[1] * move_factor[1]]))
         transformations_list.append(scale.Fixed(self.dim, self.scale_factor))
     transformations_list.extend([flip.Random(self.dim, [0.5, 0.5]),
                                  rotation.Random(self.dim, [math.pi]),
                                  scale.RandomUniform(self.dim, 0.25),
                                  scale.Random(self.dim, [0.25, 0.25]),
                                  translation.OriginToOutputCenter(self.dim, self.image_size),
                                  deformation.Output(self.dim, [8, 8], 10, self.image_size)])
     comp = composite.Composite(self.dim, transformations_list,
                                name='image_transformation_comp',
                                kwparents={'image': image})
     return LambdaNode(lambda comp: sitk.DisplacementFieldTransform(sitk.TransformToDisplacementField(comp, sitk.sitkVectorFloat64, size=self.image_size)),
                       name='image_transformation',
                       kwparents={'comp': comp})
Ejemplo n.º 4
0
 def spatial_transformation_augmented(self):
     """
     The spatial image transformation with random augmentation.
     :return: The transformation.
     """
     return composite.Composite(self.dim, [
         translation.InputCenterToOrigin(self.dim),
         scale.FitFixedAr(self.dim, self.image_size),
         translation.Random(
             self.dim,
             [self.image_size[0] * 0.2, self.image_size[1] * 0.2]),
         flip.Random(self.dim, [0.5, 0.5]),
         rotation.Random(self.dim, [math.pi]),
         scale.Random(self.dim, [0.25, 0.25]),
         translation.OriginToOutputCenter(self.dim, self.image_size),
         deformation.Output(self.dim, [8, 8], 10, self.image_size)
     ])