def execute(self) -> structure.BrainImage: """Extracts features from an image. Returns: structure.BrainImage: The image with extracted features. """ if self.coordinates_feature: atlas_coordinates = fltr_feat.AtlasCoordinates() self.img.feature_images[FeatureImageTypes.ATLAS_COORD] = \ atlas_coordinates.execute(self.img.images[structure.BrainImageTypes.T1]) if self.intensity_feature: self.img.feature_images[ FeatureImageTypes.T1_INTENSITY] = self.img.images[ structure.BrainImageTypes.T1] self.img.feature_images[ FeatureImageTypes.T2_INTENSITY] = self.img.images[ structure.BrainImageTypes.T2] if self.gradient_intensity_feature: # compute gradient magnitude images self.img.feature_images[FeatureImageTypes.T1_GRADIENT_INTENSITY] = \ sitk.GradientMagnitude(self.img.images[structure.BrainImageTypes.T1]) self.img.feature_images[FeatureImageTypes.T2_GRADIENT_INTENSITY] = \ sitk.GradientMagnitude(self.img.images[structure.BrainImageTypes.T2]) self._generate_feature_matrix() return self.img
def execute(self) -> structure.BrainImage: """Extracts features from an image. Returns: structure.BrainImage: The image with extracted features. """ # todo: add T2w features warnings.warn('No features from T2-weighted image extracted.') if self.coordinates_feature: atlas_coordinates = fltr_feat.AtlasCoordinates() self.img.feature_images[FeatureImageTypes.ATLAS_COORD] = \ atlas_coordinates.execute(self.img.images[structure.BrainImageTypes.T1w]) if self.intensity_feature: self.img.feature_images[FeatureImageTypes.T1w_INTENSITY] = self.img.images[structure.BrainImageTypes.T1w] if self.gradient_intensity_feature: # compute gradient magnitude images self.img.feature_images[FeatureImageTypes.T1w_GRADIENT_INTENSITY] = \ sitk.GradientMagnitude(self.img.images[structure.BrainImageTypes.T1w]) self._generate_feature_matrix() return self.img
def execute(self) -> structure.BrainImage: """Extracts features from an image. Returns: structure.BrainImage: The image with extracted features. """ if self.coordinates_feature: atlas_coordinates = fltr_feat.AtlasCoordinates() self.img.feature_images[FeatureImageTypes.ATLAS_COORD] = \ atlas_coordinates.execute(self.img.images[structure.BrainImageTypes.T1]) if self.intensity_feature: self.img.feature_images[FeatureImageTypes.T1_INTENSITY] = self.img.images[structure.BrainImageTypes.T1] self.img.feature_images[FeatureImageTypes.T2_INTENSITY] = self.img.images[structure.BrainImageTypes.T2] if self.gradient_intensity_feature: # compute gradient magnitude images self.img.feature_images[FeatureImageTypes.T1_GRADIENT_INTENSITY] = \ sitk.GradientMagnitude(self.img.images[structure.BrainImageTypes.T1]) self.img.feature_images[FeatureImageTypes.T2_GRADIENT_INTENSITY] = \ sitk.GradientMagnitude(self.img.images[structure.BrainImageTypes.T2]) if self.hog_feature: hog_feat_T1 = fltr_feat.Hog_descriptor() self.img.feature_images[FeatureImageTypes.T1_HOG] = \ hog_feat_T1.execute(self.img.images[structure.BrainImageTypes.T1]) hog_feat_T2 = fltr_feat.Hog_descriptor() self.img.feature_images[FeatureImageTypes.T2_HOG] = \ hog_feat_T2.execute(self.img.images[structure.BrainImageTypes.T2]) if self.secondOrder_feature: result_T1 = fltr_feat.secondOrderFeatures() self.img.feature_images[FeatureImageTypes.T1_SECOND_ORDER] = \ result_T1.execute(self.img.images[structure.BrainImageTypes.T1]) result_T2 = fltr_feat.secondOrderFeatures() self.img.feature_images[FeatureImageTypes.T2_SECOND_ORDER] = \ result_T2.execute(self.img.images[structure.BrainImageTypes.T2]) if self.canny_feature: # compute gradient magnitude images self.img.feature_images[FeatureImageTypes.T1_CANNY] = \ sitk.CannyEdgeDetection(self.img.images[structure.BrainImageTypes.T1]) self.img.feature_images[FeatureImageTypes.T2_CANNY] = \ sitk.CannyEdgeDetection(self.img.images[structure.BrainImageTypes.T2]) self._generate_feature_matrix() return self.img
def execute(self) -> structure.BrainImage: """Extracts features from an image. Returns: structure.BrainImage: The image with extracted features. """ # dir 'features' is a sub-dir of a given image, containing image-features self.feature_path = os.path.join(self.img.path, 'features') if self.save_features: if self.coordinates_feature: atlas_coordinates = fltr_feat.AtlasCoordinates() self.img.feature_images[FeatureImageTypes.ATLAS_COORD] = \ atlas_coordinates.execute(self.img.images[structure.BrainImageTypes.T1w]) if self.intensity_feature: self.img.feature_images[ FeatureImageTypes.T1w_INTENSITY] = self.img.images[ structure.BrainImageTypes.T1w] self.img.feature_images[ FeatureImageTypes.T2w_INTENSITY] = self.img.images[ structure.BrainImageTypes.T2w] if self.gradient_intensity_feature: # compute gradient magnitude images self.img.feature_images[FeatureImageTypes.T1w_GRADIENT_INTENSITY] = \ sitk.GradientMagnitude(self.img.images[structure.BrainImageTypes.T1w]) self.img.feature_images[FeatureImageTypes.T2w_GRADIENT_INTENSITY] = \ sitk.GradientMagnitude(self.img.images[structure.BrainImageTypes.T2w]) if self.first_order_feature: # compute first order features fof_T1w_features = firstorder.RadiomicsFirstOrder( self.img.images[structure.BrainImageTypes.T1w], self.img.images[structure.BrainImageTypes.BrainMask], voxelBased=True) fof_T1w_features.enabledFeatures = self.first_order_feature_parameters self.img.feature_images[ FeatureImageTypes.T1w_FOF] = fof_T1w_features.execute() self.img.feature_images[ FeatureImageTypes.T1w_FOF] = sitk.Compose( list(self.img.feature_images[ FeatureImageTypes.T1w_FOF].values())) self.img.feature_images[ FeatureImageTypes.T1w_FOF].CopyInformation( self.img.images[structure.BrainImageTypes.T1w]) fof_T2w_features = firstorder.RadiomicsFirstOrder( self.img.images[structure.BrainImageTypes.T2w], self.img.images[structure.BrainImageTypes.BrainMask], voxelBased=True) fof_T2w_features.enabledFeatures = self.first_order_feature_parameters self.img.feature_images[ FeatureImageTypes.T2w_FOF] = fof_T2w_features.execute() self.img.feature_images[ FeatureImageTypes.T2w_FOF] = sitk.Compose( list(self.img.feature_images[ FeatureImageTypes.T2w_FOF].values())) self.img.feature_images[ FeatureImageTypes.T2w_FOF].CopyInformation( self.img.images[structure.BrainImageTypes.T2w]) if self.GLCM_features: # compute GLCM features glcmT1w_features = glcm.RadiomicsGLCM( self.img.images[structure.BrainImageTypes.T1w], self.img.images[structure.BrainImageTypes.BrainMask], voxelBased=True) glcmT1w_features.enabledFeatures = self.GLCM_features_parameters self.img.feature_images[ FeatureImageTypes.T1w_GLCM] = glcmT1w_features.execute() self.img.feature_images[ FeatureImageTypes.T1w_GLCM] = sitk.Compose( list(self.img.feature_images[ FeatureImageTypes.T1w_GLCM].values())) self.img.feature_images[ FeatureImageTypes.T1w_GLCM].CopyInformation( self.img.images[structure.BrainImageTypes.T1w]) glcmT2w_features = glcm.RadiomicsGLCM( self.img.images[structure.BrainImageTypes.T2w], self.img.images[structure.BrainImageTypes.BrainMask], voxelBased=True) glcmT2w_features.enabledFeatures = self.GLCM_features_parameters self.img.feature_images[ FeatureImageTypes.T2w_GLCM] = glcmT2w_features.execute() self.img.feature_images[ FeatureImageTypes.T2w_GLCM] = sitk.Compose( list(self.img.feature_images[ FeatureImageTypes.T2w_GLCM].values())) self.img.feature_images[ FeatureImageTypes.T2w_GLCM].CopyInformation( self.img.images[structure.BrainImageTypes.T2w]) if self.HOG_feature: # compute 3D-HOG features with GPU support hog_features_T1w = fltr_hog.HOGExtractorGPU( self.img.images[structure.BrainImageTypes.T1w]) self.img.feature_images[FeatureImageTypes.T1w_HOG] = \ hog_features_T1w.execute(self.img.images[structure.BrainImageTypes.T1w]) hog_features_T2w = fltr_hog.HOGExtractorGPU( self.img.images[structure.BrainImageTypes.T1w]) self.img.feature_images[FeatureImageTypes.T2w_HOG] = \ hog_features_T2w.execute(self.img.images[structure.BrainImageTypes.T2w]) else: for _, name in enumerate(FeatureImageTypes): try: self.img.feature_images[name] = \ sitk.ReadImage(os.path.join(self.feature_path, name.name + '.nii.gz'), sitk.sitkVectorFloat32) study_features = [ FeatureImageTypes.T1w_FOF, FeatureImageTypes.T2w_FOF, FeatureImageTypes.T1w_HOG, FeatureImageTypes.T2w_HOG, FeatureImageTypes.T1w_GLCM, FeatureImageTypes.T2w_GLCM ] if name in study_features: enabeled_features_idx = [ i for i, x in enumerate( list(self.first_order_feature_parameters. values())) if x == True ] enabeled_features = [ sitk.VectorIndexSelectionCast( self.img.feature_images[name], j) for j in enabeled_features_idx ] self.img.feature_images[name] = sitk.Compose( enabeled_features, sitk.sitkVectorFloat32) except RuntimeError: pass if self.save_features: os.makedirs(self.feature_path, exist_ok=True) for _, name in enumerate(FeatureImageTypes): try: sitk.WriteImage( self.img.feature_images[name], os.path.join(self.feature_path, name.name + '.nii.gz')) except KeyError: pass self._generate_feature_matrix() return self.img
def execute(self) -> structure.BrainImage: """Extracts features from an image. Returns: structure.BrainImage: The image with extracted features. """ # todo: add T2w features (Add T2w to the "self" below) # warnings.warn('No features from T2-weighted image extracted.') if self.coordinates_feature: atlas_coordinates = fltr_feat.AtlasCoordinates() self.img.feature_images[FeatureImageTypes.ATLAS_COORD] = \ atlas_coordinates.execute(self.img.images[structure.BrainImageTypes.T1w]) # Don't need for Atlas (t1 and t2 already aligned) self.img.feature_images[FeatureImageTypes.ATLAS_COORD] = \ atlas_coordinates.execute(self.img.images[structure.BrainImageTypes.T2w]) if self.intensity_feature: self.img.feature_images[ FeatureImageTypes.T1w_INTENSITY] = self.img.images[ structure.BrainImageTypes.T1w] self.img.feature_images[ FeatureImageTypes.T2w_INTENSITY] = self.img.images[ structure.BrainImageTypes.T2w] if self.gradient_intensity_feature: # compute gradient magnitude images self.img.feature_images[FeatureImageTypes.T1w_GRADIENT_INTENSITY] = \ sitk.GradientMagnitude(self.img.images[structure.BrainImageTypes.T1w]) self.img.feature_images[FeatureImageTypes.T2w_GRADIENT_INTENSITY] = \ sitk.GradientMagnitude(self.img.images[structure.BrainImageTypes.T2w]) #Atlas features if self.atlas_feature_grey_matter: self.img.feature_images[ FeatureImageTypes.Atlas_Grey_matter] = sitk.ReadImage( 'C:/Users/Admin/PycharmProjects/MyMIALab/bin/custom_atlas_result/grey_matter_map_no_threshold.nii' ) if self.atlas_feature_white_matter: self.img.feature_images[ FeatureImageTypes.Atlas_White_matter] = sitk.ReadImage( 'C:/Users/Admin/PycharmProjects/MyMIALab/bin/custom_atlas_result/white_matter_map_no_threshold.nii' ) if self.atlas_feature_thalamus: self.img.feature_images[ FeatureImageTypes.Atlas_Thalamus] = sitk.ReadImage( 'C:/Users/Admin/PycharmProjects/MyMIALab/bin/custom_atlas_result/thalamus_map_no_threshold.nii' ) if self.atlas_feature_amygdala: self.img.feature_images[ FeatureImageTypes.Atlas_Amygdala] = sitk.ReadImage( 'C:/Users/Admin/PycharmProjects/MyMIALab/bin/custom_atlas_result/amygdala_map_no_threshold.nii' ) if self.atlas_feature_hippocampus: self.img.feature_images[ FeatureImageTypes.Atlas_Hippocampus] = sitk.ReadImage( 'C:/Users/Admin/PycharmProjects/MyMIALab/bin/custom_atlas_result/hippocampus_map_no_threshold.nii' ) self._generate_feature_matrix() return self.img