|
3 | 3 |
|
4 | 4 | import bioimage_cpp as bic |
5 | 5 |
|
6 | | -from development.skeleton.blockwise_stitching import ( |
7 | | - run_blockwise_binary, |
8 | | - run_blockwise_labels, |
9 | | -) |
10 | | - |
11 | 6 |
|
12 | 7 | dist = bic.skeleton.distributed |
13 | 8 |
|
@@ -304,20 +299,73 @@ def test_minimum_spanning_forest_is_deterministic_and_preserves_vertices(): |
304 | 299 | assert _number_of_components(len(forest[0]), forest[1]) == 2 |
305 | 300 |
|
306 | 301 |
|
307 | | -def test_serial_binary_harness_stitches_multiple_blocks(): |
| 302 | +def test_two_block_binary_pipeline_stitches_shared_target(): |
308 | 303 | mask = np.zeros((11, 11, 19), dtype=np.uint8) |
309 | 304 | mask[5, 5, 1:18] = 1 |
310 | | - graph = run_blockwise_binary(mask, (6, 6, 6), remove_cycles=True) |
| 305 | + left = np.ascontiguousarray(mask[:, :, :11]) |
| 306 | + right = np.ascontiguousarray(mask[:, :, 10:]) |
| 307 | + left_targets = dist.block_border_targets( |
| 308 | + left, [(2, "high")], origin=(0, 0, 0) |
| 309 | + ) |
| 310 | + right_targets = dist.block_border_targets( |
| 311 | + right, [(2, "low")], origin=(0, 0, 10) |
| 312 | + ) |
| 313 | + np.testing.assert_array_equal(left_targets, right_targets) |
| 314 | + fragments = [ |
| 315 | + dist.block_teasar( |
| 316 | + left, |
| 317 | + open_faces=[(2, "high")], |
| 318 | + origin=(0, 0, 0), |
| 319 | + required_targets=left_targets, |
| 320 | + ), |
| 321 | + dist.block_teasar( |
| 322 | + right, |
| 323 | + open_faces=[(2, "low")], |
| 324 | + origin=(0, 0, 10), |
| 325 | + required_targets=right_targets, |
| 326 | + ), |
| 327 | + ] |
| 328 | + graph = dist.minimum_spanning_forest( |
| 329 | + dist.merge_block_skeletons(fragments) |
| 330 | + ) |
311 | 331 | assert graph[0].shape[0] > 0 |
312 | 332 | assert _number_of_components(len(graph[0]), graph[1]) == 1 |
313 | 333 | assert len(graph[1]) == len(graph[0]) - 1 |
314 | 334 |
|
315 | 335 |
|
316 | | -def test_serial_labeled_harness_keeps_touching_labels_separate(): |
| 336 | +def test_two_block_labeled_pipeline_keeps_touching_labels_separate(): |
317 | 337 | labels = np.zeros((9, 9, 17), dtype=np.int64) |
318 | 338 | labels[3, 4, 1:16] = -3 |
319 | 339 | labels[4, 4, 1:16] = 8 |
320 | | - graphs = run_blockwise_labels(labels, (5, 5, 6), remove_cycles=True) |
| 340 | + left = np.ascontiguousarray(labels[:, :, :10]) |
| 341 | + right = np.ascontiguousarray(labels[:, :, 9:]) |
| 342 | + left_targets = dist.block_border_targets_labels( |
| 343 | + left, [(2, "high")], origin=(0, 0, 0) |
| 344 | + ) |
| 345 | + right_targets = dist.block_border_targets_labels( |
| 346 | + right, [(2, "low")], origin=(0, 0, 9) |
| 347 | + ) |
| 348 | + assert left_targets.keys() == right_targets.keys() |
| 349 | + for label in left_targets: |
| 350 | + np.testing.assert_array_equal(left_targets[label], right_targets[label]) |
| 351 | + fragments = [ |
| 352 | + dist.block_teasar_labels( |
| 353 | + left, |
| 354 | + open_faces=[(2, "high")], |
| 355 | + origin=(0, 0, 0), |
| 356 | + required_targets=left_targets, |
| 357 | + ), |
| 358 | + dist.block_teasar_labels( |
| 359 | + right, |
| 360 | + open_faces=[(2, "low")], |
| 361 | + origin=(0, 0, 9), |
| 362 | + required_targets=right_targets, |
| 363 | + ), |
| 364 | + ] |
| 365 | + graphs = { |
| 366 | + label: dist.minimum_spanning_forest(graph) |
| 367 | + for label, graph in dist.merge_block_skeleton_maps(fragments).items() |
| 368 | + } |
321 | 369 | assert list(graphs) == [-3, 8] |
322 | 370 | for graph in graphs.values(): |
323 | 371 | assert _number_of_components(len(graph[0]), graph[1]) == 1 |
|
0 commit comments