Esempio n. 1
0
    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))
Esempio n. 4
0
    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)))
Esempio n. 5
0
    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)
Esempio n. 6
0
    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_