Extracts nuclear features from MuTIsWSIRunner ouput.
| 1373 | |
| 1374 | |
| 1375 | class SlideNucleiFeatureExtractor(object): |
| 1376 | """ |
| 1377 | Extracts nuclear features from MuTIsWSIRunner ouput. |
| 1378 | """ |
| 1379 | def __init__( |
| 1380 | self, |
| 1381 | slide_dir: str, |
| 1382 | output_dir: str, |
| 1383 | *, |
| 1384 | feature_sets: Set[str] = None, |
| 1385 | slide_name: str = None, |
| 1386 | monitor: str = "", |
| 1387 | logger: Any = None, |
| 1388 | kdtree_kwargs: dict = None, |
| 1389 | ripleyk_radii: Iterable[Union[int, float]] = None, |
| 1390 | additional_ripleyk_kwargs: dict = None, |
| 1391 | topk_salient_rois: int = 128, |
| 1392 | _roi_side: int = 1024, |
| 1393 | _min_nucl_size: int = 5, |
| 1394 | _nucleus_superclasses: Iterable[str] = None, |
| 1395 | ): |
| 1396 | """ |
| 1397 | This summarizes the slide as a nuclear feature matrix, as well |
| 1398 | as some basic region pixel counts. |
| 1399 | """ |
| 1400 | self.slide_dir = slide_dir |
| 1401 | self.output_dir = output_dir |
| 1402 | self.slide_name = slide_name or os.path.basename(slide_dir) |
| 1403 | self.monitor = monitor |
| 1404 | self.logger = logger or logging.getLogger(__name__) |
| 1405 | self.kdtree_kwargs = kdtree_kwargs |
| 1406 | self.ripleyk_radii = ripleyk_radii or (32, 64, 128) |
| 1407 | self.additional_ripleyk_kwargs = additional_ripleyk_kwargs or {} |
| 1408 | assert max(self.ripleyk_radii) <= _roi_side / 2, ( |
| 1409 | "Maximum Ripley's K radius must be less than half the ROI side." |
| 1410 | ) |
| 1411 | self.topk_salient_rois = topk_salient_rois |
| 1412 | |
| 1413 | self._roi_side = _roi_side |
| 1414 | self._nucleus_superclasses = _nucleus_superclasses or [ |
| 1415 | 'EpithelialSuperclass', |
| 1416 | 'StromalSuperclass', |
| 1417 | 'TILsSuperclass', |
| 1418 | ] |
| 1419 | |
| 1420 | # pipeline of methods, each gets a different set of features |
| 1421 | self.features_using_nuclei_graph = { |
| 1422 | "nuclear_ripleyk_self_vs_self", |
| 1423 | "nuclear_ripleyk_self_vs_other", |
| 1424 | "orientation_entropies", |
| 1425 | } |
| 1426 | available_feature_sets = { |
| 1427 | "saliency", |
| 1428 | "region_areas", |
| 1429 | "nuclei_counts", |
| 1430 | "tils_score_variants", |
| 1431 | "fibroblast_activation", |
| 1432 | "tils_activation", |
no outgoing calls
no test coverage detected