Files
logimage-generator/docs/superpowers/specs/2026-05-21-pipeline-conversion-ameliore-design.md
Vincent Bourdon 5a03f8a38d import initial
2026-06-10 10:21:18 +02:00

2.2 KiB
Raw Permalink Blame History

Amélioration du pipeline de conversion image → nonogram

Objectif

Produire des grilles de nonogram à la fois jouables (≤ 6 blocs par ligne/colonne) et reconnaissables (ressemblance avec l'image source), à partir de photos Pexels/Unsplash ou d'images locales.

Problème actuel

Le pipeline actuel (edge detection Canny + blend + Otsu) génère trop de pixels isolés sur les photos, produisant des clues illisibles (ex: 15 blocs sur une ligne de 32 cellules) et une grille méconnaissable.

Pipeline cible

Image bytes
    → Grayscale + resize (inchangé)
    → Bilateral filter (d=9, sigmaColor=75, sigmaSpace=75)
    → Posterize 2 niveaux (seuillage médian sur histogramme)
    → Binarisation Otsu
    → Fermeture morphologique kernel 3×3 (combler micro-trous)
    → Suppression composantes connexes < min_component_size (défaut: 2px)
    → [Boucle] Vérification complexité clues
          si max_blocks_per_line > max_clue_blocks :
              fermeture morphologique kernel += 1
              max 3 itérations
    → Grid

Paramètres configurables

Paramètre Défaut Description
max_clue_blocks 6 Max blocs acceptables par ligne/colonne
min_component_size 2 Taille min composante connexe (px)
max_cleanup_iterations 3 Nb max d'itérations de nettoyage supplémentaire

Nouvelle source locale

LocalFileImageSource — implémente ImageSource, lit un fichier depuis le disque.

CLI : nouvelle option --local-image <path> mutuellement exclusive avec --theme.

Tests

  • Unitaires : bilateral filter, cleanup morpho, boucle complexité sur grilles synthétiques
  • Intégration : image simple → vérifie max blocs/ligne ≤ 6
  • Fixture : tests/fixtures/simple_icon.png généré programmatiquement (forme simple)

Fichiers modifiés

  • src/logimage/infrastructure/image/pillow_converter.py — pipeline complet
  • src/logimage/infrastructure/image/local_file_source.py — nouvelle source
  • src/logimage/cli/main.py — option --local-image
  • tests/infrastructure/test_pillow_converter.py — nouveaux tests
  • tests/fixtures/simple_icon.png — image de test