Coverage for tests/images/test_icc_profile_image_server.py: 100%
41 statements
« prev ^ index » next coverage.py v7.6.10, created at 2025-01-31 11:24 +0000
« prev ^ index » next coverage.py v7.6.10, created at 2025-01-31 11:24 +0000
1import numpy as np
2from PIL import ImageCms
3from qubalab.images.image_server import ImageMetadata, ImageServer
4from qubalab.images.icc_profile_server import IccProfileServer
5from qubalab.images.metadata.image_shape import ImageShape
6from qubalab.images.metadata.pixel_calibration import PixelCalibration, PixelLength
7from qubalab.images.region_2d import Region2D
10sample_RGB_metadata = ImageMetadata(
11 "/path/to/img.tiff",
12 "Image name",
13 (
14 ImageShape(16, 12, c=3),
15 ),
16 PixelCalibration(
17 PixelLength.create_microns(2.5),
18 PixelLength.create_microns(2.5)
19 ),
20 True,
21 np.uint8
22)
23sample_RGB_pixels = np.array(
24 [[[x / sample_RGB_metadata.width * 255, y / sample_RGB_metadata.height * 255, 0] for x in range(sample_RGB_metadata.width)] for y in range(sample_RGB_metadata.height)],
25 np.uint8
26)
27sample_RGB_pixels = np.array([[[
28 x / sample_RGB_metadata.width * 255 if c == 0 else (y / sample_RGB_metadata.height * 255 if c == 1 else 0)
29 for x in range(sample_RGB_metadata.width)]
30 for y in range(sample_RGB_metadata.height)]
31 for c in range(sample_RGB_metadata.n_channels)
32], np.uint8)
33class SampleRGBServer(ImageServer):
34 def close(self):
35 pass
37 def _build_metadata(self) -> ImageMetadata:
38 return sample_RGB_metadata
40 def _read_block(self, level: int, region: Region2D) -> np.ndarray:
41 return sample_RGB_pixels[:, region.y:region.y+region.height, region.x:region.x+region.width]
44def test_transform_when_icc_profile_not_provided():
45 sample_rgb_server = SampleRGBServer()
46 icc_profile_server = IccProfileServer(sample_rgb_server)
48 transform = icc_profile_server.icc_transform
50 assert transform == None
52 icc_profile_server.close()
55def test_region_of_pixels_when_icc_profile_not_provided():
56 sample_rgb_server = SampleRGBServer()
57 icc_profile_server = IccProfileServer(sample_rgb_server)
59 image = icc_profile_server.read_region(1, Region2D(x=0, y=0, width=sample_RGB_metadata.width, height=sample_RGB_metadata.height))
61 np.testing.assert_array_equal(image, sample_RGB_pixels)
63 icc_profile_server.close()
66def test_transform_when_icc_profile_provided():
67 sample_rgb_server = SampleRGBServer()
68 icc_profile_server = IccProfileServer(sample_rgb_server, ImageCms.createProfile("sRGB"))
70 transform = icc_profile_server.icc_transform
72 assert transform != None
74 icc_profile_server.close()
77def test_region_of_pixels_when_icc_profile_provided():
78 sample_rgb_server = SampleRGBServer()
79 icc_profile_server = IccProfileServer(sample_rgb_server, ImageCms.createProfile("sRGB"))
81 image = icc_profile_server.read_region(1, Region2D(x=0, y=0, width=sample_RGB_metadata.width, height=sample_RGB_metadata.height))
83 np.testing.assert_array_equal(image, sample_RGB_pixels)
85 icc_profile_server.close()