55 lines
2.2 KiB
Markdown
55 lines
2.2 KiB
Markdown
# 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
|