From 3164a39a233bad629a5cb8581789ad3eba9798db Mon Sep 17 00:00:00 2001 From: ernestoarbitrio Date: Tue, 22 Sep 2020 14:11:02 +0200 Subject: [PATCH] tests: cover imf 100% --- src/histolab/data/__init__.py | 2 +- .../filters/image_filters_functional.py | 2 + ...gnostic-slide-thumb-hsv-pen-marks-mask.npy | Bin 0 -> 245828 bytes ...gnostic-slide-thumb-rgb-pen-marks-mask.npy | Bin 0 -> 245828 bytes ...slide-thumb-rgba1-green-ch-filter-mask.npy | Bin 0 -> 245828 bytes ...slide-thumb-rgba2-green-ch-filter-mask.npy | Bin 0 -> 245828 bytes ...slide-thumb-rgba3-green-ch-filter-mask.npy | Bin 0 -> 245828 bytes ...slide-thumb-rgba4-green-ch-filter-mask.npy | Bin 0 -> 245828 bytes ...ostic-slide-thumb-ycbcr-pen-marks-mask.npy | Bin 0 -> 245828 bytes .../tcga-lung-rgb-pen-marks-mask.npy | Bin 0 -> 262272 bytes tests/integration/test_image_filters.py | 110 ++++++++++++++---- 11 files changed, 92 insertions(+), 22 deletions(-) create mode 100644 tests/expectations/mask-arrays/diagnostic-slide-thumb-hsv-pen-marks-mask.npy create mode 100644 tests/expectations/mask-arrays/diagnostic-slide-thumb-rgb-pen-marks-mask.npy create mode 100644 tests/expectations/mask-arrays/diagnostic-slide-thumb-rgba1-green-ch-filter-mask.npy create mode 100644 tests/expectations/mask-arrays/diagnostic-slide-thumb-rgba2-green-ch-filter-mask.npy create mode 100644 tests/expectations/mask-arrays/diagnostic-slide-thumb-rgba3-green-ch-filter-mask.npy create mode 100644 tests/expectations/mask-arrays/diagnostic-slide-thumb-rgba4-green-ch-filter-mask.npy create mode 100644 tests/expectations/mask-arrays/diagnostic-slide-thumb-ycbcr-pen-marks-mask.npy create mode 100644 tests/expectations/mask-arrays/tcga-lung-rgb-pen-marks-mask.npy diff --git a/src/histolab/data/__init__.py b/src/histolab/data/__init__.py index b0f0d4fb..6c0036a7 100644 --- a/src/histolab/data/__init__.py +++ b/src/histolab/data/__init__.py @@ -232,7 +232,7 @@ def _load_svs(filename: str) -> Tuple[openslide.OpenSlide, str]: """ try: svs = openslide.open_slide(_fetch(filename)) - except openslide.OpenSlideError: + except openslide.OpenSlideError: # pragma: no cover raise openslide.OpenSlideError( "Your wsi has something broken inside, a doctor is needed" ) diff --git a/src/histolab/filters/image_filters_functional.py b/src/histolab/filters/image_filters_functional.py index d587a00b..4b541bc1 100644 --- a/src/histolab/filters/image_filters_functional.py +++ b/src/histolab/filters/image_filters_functional.py @@ -813,6 +813,8 @@ def pen_marks(img: PIL.Image.Image) -> np.ndarray: np.ndarray Boolean NumPy array representing the mask with the pen marks filtered out. """ + if img.mode == "RGBA": + raise ValueError("Image input must be RGB, got RGBA.") np_img = np.array(img) np_hsv = sk_color.convert_colorspace(np_img, "RGB", "HSV") hue = np_hsv[:, :, 0] diff --git a/tests/expectations/mask-arrays/diagnostic-slide-thumb-hsv-pen-marks-mask.npy b/tests/expectations/mask-arrays/diagnostic-slide-thumb-hsv-pen-marks-mask.npy new file mode 100644 index 0000000000000000000000000000000000000000..c0a88c1bbf3c602e7bf1f2159d6825e28b3bf101 GIT binary patch literal 245828 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 literal 0 HcmV?d00001 diff --git a/tests/expectations/mask-arrays/diagnostic-slide-thumb-rgb-pen-marks-mask.npy b/tests/expectations/mask-arrays/diagnostic-slide-thumb-rgb-pen-marks-mask.npy new file mode 100644 index 0000000000000000000000000000000000000000..5900a5204a03b614c4c5895934268ed4590f9cca GIT binary patch literal 245828 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 E5AR=Q^#A|> literal 0 HcmV?d00001 diff --git a/tests/expectations/mask-arrays/diagnostic-slide-thumb-rgba1-green-ch-filter-mask.npy b/tests/expectations/mask-arrays/diagnostic-slide-thumb-rgba1-green-ch-filter-mask.npy new file mode 100644 index 0000000000000000000000000000000000000000..66c81dee079321354faaefb0efac10084031fdc9 GIT binary patch literal 245828 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 G1OE?QdCchm literal 0 HcmV?d00001 diff --git a/tests/expectations/mask-arrays/diagnostic-slide-thumb-rgba2-green-ch-filter-mask.npy b/tests/expectations/mask-arrays/diagnostic-slide-thumb-rgba2-green-ch-filter-mask.npy new file mode 100644 index 0000000000000000000000000000000000000000..b602fa13dd20e010009aab516ce14eac1c63ea42 GIT binary patch literal 245828 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 literal 0 HcmV?d00001 diff --git a/tests/expectations/mask-arrays/diagnostic-slide-thumb-rgba3-green-ch-filter-mask.npy b/tests/expectations/mask-arrays/diagnostic-slide-thumb-rgba3-green-ch-filter-mask.npy new file mode 100644 index 0000000000000000000000000000000000000000..66c81dee079321354faaefb0efac10084031fdc9 GIT binary patch literal 245828 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 G1OE?QdCchm literal 0 HcmV?d00001 diff --git a/tests/expectations/mask-arrays/diagnostic-slide-thumb-rgba4-green-ch-filter-mask.npy b/tests/expectations/mask-arrays/diagnostic-slide-thumb-rgba4-green-ch-filter-mask.npy new file mode 100644 index 0000000000000000000000000000000000000000..e5d18f2b96f73a533f5420ccd6d8af6aab5bfde2 GIT binary patch literal 245828 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 literal 0 HcmV?d00001 diff --git a/tests/integration/test_image_filters.py b/tests/integration/test_image_filters.py index d63ade2a..7a3a5cc2 100644 --- a/tests/integration/test_image_filters.py +++ b/tests/integration/test_image_filters.py @@ -305,7 +305,7 @@ def test_stretch_contrast_filter_on_gs_image(): ( (300, 40), (300, 600), - (40, 500,), + (40, 500), (-10, 340), (-200, 300), (-40, -60), @@ -449,7 +449,7 @@ def test_adaptive_equalization_filter_on_gs_image(): @pytest.mark.parametrize( - "nbins, clip_limit", ((-10, 340), (-40, -60), (None, 50), (None, None),), + "nbins, clip_limit", ((-10, 340), (-40, -60), (None, 50), (None, None)) ) def test_adaptive_equalization_raises_exception_on_params(nbins, clip_limit): rgba_img = RGBA.DIAGNOSTIC_SLIDE_THUMB @@ -488,7 +488,6 @@ def test_local_equalization_filter_on_gs_image(): ), ) def test_local_equalization_raises_exception_on_rgb_images(pil_rgb_image): - with pytest.raises(Exception) as err: imf.local_equalization(pil_rgb_image, 80) @@ -696,9 +695,7 @@ def test_hysteresis_threshold_filter_on_gs_image(): ) -@pytest.mark.parametrize( - "low, high", ((None, 50), (-250, None), (None, None),), -) +@pytest.mark.parametrize("low, high", ((None, 50), (-250, None), (None, None))) def test_hysteresis_threshold_raises_exception_on_thresholds(low, high): rgba_img = RGBA.DIAGNOSTIC_SLIDE_THUMB @@ -779,7 +776,6 @@ def test_local_otsu_threshold_filter_on_gs_image(pil_image, expected_image, disk def test_local_otsu_threshold_raises_right_exceptions( pil_image, disk_size, expected_exception, expected_message ): - with pytest.raises(expected_exception) as err: imf.local_otsu_threshold(pil_image, disk_size) @@ -801,9 +797,7 @@ def test_hysteresis_threshold_mask_filter_on_rgba_image(): np.testing.assert_array_equal(hysteresis_threshold_mask, expected_value) -@pytest.mark.parametrize( - "low, high", ((None, 50), (-250, None), (None, None),), -) +@pytest.mark.parametrize("low, high", ((None, 50), (-250, None), (None, None))) def test_hysteresis_threshold_mask_raises_exception_on_thresholds(low, high): rgb_img = RGB.DIAGNOSTIC_SLIDE_THUMB_RGB @@ -939,7 +933,6 @@ def test_filter_entropy_filter_on_gs_image(): ), ) def test_filter_entropy_raises_exception_on_rgb_image(pil_image): - with pytest.raises(Exception) as err: imf.filter_entropy(pil_image) @@ -968,7 +961,6 @@ def test_canny_edges_filter_on_gs_image(): ), ) def test_canny_edges_raises_exception_on_rgb_image(pil_image): - with pytest.raises(Exception) as err: imf.canny_edges(pil_image) @@ -1150,7 +1142,6 @@ def test_red_filter_on_rgb_image( def test_red_filter_raises_right_exceptions( pil_img, red_thresh, green_thresh, blue_thresh, expected_exception, expected_message ): - with pytest.raises(expected_exception) as err: imf.red_filter(pil_img, red_thresh, green_thresh, blue_thresh) @@ -1203,22 +1194,101 @@ def test_red_pen_filter_on_rgb_image(pil_img, expected_value): @pytest.mark.parametrize( - "red_thresh, green_thresh, blue_thresh, expected_value", + "red_thresh, green_thresh, blue_thresh, expectation", ( (20, 190, 50, "mask-arrays/diagnostic-slide-thumb-rgba1-green-filter-mask"), (0, 40, 30, "mask-arrays/diagnostic-slide-thumb-rgba2-green-filter-mask"), (0, 180, 90, "mask-arrays/diagnostic-slide-thumb-rgba3-green-filter-mask"), ), ) -def test_green_filter_on_rgba_image( - red_thresh, green_thresh, blue_thresh, expected_value +def test_green_filter_on_rgba_image(red_thresh, green_thresh, blue_thresh, expectation): + rgba_img = RGBA.DIAGNOSTIC_SLIDE_THUMB + + green_filter_mask = imf.green_filter( + rgba_img, red_thresh, green_thresh, blue_thresh + ) + + np.testing.assert_array_equal( + green_filter_mask, load_expectation(expectation, type_="npy") + ) + + +@pytest.mark.parametrize( + "green_thresh, avoid_overmask, overmask_thresh, expectation", + ( + ( + 200, + True, + 50, + "mask-arrays/diagnostic-slide-thumb-rgba1-green-ch-filter-mask", + ), + (0, True, 50, "mask-arrays/diagnostic-slide-thumb-rgba2-green-ch-filter-mask"), + ( + 200, + False, + 50, + "mask-arrays/diagnostic-slide-thumb-rgba3-green-ch-filter-mask", + ), + (0, False, 50, "mask-arrays/diagnostic-slide-thumb-rgba4-green-ch-filter-mask"), + ), +) +def test_green_channel_filter_on_rgba_image( + green_thresh, avoid_overmask, overmask_thresh, expectation ): rgba_img = RGBA.DIAGNOSTIC_SLIDE_THUMB - expected_value = load_expectation(expected_value, type_="npy") - red_filter_mask = imf.green_filter(rgba_img, red_thresh, green_thresh, blue_thresh) + green_ch_filter_mask = imf.green_channel_filter( + rgba_img, green_thresh, avoid_overmask, overmask_thresh + ) - np.testing.assert_array_equal(red_filter_mask, expected_value) + np.testing.assert_array_equal( + green_ch_filter_mask, load_expectation(expectation, type_="npy") + ) + assert rgba_img.size == green_ch_filter_mask.T.shape + + +@pytest.mark.parametrize("green_threshold", (256, -1)) +def test_green_channel_filter_with_wrong_threshold(green_threshold): + rgba_img = RGBA.DIAGNOSTIC_SLIDE_THUMB + with pytest.raises(ValueError) as err: + imf.green_channel_filter(rgba_img, green_threshold) + + assert isinstance(err.value, ValueError) + assert str(err.value) == "threshold must be in range [0, 255]" + + +@pytest.mark.parametrize( + "rgb_img, expectation", + ( + ( + RGB.DIAGNOSTIC_SLIDE_THUMB_RGB, + "mask-arrays/diagnostic-slide-thumb-rgb-pen-marks-mask", + ), + ( + RGB.DIAGNOSTIC_SLIDE_THUMB_HSV, + "mask-arrays/diagnostic-slide-thumb-hsv-pen-marks-mask", + ), + ( + RGB.DIAGNOSTIC_SLIDE_THUMB_YCBCR, + "mask-arrays/diagnostic-slide-thumb-ycbcr-pen-marks-mask", + ), + (RGB.TCGA_LUNG_RGB, "mask-arrays/tcga-lung-rgb-pen-marks-mask"), + ), +) +def test_pen_marks_filter_on_rgb_image(rgb_img, expectation): + pen_marks_filter = imf.pen_marks(rgb_img) + + np.testing.assert_array_equal( + pen_marks_filter, load_expectation(expectation, type_="npy") + ) + + +def test_pen_marks_filter_with_wrong_img_mode(): + with pytest.raises(ValueError) as err: + imf.pen_marks(RGBA.DIAGNOSTIC_SLIDE_THUMB) + + assert isinstance(err.value, ValueError) + assert str(err.value) == "Image input must be RGB, got RGBA." @pytest.mark.parametrize( @@ -1324,7 +1394,6 @@ def test_green_filter_on_rgb_image( def test_green_filter_raises_right_exceptions( pil_img, red_thresh, green_thresh, blue_thresh, expected_exception, expected_message ): - with pytest.raises(expected_exception) as err: imf.green_filter(pil_img, red_thresh, green_thresh, blue_thresh) @@ -1490,7 +1559,6 @@ def test_blue_filter_on_rgb_image( def test_blue_filter_raises_right_exceptions( pil_img, red_thresh, green_thresh, blue_thresh, expected_exception, expected_message ): - with pytest.raises(expected_exception) as err: imf.blue_filter(pil_img, red_thresh, green_thresh, blue_thresh)