Exemplo n.º 1
0
    def segment(self, model: SegModel, tissue: Tissue, use_rms: bool = False):
        """Segment tissue in scan.

        Args:
            model (SegModel): Model to use for segmenting scans.
            tissue (Tissue): The tissue to segment.
            use_rms (`bool`, optional): Use root-mean-square of echos for segmentation (preferred). Defaults to `False`.

        Returns:
            MedicalVolume: Binary mask for segmented region.
        """
        # Use first echo for segmentation.
        logging.info("Segmenting {}...".format(tissue.FULL_NAME))

        if use_rms:
            segmentation_volume = self.calc_rms()
        else:
            segmentation_volume = self.volumes[0]

        # Segment tissue and add it to list.
        mask = model.generate_mask(segmentation_volume)
        tissue.set_mask(mask)

        self.__add_tissue__(tissue)

        return mask
Exemplo n.º 2
0
    def segment(self, model: SegModel, tissue: Tissue, use_rss: bool = False):
        """Segment tissue in scan.

        Args:
            model (SegModel): Model to use for segmenting scans.
            tissue (Tissue): The tissue to segment.
            use_rss (`bool`, optional): If ``True``, use root-sum-of-squares (RSS) of
                echos for segmentation (preferred for built-in methods).
                If ``False``, use first echo for segmentation.

        Returns:
            MedicalVolume: Binary mask for segmented region.
        """
        tissue_names = (
            ", ".join([t.FULL_NAME for t in tissue])
            if isinstance(tissue, Sequence)
            else tissue.FULL_NAME
        )
        logging.info(f"Segmenting {tissue_names}...")

        if use_rss:
            segmentation_volume = self.calc_rss()
        else:
            # Use first echo for segmentation.
            segmentation_volume = self.volumes[0]

        # Segment tissue and add it to list.
        mask = model.generate_mask(segmentation_volume)
        if isinstance(mask, dict):
            if not isinstance(tissue, Sequence):
                tissue = [tissue]
            for abbreviation, tis in zip([t.STR_ID for t in tissue], tissue):
                tis.set_mask(mask[abbreviation])
                self.__add_tissue__(tis)
        else:
            assert isinstance(tissue, Tissue)
            tissue.set_mask(mask)
            self.__add_tissue__(tissue)

        return mask