Skip to content

Junia-Cellvision/public-datasetmaker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dataset Maker

Générateur d'images composites pour créer des datasets synthétiques d'images de microscopie, combinant cellules, masques de MEA (microelectrode arrays), oculaires et fonds personnalisés.

Fonctionnalités

  • Multi-cellules par image : chaque image contient plusieurs cellules piochées aléatoirement et placées sur un canvas
  • Composition multi-couches : fond + cellules + MEA + oculaire
  • Probabilités configurables pour chaque couche (un seul pass, plusieurs styles)
  • Filtres naturels via OpenCV + Pillow : bruit gaussien, vignettage, flou, brightness, contraste
  • Transformations géométriques indépendantes par cellule : rotation, scale, flip
  • Masque de segmentation final cohérent avec les cellules placées
  • Génération reproductible avec un seed

Installation

pip install pillow opencv-python numpy

Puis copier le dossier mea_composer/ dans ton projet.

Structure des dossiers

ton_projet/
├── mea_composer/          # La librairie
├── layers/
│   ├── cells/             # Sprites de cellules individuelles + leurs masques
│   │                       # Ex: cell_01.png + cell_01_mask.png
│   ├── mockups/           # Images de MEA (fond transparent)
│   └── backgrounds/       # Fonds personnalisés (optionnel)
└── output/                # Résultats générés

Important : chaque cellule individuelle X.png doit avoir son masque X_mask.png dans le même dossier. Le composer pioche N cellules aléatoires par image, les transforme indépendamment, et les place sur le canvas.

Utilisation

Minimal

from mea_composer import Composer

Composer().run()

Par défaut : 50 images de 512×512, avec 3 à 10 cellules par image, 50% de chance de MEA, 50% d'oculaire.

Avec configuration

from mea_composer import Composer, ComposerConfig

config = ComposerConfig(
    total_images=200,
    canvas_size=(1024, 1024),
    cells_per_image_range=(10, 30),  # Beaucoup de cellules par image
    mea_probability=0.7,
    eyepiece_probability=0.3,
    seed=42,
)

Composer(config).run()

Exemples

Dataset varié

ComposerConfig(
    total_images=500,
    cells_per_image_range=(5, 20),
    mea_probability=0.5,
    eyepiece_probability=0.5,
)

Cellules denses, sans MEA

ComposerConfig(
    total_images=100,
    cells_per_image_range=(20, 40),
    mea_probability=0.0,
    eyepiece_probability=1.0,
)

Rendu propre sans filtres

ComposerConfig(
    total_images=50,
    enable_blur=False,
    enable_noise=False,
    enable_brightness=False,
    enable_contrast=False,
    enable_vignette=False,
)

Paramètres principaux

Canvas et quantité

Paramètre Défaut Description
total_images 50 Nombre total d'images à générer
canvas_size (512, 512) Taille du canvas de composition
output_size None Resize final. None = garde canvas_size

Cellules

Paramètre Défaut Description
cells_per_image_range (3, 10) Nombre de cellules par image (min, max)
cell_scale_range (0.5, 1.0) Échelle appliquée à chaque cellule
cell_random_flip True Flip horizontal/vertical aléatoire par cellule
cell_random_rotation True Rotation aléatoire par cellule
cell_rotation_range (0, 360) Plage de rotation en degrés
cell_edge_erosion True Érosion des bords de chaque cellule (grignote le détourage)
cell_edge_erosion_sizes (3, 5) Tailles de noyau pour l'érosion
cell_edge_blur True Flou gaussien des bords pour adoucir le détourage
cell_edge_blur_range (1.0, 2.5) Rayon du flou des bords
cell_opacity_range (0.85, 1.0) Opacité globale aléatoire par cellule (intégration au fond)
max_cell_overlap 1.0 Chevauchement max autorisé entre cellules (0 = disjointes, 0.3 = léger chevauchement, 1.0 = libre)
placement_max_attempts 30 Nb max de tentatives de placement par cellule (utile quand l'overlap est faible et l'espace se sature)

Note : les filtres de bords (érosion, blur, opacité) s'appliquent à l'alpha de composition uniquement. Le masque de segmentation (ground truth) reste net.

Note 2 : si un oculaire est utilisé, toutes les cellules sont automatiquement contraintes à l'intérieur du disque. Pas besoin de réglage particulier.

Probabilités (0-1)

Paramètre Défaut Description
mea_probability 0.5 Probabilité d'ajouter une MEA
eyepiece_probability 0.5 Probabilité d'ajouter un oculaire
background_probability 1.0 Probabilité d'utiliser un fond custom

Filtres (valeurs douces par défaut)

