start
This commit is contained in:
1 parent
6a056262a8
commit
a55dca5fb6
11 files changed
+132
-25
No files matched your search
@@ -1,8 +1,9 @@
|
||||
import numpy as np
|
||||
import pytest
|
||||
from scipy import ndimage as ndi
|
||||
|
||||
from leonida.classify import CLASSES
|
||||
from leonida.inpaint import fill_nearest, is_thin, rebuild
|
||||
from leonida.inpaint import _rectangle, _sides, fill_nearest, is_thin, rebuild
|
||||
|
||||
STADT, PARK, WATER = CLASSES["stadt"], CLASSES["gruen"], CLASSES["wasser"]
|
||||
ROAD, PATH, BUILDING = CLASSES["strasse"], CLASSES["weg"], CLASSES["gebaeude"]
|
||||
@@ -133,6 +134,18 @@ def test_a_path_stays_a_path_and_the_street_wins_the_crossing():
|
||||
assert (labels[120:138, 146:149] == PATH).all()
|
||||
|
||||
|
||||
def test_a_path_runs_through_to_a_stub_too_short_for_a_direction():
|
||||
labels = city()
|
||||
labels[:80, 145:150] = PATH
|
||||
labels[120:134, 155:160] = PATH # kurzes, versetztes Stück: kein Straßenende
|
||||
mask = box_mask(labels.shape, slice(80, 120), slice(100, 200))
|
||||
scribble(labels, mask)
|
||||
result = rebuild(labels, mask)
|
||||
assert (result.stats.connected, result.stats.extended, result.stats.dead_ends) == (1, 0, 0)
|
||||
paths, count = ndi.label(labels == PATH)
|
||||
assert count == 1 # oberer Weg und Stück hängen zusammen
|
||||
|
||||
|
||||
def test_park_and_water_under_text_stay_what_they_are():
|
||||
labels = city()
|
||||
labels[:, :150] = PARK
|
||||
@@ -203,9 +216,12 @@ def test_a_hidden_block_part_gets_the_density_of_the_visible_part():
|
||||
def test_added_buildings_keep_setback_gaps_and_stay_in_the_hidden_part():
|
||||
labels, mask = block_city()
|
||||
scribble(labels, mask)
|
||||
before = labels.copy()
|
||||
result = rebuild(labels, mask)
|
||||
assert (labels[~mask] == before[~mask]).all()
|
||||
for corners in result.buildings: # Maske: Pixel 60–240 × 220–340 samt Pixelkante
|
||||
assert all(59.5 <= r <= 240.5 and 219.5 <= c <= 340.5 for r, c in corners)
|
||||
new = (labels == BUILDING) & mask
|
||||
assert not (new & ~mask).any()
|
||||
road_distance = ndi.distance_transform_edt(~np.isin(labels, [ROAD, PATH]))
|
||||
assert road_distance[new].min() >= 15 # Straßenabstand der Nachbarn, auf 15 m begrenzt
|
||||
pieces, count = ndi.label(new)
|
||||
@@ -223,6 +239,14 @@ def test_no_buildings_are_added_in_a_park():
|
||||
assert result.stats.added == 0
|
||||
|
||||
|
||||
def test_no_buildings_are_added_in_water():
|
||||
labels, mask = block_city()
|
||||
labels[40:260, 200:360] = WATER
|
||||
scribble(labels, mask)
|
||||
result = rebuild(labels, mask)
|
||||
assert result.stats.added == 0
|
||||
|
||||
|
||||
def test_without_three_neighbours_nothing_is_added():
|
||||
labels, mask = block_city()
|
||||
labels[labels == BUILDING] = STADT
|
||||
@@ -242,3 +266,9 @@ def test_rebuild_is_deterministic():
|
||||
a, b = rebuild(first, mask), rebuild(second, mask)
|
||||
assert (first == second).all()
|
||||
assert a.buildings == b.buildings
|
||||
|
||||
|
||||
def test_pixels_on_one_line_give_a_rectangle_with_four_corners():
|
||||
rect = _rectangle(np.full(10, 5), np.arange(10, 20)) # 10 Pixel in einer Zeile
|
||||
assert len(rect.exterior.coords) == 5 # vier Ecken und der Schlusspunkt
|
||||
assert _sides(rect) == pytest.approx((1.0, 10.0))
|
||||
Reference in new issue
Block a user