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

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 

8 

9 

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 

36 

37 def _build_metadata(self) -> ImageMetadata: 

38 return sample_RGB_metadata 

39 

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] 

42 

43 

44def test_transform_when_icc_profile_not_provided(): 

45 sample_rgb_server = SampleRGBServer() 

46 icc_profile_server = IccProfileServer(sample_rgb_server) 

47 

48 transform = icc_profile_server.icc_transform 

49 

50 assert transform == None 

51 

52 icc_profile_server.close() 

53 

54 

55def test_region_of_pixels_when_icc_profile_not_provided(): 

56 sample_rgb_server = SampleRGBServer() 

57 icc_profile_server = IccProfileServer(sample_rgb_server) 

58 

59 image = icc_profile_server.read_region(1, Region2D(x=0, y=0, width=sample_RGB_metadata.width, height=sample_RGB_metadata.height)) 

60 

61 np.testing.assert_array_equal(image, sample_RGB_pixels) 

62 

63 icc_profile_server.close() 

64 

65 

66def test_transform_when_icc_profile_provided(): 

67 sample_rgb_server = SampleRGBServer() 

68 icc_profile_server = IccProfileServer(sample_rgb_server, ImageCms.createProfile("sRGB")) 

69 

70 transform = icc_profile_server.icc_transform 

71 

72 assert transform != None 

73 

74 icc_profile_server.close() 

75 

76 

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")) 

80 

81 image = icc_profile_server.read_region(1, Region2D(x=0, y=0, width=sample_RGB_metadata.width, height=sample_RGB_metadata.height)) 

82 

83 np.testing.assert_array_equal(image, sample_RGB_pixels) 

84 

85 icc_profile_server.close()