Paramètre Défaut Description
enable_blur True Flou gaussien global
blur_radius_range (0.0, 0.8) Rayon du flou
enable_noise True Bruit gaussien (OpenCV)
noise_intensity_range (0.005, 0.02) Intensité du bruit
enable_brightness True Variation de luminosité
brightness_range (0.9, 1.1) Facteur multiplicatif
enable_contrast True Variation de contraste
contrast_range (0.9, 1.1) Facteur multiplicatif
enable_vignette True Vignettage radial
vignette_strength_range (0.1, 0.3) Intensité du vignettage

Pour des filtres plus marqués, élargir simplement les ranges (ex: noise_intensity_range=(0.02, 0.08)).

MEA

Paramètre Défaut Description
mea_edge_blur True Flou des bords de la MEA
mea_edge_blur_range (2.0, 5.0) Rayon du flou
mea_erosion True Érosion des bords
mea_erosion_sizes (3, 5) Tailles de noyau possibles

Oculaire

Paramètre Défaut Description
eyepiece_radius_ratio_range (0.4, 0.9) Taille relative du cercle
eyepiece_edge_blur True Flou des bords
eyepiece_edge_blur_range (5.0, 13.0) Rayon du flou

Remapping de couleurs

Convertit les cellules ou le fond en grayscale puis remappe sur un gradient entre deux couleurs. Utile pour standardiser un dataset avec des cellules aux couleurs hétérogènes.

Paramètre Défaut Description
enable_cell_recolor False Active le remapping couleur des cellules
cell_color_dark (30, 20, 15) Couleur RGB pour les pixels sombres des cellules
cell_color_light (240, 220, 190) Couleur RGB pour les pixels clairs des cellules
enable_background_recolor False Active le remapping couleur du fond
background_color_dark (60, 55, 50) Couleur sombre du fond
background_color_light (220, 210, 200) Couleur claire du fond

La structure interne est préservée (les détails sombres restent sombres, les clairs restent clairs). Exemple : cell_color_dark=(80, 20, 60) + cell_color_light=(255, 200, 230) donne des cellules en tons rosés.

Artefacts (bruit non-cellulaire)

Ajoute des distracteurs (petits points/taches) sur le fond. Ils n'apparaissent pas dans le masque de segmentation, donc utilisables comme négatifs pour entraîner un modèle à ignorer le bruit.

Paramètre Défaut Description
enable_artifacts False Active l'ajout d'artefacts
artifacts_count_range (10, 30) Nombre d'artefacts par image
artifacts_size_range (1, 5) Rayon de chaque artefact en pixels
artifacts_opacity_range (0.2, 0.7) Opacité des artefacts
artifacts_type "mixed" Type : "dot" (point rond), "speck" (tache), "mixed" (les deux)
artifacts_color (40, 30, 25) Couleur RGB des artefacts

Chemins et output

Paramètre Défaut Description
cells_dir ./layers/cells/ Dossier des sprites de cellules
mea_dir ./layers/mockups/ Dossier des MEA
backgrounds_dir ./layers/backgrounds/ Dossier des fonds
output_dir ./output/ Dossier de sortie
output_format "png" Format de sortie
save_mask True Sauvegarde le masque de vérité
filename_template "composite_{index:04d}" Template des noms
mask_suffix "_mask" Suffixe pour les masques

Divers

Paramètre Défaut Description
seed None Seed pour reproductibilité
verbose True Affiche la progression
progress_every 10 Message tous les N images

API publique

from mea_composer import Composer, ComposerConfig
  • ComposerConfig(**kwargs) : dataclass avec tous les paramètres
  • Composer(config=None) : le générateur
    • .run() -> int : lance la génération, retourne le nombre d'images produites

Fonctionnement interne

Pour chaque image du dataset :

  1. Fond : on pioche un fond aléatoire (ou couleur unie si pas de fond disponible)
  2. Cellules : on tire N entre cells_per_image_range, puis N fois on pioche aléatoirement un sprite, on le transforme (scale, flip, rotation), et on le colle à une position aléatoire sur le canvas. Le masque global est la fusion des masques individuels.
  3. MEA (probabilité mea_probability) : on superpose une grille d'électrodes
  4. Oculaire (probabilité eyepiece_probability) : on ajoute un oculaire noir circulaire, et le masque final est croppé au cercle
  5. Filtres : flou, bruit, brightness, contraste, vignettage
  6. Sauvegarde : image composite + masque de segmentation

Output

Chaque image génère deux fichiers :

  • composite_XXXX.png : l'image composite finale (RGB)
  • composite_XXXX_mask.png : le masque de segmentation (niveaux de gris, 255 = cellule)

About

Public Version of the Dataset Maker

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors