Images & Media

Manipulation d'images et fichiers multimédia.

Pourquoi cette catégorie

Pillow (PIL) couvre les opérations courantes de traitement d'images en Python. Catnip peut l'utiliser pour des transformations, filtres, conversions de format. OpenCV (cv2) va plus loin -- vision par ordinateur sur des tableaux numpy : espaces colorimétriques, détection de contours et de features, morphologie. pyvips construit des pipelines lazy et traite les grandes images par régions sans les matérialiser entièrement en mémoire. SciPy étend la catégorie aux signaux audio : filtrage numérique, analyse fréquentielle et lecture/écriture WAV.

Les pixels ne demandent pas un framework mystique : ils veulent être lus, transformés, puis recrachés dans le bon format.

Cas d'usage : preprocessing pour ML, génération de thumbnails, batch processing.

Exemples

Fichier Module Description
pillow_transforms.cat PIL (Pillow) Transformations, filtres, conversions, batch processing
opencv_vision.cat OpenCV (cv2) Couleurs, pipeline, batch, détourage, contours, features et interop numpy
audio_denoising_spectrogram.cat SciPy + numpy + PIL Débruitage audio, comparaison de filtres, WAV et spectrogrammes
pyvips_film_grain.cat pyvips Color grading lazy, grain argentique et planche avant/après
pyvips_dithering.cat pyvips + numpy Comparaison de trois méthodes de tramage en niveaux de gris
pyvips_ela_forensics.cat pyvips Visualisation pédagogique des erreurs de recompression JPEG
pyvips_steganography.cat pyvips + numpy Encodage LSB dans un PNG et vérification du roundtrip

Exécution

catnip codex/images-media/pillow_transforms.cat
catnip codex/images-media/opencv_vision.cat
catnip codex/images-media/audio_denoising_spectrogram.cat
catnip codex/images-media/pyvips_film_grain.cat
catnip codex/images-media/pyvips_dithering.cat
catnip codex/images-media/pyvips_ela_forensics.cat
catnip codex/images-media/pyvips_steganography.cat

Les exemples qui produisent des images à regarder les ouvrent dans le navigateur via http.serve() — une image seule, ou une planche des sorties pour les exemples multi-images (port local libre, une requête, puis arrêt). --no-browser s'en tient aux fichiers écrits, pour les environnements headless.

Opérations Couvertes

Transformations géométriques :

  • Resize, thumbnail (préserve ratio)
  • Rotation, crop
  • Flip horizontal/vertical

Filtres et effets :

  • Blur, sharpen
  • Contour, edge enhance

Conversions :

  • RGB ↔ Grayscale
  • Changement de format (JPG, PNG)
  • Transparence (RGBA)

Manipulation avancée :

  • Accès/modification de pixels
  • Ajout de texte et formes
  • Statistiques d'image (mean, median, stddev)
  • Traitement par lot avec broadcasting Catnip

Vision par ordinateur (OpenCV)

Espaces colorimétriques :

  • BGR ↔ Grayscale, BGR → HSV et visualisation séparée de ses canaux
  • Séparation des canaux (cv2.split)

Détection :

  • Contours (Canny, findContours)
  • Seuillage binaire et adaptatif
  • Coins / features (Shi-Tomasi)

Filtres et morphologie :

  • Gaussian, median, bilateral
  • Érosion, dilatation, ouverture, fermeture

Pipeline et batch Catnip :

  • Composition séquentielle d'opérations OpenCV avec fold
  • Application du même pipeline à plusieurs variantes avec le broadcasting
  • Génération d'une planche-contact des résultats

Détourage :

  • Initialisation NumPy puis estimation du premier plan avec GrabCut, sans modèle externe
  • Production d'un masque, d'un aperçu sur fond sombre et d'un PNG RGBA transparent

Interop numpy :

  • Les images sont des tableaux numpy : luminosité/contraste, inversion, statistiques par canal
  • Opérations vectorielles directes (255 - img, np.clip)

Traitement lazy (pyvips)

  • Courbe de contraste sigmoïde appliquée par LUT
  • Split toning des ombres et hautes lumières
  • Grain gaussien déterministe modulé par la luminance
  • Vignettage radial construit à partir des coordonnées de l'image
  • Évaluation du pipeline à l'écriture et génération d'une planche avant/après
  • Recompression JPEG en mémoire et comparaison de plusieurs qualités pour l'ELA
  • Chargement, réduction et assemblage lazy d'une planche de dithering
  • Écriture PNG sans perte et relecture indépendante pour vérifier un message LSB

L'ELA met en évidence des différences locales de recompression ; elle ne démontre pas qu'une image a été retouchée. Texture, historique d'encodage et qualité choisie influencent aussi le signal. L'exemple présente donc le résultat comme une visualisation, jamais comme un détecteur de fraude.

Traitement audio

audio_denoising_spectrogram.cat génère un signal harmonique local, puis ajoute un ronflement à 50 Hz et un bruit large bande avec une graine fixe. Trois presets Catnip pilotent les filtres scipy.signal; le meilleur est choisi par rapport au signal propre connu.

L'exemple vérifie le gain de SNR, l'atténuation spectrale à 50 Hz et le roundtrip du WAV après relecture. Il écrit les versions bruitée et filtrée ainsi qu'une planche de spectrogrammes dans codex/images-media/output/. Les opérations de filtrage employées sont décrites dans la référence officielle de scipy.signal.