Extracts region features from MuTIsWSIRunner ouput.
| 639 | |
| 640 | |
| 641 | class SlideRegionFeatureExtractor(object): |
| 642 | """ |
| 643 | Extracts region features from MuTIsWSIRunner ouput. |
| 644 | """ |
| 645 | def __init__( |
| 646 | self, |
| 647 | slide_dir: str, |
| 648 | output_dir: str, |
| 649 | *, |
| 650 | feature_sets: Set[str] = None, |
| 651 | region_prop_names: Iterable[str] = None, |
| 652 | neighborhood_distances: Iterable[int] = (64, 128), |
| 653 | slide_name: str = None, |
| 654 | mpp: float = 2.0, |
| 655 | monitor: str = "", |
| 656 | logger: Any = None, |
| 657 | _discrete_regions: Iterable[str] = ('TUMOR', 'TILS'), |
| 658 | _relevant_regions: Iterable[str] = None, |
| 659 | _relevant_nuclei: Iterable[str] = None, |
| 660 | _min_discrete_region_area: int = 64 ** 2, |
| 661 | _min_region_hole_area: Union[int, None] = 24 ** 2, |
| 662 | _region_class_map: Dict[str, str] = None, |
| 663 | _nucleus_class_map: Dict[str, str] = None, |
| 664 | ): |
| 665 | """ |
| 666 | This represents the slide as a feature matrix summarizing |
| 667 | its semantic segmantation mask. |
| 668 | """ |
| 669 | self.slide_dir = slide_dir |
| 670 | self.output_dir = output_dir |
| 671 | self.slide_name = slide_name or os.path.basename(slide_dir) |
| 672 | self.mpp = mpp |
| 673 | self.monitor = monitor |
| 674 | self.logger = logger or logging.getLogger(__name__) |
| 675 | |
| 676 | self.features_aware_of_center = { |
| 677 | "nuclear_composition", |
| 678 | } |
| 679 | self.features_aware_of_surround = { |
| 680 | "neighborhood_composition_regions", |
| 681 | "neighborhood_composition_nuclei", |
| 682 | } |
| 683 | self.features_aware_of_cs = self.features_aware_of_center.union( |
| 684 | self.features_aware_of_surround |
| 685 | ) |
| 686 | available_feature_sets = { |
| 687 | "morphology", |
| 688 | }.union(self.features_aware_of_cs) |
| 689 | self.feature_sets = feature_sets or available_feature_sets |
| 690 | not_recognized = self.feature_sets.difference(available_feature_sets) |
| 691 | assert len(not_recognized) < 1, ( |
| 692 | "These feature sets you requested are not recognized: " |
| 693 | f"{not_recognized}" |
| 694 | ) |
| 695 | self._region_prop_names = region_prop_names or ( |
| 696 | 'label', |
| 697 | 'area', |
| 698 | 'convex_area', |
no outgoing calls
no test coverage detected