split node tests into standalone files
This commit is contained in:
53
tests/node_tests/test_watershed_segmentation.py
Normal file
53
tests/node_tests/test_watershed_segmentation.py
Normal file
@@ -0,0 +1,53 @@
|
||||
import numpy as np
|
||||
from backend.execution_context import active_node, execution_callbacks
|
||||
from tests.node_tests._shared import make_field
|
||||
|
||||
|
||||
def test_watershed_segmentation():
|
||||
from scipy.ndimage import label
|
||||
from backend.nodes.watershed_segmentation import WatershedSegmentation
|
||||
|
||||
node = WatershedSegmentation()
|
||||
y, x = np.mgrid[-1:1:64j, -1:1:64j]
|
||||
data = (
|
||||
2.0 * np.exp(-((x + 0.45) ** 2 + y**2) / 0.05)
|
||||
+ 2.0 * np.exp(-((x - 0.45) ** 2 + y**2) / 0.05)
|
||||
- 0.3 * np.exp(-(x**2 + y**2) / 0.12)
|
||||
)
|
||||
field = make_field(data=data, xreal=2.0e-6, yreal=2.0e-6)
|
||||
|
||||
previews = []
|
||||
with execution_callbacks(preview=lambda nid, uri: previews.append(uri)), active_node("test"):
|
||||
mask, = node.process(
|
||||
field,
|
||||
invert_height=False,
|
||||
locate_steps=10,
|
||||
locate_threshold=8,
|
||||
locate_drop_size=0.1,
|
||||
watershed_steps=20,
|
||||
watershed_drop_size=0.1,
|
||||
combine_mode="replace",
|
||||
)
|
||||
assert mask.dtype == np.uint8
|
||||
assert mask.shape == field.data.shape
|
||||
assert len(previews) == 1
|
||||
assert previews[0].startswith("data:image/png;base64,")
|
||||
|
||||
_, ngrains = label(mask > 127)
|
||||
assert ngrains >= 2
|
||||
|
||||
seed_mask = np.zeros_like(mask)
|
||||
seed_mask[:, :32] = 255
|
||||
intersected, = node.process(
|
||||
field,
|
||||
invert_height=False,
|
||||
locate_steps=10,
|
||||
locate_threshold=8,
|
||||
locate_drop_size=0.1,
|
||||
watershed_steps=20,
|
||||
watershed_drop_size=0.1,
|
||||
combine_mode="intersection",
|
||||
mask=seed_mask,
|
||||
)
|
||||
assert np.count_nonzero(intersected) < np.count_nonzero(mask)
|
||||
assert np.all(intersected[:, 40:] == 0)
|
||||
Reference in New Issue
Block a user