vascx-fork / tests /test_utils.py
zyf0717's picture
Vessel segmentation overlay update
1dae6a7
from pathlib import Path
import numpy as np
from PIL import Image
from vascx_models.config import OverlayColors, OverlayConfig, OverlayLayers
from vascx_models.utils import create_fundus_overlay
def test_create_fundus_overlay_draws_kept_measurement_segments(tmp_path: Path) -> None:
rgb_path = tmp_path / "rgb.png"
vessel_path = tmp_path / "vessel.png"
rgb = np.full((40, 40, 3), 255, dtype=np.uint8)
Image.fromarray(rgb).save(rgb_path)
vessel = np.zeros((40, 40), dtype=np.uint8)
vessel[20, 14:27] = 1
Image.fromarray(vessel).save(vessel_path)
output = create_fundus_overlay(
rgb_path=str(rgb_path),
vessel_path=str(vessel_path),
vessel_width_measurements=[
{
"x": 20.0,
"y": 20.0,
"x_start": 10.0,
"y_start": 20.0,
"x_end": 30.0,
"y_end": 20.0,
}
],
)
assert tuple(output[20, 20]) == (0, 0, 0)
assert tuple(output[20, 14]) == (0, 0, 0)
assert tuple(output[20, 26]) == (0, 0, 0)
assert tuple(output[20, 13]) == (255, 255, 255)
assert tuple(output[20, 27]) == (255, 255, 255)
assert tuple(output[19, 20]) == (255, 255, 255)
assert tuple(output[21, 20]) == (255, 255, 255)
def test_create_fundus_overlay_respects_vessel_width_layer_and_color(tmp_path: Path) -> None:
rgb_path = tmp_path / "rgb.png"
vessel_path = tmp_path / "vessel.png"
rgb = np.zeros((40, 40, 3), dtype=np.uint8)
Image.fromarray(rgb).save(rgb_path)
vessel = np.zeros((40, 40), dtype=np.uint8)
vessel[20, 14:27] = 1
Image.fromarray(vessel).save(vessel_path)
hidden_output = create_fundus_overlay(
rgb_path=str(rgb_path),
vessel_path=str(vessel_path),
vessel_width_measurements=[
{
"x": 20.0,
"y": 20.0,
"x_start": 10.0,
"y_start": 20.0,
"x_end": 30.0,
"y_end": 20.0,
}
],
overlay_config=OverlayConfig(layers=OverlayLayers(vessel_widths=False)),
)
assert tuple(hidden_output[20, 20]) == (0, 0, 0)
colored_output = create_fundus_overlay(
rgb_path=str(rgb_path),
vessel_path=str(vessel_path),
vessel_width_measurements=[
{
"x": 20.0,
"y": 20.0,
"x_start": 10.0,
"y_start": 20.0,
"x_end": 30.0,
"y_end": 20.0,
}
],
overlay_config=OverlayConfig(
colors=OverlayColors(vessel_width=(1, 2, 3)),
),
)
assert tuple(colored_output[20, 20]) == (1, 2, 3)
assert tuple(colored_output[20, 14]) == (1, 2, 3)
assert tuple(colored_output[20, 26]) == (1, 2, 3)
assert tuple(colored_output[20, 13]) == (0, 0, 0)
assert tuple(colored_output[20, 27]) == (0, 0, 0)
assert tuple(colored_output[19, 20]) == (0, 0, 0)