def it_knows_its_tissue_ratio( self, request, RgbToGrayscale_, OtsuThreshold_, BinaryDilation_, BinaryFillHoles_, ): _tile_tissue_mask_filters = property_mock(request, _TileFiltersComposition, "tissue_mask_filters") filters = Compose([ RgbToGrayscale_, OtsuThreshold_, BinaryDilation_, BinaryFillHoles_ ]) _tile_tissue_mask_filters.return_value = filters _call = method_mock(request, Compose, "__call__") _call.return_value = COMPLEX_MASK image = PILIMG.RGB_RANDOM_COLOR_10X10 tile = Tile(image, None, 0) tissue_ratio = tile.tissue_ratio _tile_tissue_mask_filters.assert_called_once() _call.assert_called_once_with(filters, image) assert type(tissue_ratio) == float assert tissue_ratio == 0.61
def it_knows_its_mask( self, request, tmpdir, RgbToGrayscale_, OtsuThreshold_, BinaryDilation_, RemoveSmallHoles_, ): slide, _ = base_test_slide(tmpdir, PILIMG.RGBA_COLOR_500X500_155_249_240) main_tissue_areas_mask_filters_ = property_mock( request, _SlideFiltersComposition, "tissue_mask_filters") expected_mask = [ [True, True], [False, True], ] remove_small_objects = method_mock(request, RemoveSmallObjects, "__call__") remove_small_objects.return_value = expected_mask main_tissue_areas_mask_filters_.return_value = Compose([ RgbToGrayscale_, OtsuThreshold_, BinaryDilation_, RemoveSmallHoles_, RemoveSmallObjects(), ]) tissue_mask = TissueMask() binary_mask = tissue_mask(slide) assert binary_mask == expected_mask
def it_knows_its_mask( self, request, tmpdir, RgbToGrayscale_, OtsuThreshold_, BinaryDilation_, RemoveSmallHoles_, RemoveSmallObjects_, ): slide, _ = base_test_slide(tmpdir, PILIMG.RGBA_COLOR_500X500_155_249_240) regions = [ Region(index=0, area=33, bbox=(0, 0, 2, 2), center=(0.5, 0.5), coords=None) ] main_tissue_areas_mask_filters_ = property_mock( request, _SlideFiltersComposition, "tissue_mask_filters") main_tissue_areas_mask_filters_.return_value = Compose([ RgbToGrayscale_, OtsuThreshold_, BinaryDilation_, RemoveSmallHoles_, RemoveSmallObjects_, ]) regions_from_binary_mask = function_mock( request, "histolab.masks.regions_from_binary_mask") regions_from_binary_mask.return_value = regions biggest_regions_ = method_mock(request, BiggestTissueBoxMask, "_regions", autospec=False) biggest_regions_.return_value = regions region_coordinates_ = function_mock( request, "histolab.masks.region_coordinates") region_coordinates_.return_values = CP(0, 0, 2, 2) rectangle_to_mask_ = function_mock(request, "histolab.util.rectangle_to_mask") rectangle_to_mask_((1000, 1000), CP(0, 0, 2, 2)).return_value = [ [True, True], [False, True], ] biggest_mask_tissue_box = BiggestTissueBoxMask() binary_mask = biggest_mask_tissue_box(slide) np.testing.assert_almost_equal(binary_mask, np.zeros((500, 500))) region_coordinates_.assert_called_once_with(regions[0]) biggest_regions_.assert_called_once_with(regions, n=1) rectangle_to_mask_.assert_called_once_with((1000, 1000), CP(x_ul=0, y_ul=0, x_br=2, y_br=2))
def it_knows_its_biggest_tissue_box_mask( self, request, tmpdir, RgbToGrayscale_, OtsuThreshold_, BinaryDilation_, RemoveSmallHoles_, RemoveSmallObjects_, ): tmp_path_ = tmpdir.mkdir("myslide") image = PILIMG.RGBA_COLOR_500X500_155_249_240 image.save(os.path.join(tmp_path_, "mywsi.png"), "PNG") slide_path = os.path.join(tmp_path_, "mywsi.png") slide = Slide(slide_path, "processed") regions = [ Region(index=0, area=33, bbox=(0, 0, 2, 2), center=(0.5, 0.5)) ] main_tissue_areas_mask_filters_ = property_mock( request, _SlideFiltersComposition, "tissue_mask_filters") main_tissue_areas_mask_filters_.return_value = Compose([ RgbToGrayscale_, OtsuThreshold_, BinaryDilation_, RemoveSmallHoles_, RemoveSmallObjects_, ]) regions_from_binary_mask = function_mock( request, "histolab.slide.regions_from_binary_mask") regions_from_binary_mask.return_value = regions biggest_regions_ = method_mock(request, Slide, "_biggest_regions", autospec=False) biggest_regions_.return_value = regions region_coordinates_ = function_mock( request, "histolab.slide.region_coordinates") region_coordinates_.return_values = CP(0, 0, 2, 2) polygon_to_mask_array_ = function_mock( request, "histolab.util.polygon_to_mask_array") polygon_to_mask_array_((1000, 1000), CP(0, 0, 2, 2)).return_value = [ [True, True], [False, True], ] biggest_mask_tissue_box = slide.biggest_tissue_box_mask region_coordinates_.assert_called_once_with(regions[0]) biggest_regions_.assert_called_once_with(regions, n=1) polygon_to_mask_array_.assert_called_once_with((1000, 1000), CP(x_ul=0, y_ul=0, x_br=2, y_br=2)) np.testing.assert_almost_equal(biggest_mask_tissue_box, np.zeros((500, 500)))
def it_knows_its_tissue_mask( self, request, RgbToGrayscale_, OtsuThreshold_, BinaryDilation_, BinaryFillHoles_, ): BinaryFillHoles_.return_value = np.zeros((50, 50)) filters = Compose([ RgbToGrayscale_, OtsuThreshold_, BinaryDilation_, BinaryFillHoles_ ]) image = PILIMG.RGBA_COLOR_50X50_155_0_0 tile = Tile(image, None, 0) tissue_mask = tile._tissue_mask(filters) assert tissue_mask.shape == (50, 50)
def it_calls_tile_tissue_mask_filters( self, request, RgbToGrayscale_, OtsuThreshold_, BinaryDilation_, BinaryFillHoles_, ): _tissue_mask_filters = property_mock(request, _TileFiltersComposition, "tissue_mask_filters") BinaryFillHoles_.return_value = np.zeros((50, 50)) _tissue_mask_filters.return_value = Compose([ RgbToGrayscale_, OtsuThreshold_, BinaryDilation_, BinaryFillHoles_ ]) image = PILIMG.RGBA_COLOR_50X50_155_0_0 tile = Tile(image, None, 0) tile._has_only_some_tissue() _tissue_mask_filters.assert_called_once() assert type(tile._has_only_some_tissue()) == np.bool_