2.2 KiB
2.2 KiB
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.pnggénéré programmatiquement (forme simple)
Fichiers modifiés
src/logimage/infrastructure/image/pillow_converter.py— pipeline completsrc/logimage/infrastructure/image/local_file_source.py— nouvelle sourcesrc/logimage/cli/main.py— option--local-imagetests/infrastructure/test_pillow_converter.py— nouveaux teststests/fixtures/simple_icon.png— image de test