Coverage for tests/objects/test_draw.py: 100%
95 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
2import shapely
3from PIL import Image, ImageDraw
4from qubalab.objects.draw import draw_geometry
7def test_draw_point():
8 v = 60
9 geometry = shapely.Point(1, 3)
10 pixel_values = np.zeros((10, 5))
11 expected_pixel_values = np.array(
12 [[0, 0, 0, 0, 0],
13 [0, 0, 0, 0, 0],
14 [0, 0, 0, 0, 0],
15 [0, v, 0, 0, 0],
16 [0, 0, 0, 0, 0],
17 [0, 0, 0, 0, 0],
18 [0, 0, 0, 0, 0],
19 [0, 0, 0, 0, 0],
20 [0, 0, 0, 0, 0],
21 [0, 0, 0, 0, 0],]
22 )
23 image = Image.fromarray(pixel_values)
24 drawing_context = ImageDraw.Draw(image)
26 draw_geometry(image.size, drawing_context, geometry, v)
28 np.testing.assert_array_equal(np.asarray(image), expected_pixel_values)
31def test_draw_line_string():
32 v = 32
33 geometry = shapely.LineString([(1, 3), (2, 3), (4, 4), (1, 8)])
34 pixel_values = np.zeros((10, 5))
35 expected_pixel_values = np.array(
36 [[0, 0, 0, 0, 0],
37 [0, 0, 0, 0, 0],
38 [0, 0, 0, 0, 0],
39 [0, v, v, 0, 0],
40 [0, 0, 0, v, v],
41 [0, 0, 0, v, 0],
42 [0, 0, v, 0, 0],
43 [0, 0, v, 0, 0],
44 [0, v, 0, 0, 0],
45 [0, 0, 0, 0, 0],]
46 )
47 image = Image.fromarray(pixel_values)
48 drawing_context = ImageDraw.Draw(image)
50 draw_geometry(image.size, drawing_context, geometry, v)
52 np.testing.assert_array_equal(np.asarray(image), expected_pixel_values)
55def test_draw_linear_ring():
56 v = 57
57 geometry = shapely.LinearRing([(1, 1), (3, 4), (1, 7)])
58 pixel_values = np.zeros((10, 5))
59 expected_pixel_values = np.array(
60 [[0, 0, 0, 0, 0],
61 [0, v, 0, 0, 0],
62 [0, v, v, 0, 0],
63 [0, v, v, 0, 0],
64 [0, v, 0, v, 0],
65 [0, v, v, 0, 0],
66 [0, v, v, 0, 0],
67 [0, v, 0, 0, 0],
68 [0, 0, 0, 0, 0],
69 [0, 0, 0, 0, 0],]
70 )
71 image = Image.fromarray(pixel_values)
72 drawing_context = ImageDraw.Draw(image)
74 draw_geometry(image.size, drawing_context, geometry, v)
76 np.testing.assert_array_equal(np.asarray(image), expected_pixel_values)
79def test_draw_polygon_without_holes():
80 v = 573
81 geometry = shapely.Polygon([(0, 0), (3, 3), (3, 4), (0, 7)])
82 pixel_values = np.zeros((10, 5))
83 expected_pixel_values = np.array(
84 [[v, 0, 0, 0, 0],
85 [v, v, 0, 0, 0],
86 [v, v, v, 0, 0],
87 [v, v, v, v, 0],
88 [v, v, v, v, 0],
89 [v, v, v, 0, 0],
90 [v, v, 0, 0, 0],
91 [v, 0, 0, 0, 0],
92 [0, 0, 0, 0, 0],
93 [0, 0, 0, 0, 0],]
94 )
95 image = Image.fromarray(pixel_values)
96 drawing_context = ImageDraw.Draw(image)
98 draw_geometry(image.size, drawing_context, geometry, v)
100 np.testing.assert_array_equal(np.asarray(image), expected_pixel_values)
103def test_draw_polygon_with_holes():
104 v = 9
105 geometry = shapely.Polygon([(0, 0), (3, 3), (3, 4), (0, 7)], holes=[[(1, 3), (2, 3), (2, 4)]])
106 pixel_values = np.zeros((10, 5))
107 expected_pixel_values = np.array(
108 [[v, 0, 0, 0, 0],
109 [v, v, 0, 0, 0],
110 [v, v, v, 0, 0],
111 [v, 0, 0, v, 0],
112 [v, v, 0, v, 0],
113 [v, v, v, 0, 0],
114 [v, v, 0, 0, 0],
115 [v, 0, 0, 0, 0],
116 [0, 0, 0, 0, 0],
117 [0, 0, 0, 0, 0],]
118 )
119 image = Image.fromarray(pixel_values)
120 drawing_context = ImageDraw.Draw(image)
122 draw_geometry(image.size, drawing_context, geometry, v)
124 np.testing.assert_array_equal(np.asarray(image), expected_pixel_values)
127def test_draw_multi_point():
128 v = 4
129 geometry = shapely.MultiPoint([shapely.Point(1, 3), shapely.Point(3, 6)])
130 pixel_values = np.zeros((10, 5))
131 expected_pixel_values = np.array(
132 [[0, 0, 0, 0, 0],
133 [0, 0, 0, 0, 0],
134 [0, 0, 0, 0, 0],
135 [0, v, 0, 0, 0],
136 [0, 0, 0, 0, 0],
137 [0, 0, 0, 0, 0],
138 [0, 0, 0, v, 0],
139 [0, 0, 0, 0, 0],
140 [0, 0, 0, 0, 0],
141 [0, 0, 0, 0, 0],]
142 )
143 image = Image.fromarray(pixel_values)
144 drawing_context = ImageDraw.Draw(image)
146 draw_geometry(image.size, drawing_context, geometry, v)
148 np.testing.assert_array_equal(np.asarray(image), expected_pixel_values)
151def test_draw_multi_line_string():
152 v = 32
153 geometry = shapely.MultiLineString([shapely.LineString([(1, 3), (2, 3), (4, 4), (1, 8)]), shapely.LineString([(4, 2), (4, 7)])])
154 pixel_values = np.zeros((10, 5))
155 expected_pixel_values = np.array(
156 [[0, 0, 0, 0, 0],
157 [0, 0, 0, 0, 0],
158 [0, 0, 0, 0, v],
159 [0, v, v, 0, v],
160 [0, 0, 0, v, v],
161 [0, 0, 0, v, v],
162 [0, 0, v, 0, v],
163 [0, 0, v, 0, v],
164 [0, v, 0, 0, 0],
165 [0, 0, 0, 0, 0],]
166 )
167 image = Image.fromarray(pixel_values)
168 drawing_context = ImageDraw.Draw(image)
170 draw_geometry(image.size, drawing_context, geometry, v)
172 np.testing.assert_array_equal(np.asarray(image), expected_pixel_values)
175def test_draw_multi_polygon():
176 v = 573
177 geometry = shapely.MultiPolygon([
178 shapely.Polygon([(0, 0), (3, 3), (3, 4), (0, 7)]),
179 shapely.Polygon([(2, 7), (4, 7), (4, 9), (2, 9)], holes=[[(3, 8), (3, 8), (3, 8)]])
180 ])
181 pixel_values = np.zeros((10, 5))
182 expected_pixel_values = np.array(
183 [[v, 0, 0, 0, 0],
184 [v, v, 0, 0, 0],
185 [v, v, v, 0, 0],
186 [v, v, v, v, 0],
187 [v, v, v, v, 0],
188 [v, v, v, 0, 0],
189 [v, v, 0, 0, 0],
190 [v, 0, v, v, v],
191 [0, 0, v, 0, v],
192 [0, 0, v, v, v],]
193 )
194 image = Image.fromarray(pixel_values)
195 drawing_context = ImageDraw.Draw(image)
197 draw_geometry(image.size, drawing_context, geometry, v)
199 np.testing.assert_array_equal(np.asarray(image), expected_pixel_values)
202def test_draw_geometry_collection():
203 v = 7
204 geometry = shapely.GeometryCollection([shapely.Point(1, 2), shapely.LineString([(1, 3), (2, 3), (4, 4), (1, 8)])])
205 pixel_values = np.zeros((10, 5))
206 expected_pixel_values = np.array(
207 [[0, 0, 0, 0, 0],
208 [0, 0, 0, 0, 0],
209 [0, v, 0, 0, 0],
210 [0, v, v, 0, 0],
211 [0, 0, 0, v, v],
212 [0, 0, 0, v, 0],
213 [0, 0, v, 0, 0],
214 [0, 0, v, 0, 0],
215 [0, v, 0, 0, 0],
216 [0, 0, 0, 0, 0],]
217 )
218 image = Image.fromarray(pixel_values)
219 drawing_context = ImageDraw.Draw(image)
221 draw_geometry(image.size, drawing_context, geometry, v)
223 np.testing.assert_array_equal(np.asarray(image), expected_pixel_values)
226def test_draw_when_values_already_present():
227 i = 6
228 v = 3
229 geometry = shapely.Point(1, 3)
230 pixel_values = np.full((10, 5), i, dtype=np.uint8)
231 expected_pixel_values = np.array(
232 [[i, i, i, i, i],
233 [i, i, i, i, i],
234 [i, i, i, i, i],
235 [i, v, i, i, i],
236 [i, i, i, i, i],
237 [i, i, i, i, i],
238 [i, i, i, i, i],
239 [i, i, i, i, i],
240 [i, i, i, i, i],
241 [i, i, i, i, i],]
242 )
243 image = Image.fromarray(pixel_values)
244 drawing_context = ImageDraw.Draw(image)
246 draw_geometry(image.size, drawing_context, geometry, v)
248 np.testing.assert_array_equal(np.asarray(image), expected_pixel_values)