test(extract): Verschmelzungsfall und Schwellenwert von drop_map_labels absichern

Ruling 43: beruehren sich Schriftzug und echte Flaeche (z.B. eine Mole), bilden sie eine
Komponente und bleiben beide stehen - dieselbe vorsichtige Richtung wie bei Beschriftungen
auf dem Festland, lieber ein Buchstabe zu viel als eine Mole zu wenig.
Ruling 44: ein Tippfehler in LABEL_MAX_NATURAL (0.2 statt 0.02) faellt jetzt in einem Test auf,
der knapp oberhalb der Schwelle liegt.
MAINLAND_MIN_SIZE-Kommentar auf zwei Saetze gekuerzt (Stil wie LAND_REACH_PX/PALM_VERGE),
Wortdopplung im Docstring entfernt. Kein Verhalten geaendert: 41 statt 39 Tests, beide neuen
Tests waren vor jeder Aenderung bereits gruen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
knsoandClaude Sonnet 5 committed 2026-09-12 19:22:25 +02:00
1 parent 4289378561
commit 70c35faf86
2 files changed
+27 -7

No files matched your search

+20
View File
@@ -58,3 +58,23 @@ def test_mainland_is_never_dropped():
labels[10:190, 10:100] = CLASSES["stadt"]
out = drop_map_labels(labels)
assert (out[10:190, 10:100] == CLASSES["stadt"]).all()
def test_lettering_touching_a_real_area_is_kept():
"""Beruehren sich Schriftzug und echte Flaeche, bilden sie eine Komponente, und es bleibt
beides stehen. Die vorsichtige Richtung: lieber ein Buchstabe zu viel als eine Mole zu
wenig. Dieselbe Entscheidung wie bei den Beschriftungen auf dem Festland."""
labels = np.full((200, 200), CLASSES["wasser"], dtype=np.uint8)
labels[40:60, 40:120] = CLASSES["strasse"] # Schriftzug, fuer sich genommen 0 % natuerlich
labels[60:90, 100:140] = CLASSES["stadt"] # Mole, beruehrt ihn an der Kante
labels[70:85, 110:135] = CLASSES["gruen"] # ... und traegt Gruen: echte Flaeche
out = drop_map_labels(labels)
assert (out[40:60, 40:120] == CLASSES["strasse"]).all()
def test_five_percent_of_green_already_counts_as_a_real_area():
"""Die Grenze liegt bei 2 %. Mit 5 % Gruen muss die Flaeche bleiben - daran faellt auch
ein Tippfehler in LABEL_MAX_NATURAL auf (0.2 statt 0.02), der sonst durchginge."""
labels = np.full((200, 200), CLASSES["wasser"], dtype=np.uint8)
labels[40:140, 40:140] = CLASSES["stadt"] # 10.000 px, unter MAINLAND_MIN_SIZE
labels[40:62, 40:63] = CLASSES["gruen"] # 506 px, also gut 5 %
out = drop_map_labels(labels)
assert (out[40:140, 40:140] != CLASSES["wasser"]).all()