Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #4
0
    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
Beispiel #5
0
    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