Vue d’ensemble#

Qu’est-ce que Sigima ?#

Sigima est une bibliothèque Python open-source pour le traitement scientifique de signaux et d’images. Elle fournit une approche unifiée et orientée objet pour travailler avec des signaux 1D et des images 2D, combinant la puissance des tableaux NumPy avec des métadonnées riches et des capacités de traitement.

Sigima a été créé à partir de l’externalisation du moteur de calcul de DataLab et constitue maintenant un élément essentiel de l’écosystème DataLab, mais est conçu pour être indépendant de toute interface graphique (et indépendant de DataLab lui-même) et peut être utilisé dans une variété de contextes de calcul scientifique.

Exemple de démarrage rapide#

Voici un exemple simple démontrant le traitement d’images avec des régions d’intérêt (ROI) en utilisant Sigima. Cet exemple utilise le backend matplotlib pour la visualisation, ce qui le rend adapté au web et facile à exécuter dans des notebooks Jupyter.

Voir le notebook interactif complet dans la section Premiers pas.

Pourquoi Sigima ?#

Le traitement de données scientifiques nécessite souvent plus que de simples tableaux numériques. Les applications réelles requièrent :

  • Données contextualisées : unités physiques, systèmes de coordonnées et incertitudes de mesure

  • Flux de travail reproductibles : séparation claire entre les données et la logique de traitement

  • Composants testables : fonctions modulaires qui peuvent être validées indépendamment

  • Intégration flexible : capacité de travailler à la fois avec des objets de haut niveau et des tableaux de bas niveau

Sigima répond à ces besoins en fournissant un cadre structuré qui comble le fossé entre les opérations numériques brutes et l’analyse de données scientifiques. Il est conçu pour être le moteur de traitement des applications scientifiques, en particulier celles nécessitant une exécution sans interface graphique ou des capacités de traitement à distance.

Signaux dans Sigima#

Qu’est-ce qu’un signal ?#

Dans Sigima, un signal est un objet de données 1D représenté par la classe SignalObj. Contrairement à un simple tableau NumPy, un signal contient l’ensemble des informations concernant votre mesure ou calcul.

Composants principaux#

Un signal se compose de :

Données X et Y

Les paires fondamentales coordonnée-valeur qui définissent votre signal. L’axe des x représente généralement la variable indépendante (temps, fréquence, position, etc.) tandis que l’axe des y contient les valeurs mesurées ou calculées.

Barres d’erreur (dx, dy)

Sigima prend en charge nativement la quantification de l’incertitude via des barres d’erreur optionnelles :

  • dx : incertitudes sur la coordonnée x (par exemple, gigue temporelle, incertitude de position)

  • dy : incertitudes sur les valeurs y (par exemple, bruit de mesure, erreurs statistiques)

Ces barres d’erreur se propagent à travers de nombreuses opérations de traitement, vous permettant de suivre l’évolution des incertitudes dans votre pipeline d’analyse.

Métadonnées

Un dictionnaire flexible pour stocker toute information supplémentaire concernant votre signal : paramètres d’acquisition, historique de traitement, constantes physiques ou toute donnée personnalisée dont votre application a besoin.

Unités et étiquettes

Étiquetage clair des grandeurs physiques :

  • xlabel / ylabel : noms descriptifs (par exemple, « Temps », « Température »)

  • xunit / yunit : unités physiques (par exemple, « s », « °C »)

Annotations

Notes ou commentaires définis par l’utilisateur concernant des caractéristiques ou régions spécifiques du signal.

Pourquoi c’est important#

Considérez une mesure de température au cours du temps. Avec un simple tableau NumPy, vous n’avez que des nombres. Avec un signal Sigima, vous avez :

import numpy as np
from sigima.objects import create_signal

# Time points with some uncertainty in timing
time = np.linspace(0, 10, 100)
time_uncertainty = np.full_like(time, 0.01)  # ±10 ms timing jitter

# Temperature measurements with measurement error
temperature = 20 + 5 * np.sin(time) + np.random.normal(0, 0.1, 100)
temp_uncertainty = np.full_like(temperature, 0.1)  # ±0.1°C sensor noise

# Create a signal with full context
signal = create_signal(
    title="Temperature oscillation",
    x=time,
    y=temperature,
    dx=time_uncertainty,
    dy=temp_uncertainty,
    units=("s", "°C"),
    labels=("Time", "Temperature"),
)

# Metadata is automatically preserved through processing
signal.metadata["sensor_id"] = "TC-01"
signal.metadata["location"] = "Lab A"

Cet objet signal peut maintenant être traité, analysé, sauvegardé et chargé tout en préservant son contexte. Lorsque vous appliquez des opérations comme le filtrage, la détection de pics ou les statistiques, les unités, étiquettes et barres d’erreur restent attachées à vos données.

Fonctionnalités spécialisées#

Les signaux Sigima prennent en charge des cas d’usage avancés :

Coordonnées temporelles

Pour les données de séries temporelles, les coordonnées x peuvent représenter des valeurs de date/heure réelles, avec gestion automatique des unités de temps et du formatage.

Opérations ROI

Définissez des régions d’intérêt (ROI) pour traiter ou analyser des portions spécifiques de votre signal de manière indépendante.

Gestion des échelles

Contrôlez les aspects de visualisation comme les échelles logarithmiques et les limites d’axes.

Images dans Sigima#

Qu’est-ce qu’une image ?#

Une image dans Sigima est un objet de données 2D représenté par la classe ImageObj. Comme les signaux, les images vont au-delà des simples tableaux NumPy 2D en fournissant des métadonnées complètes et un support de système de coordonnées.

Composants principaux#

Une image se compose de :

Tableau de données 2D

Les valeurs de pixels formant votre image. Sigima prend en charge divers types de données incluant les entiers non signés (uint8, uint16), les entiers signés (int16, int32), les nombres à virgule flottante (float32, float64) et les nombres complexes (complex128).

Systèmes de coordonnées

Deux types de systèmes de coordonnées sont pris en charge :

  • Coordonnées uniformes : espacement de pixels régulier, courant pour la plupart des systèmes d’imagerie

    • dx, dy : espacement des pixels en unités physiques

    • x0, y0 : coordonnées d’origine

  • Coordonnées non uniformes : espacement de pixels variable pour l’échantillonnage adaptatif ou les grilles irrégulières

    • xcoords, ycoords : tableaux de coordonnées explicites

Métadonnées

Support riche de métadonnées incluant :

  • Intégration de modèles DICOM pour l’imagerie médicale

  • Paires clé-valeur personnalisées pour toute donnée spécifique à l’application

  • Extraction automatique depuis les formats de fichiers courants

Unités et étiquettes

Grandeurs physiques pour les trois dimensions :

  • xlabel, ylabel, zlabel : descriptions d’axes

  • xunit, yunit, zunit : unités physiques

L’axe z représente généralement les valeurs de pixels (intensité, hauteur, température, etc.)

Annotations

Annotations structurées pour documenter les caractéristiques, régions ou étapes de traitement.

Flexibilité des types de données

Contrairement aux signaux (qui sont généralement en float64), les images prennent en charge plusieurs types de données optimisés pour différents cas d’usage :

  • uint8, uint16 : stockage efficace pour les données de caméras, images médicales

  • int16, int32 : données signées, images de différence

  • float32, float64 : mesures scientifiques, résultats calculés

  • complex128 : transformées de Fourier, simulations d’ondes

Pourquoi c’est important#

Considérez des données de microscopie. Un tableau 2D brut vous donne des valeurs de pixels, mais un ImageObj fournit l’image complète :

import numpy as np
from sigima.objects import create_image

# Create a 512x512 microscopy image
data = np.random.poisson(1000, (512, 512)).astype(np.uint16)

image = create_image(
    title="Cell sample - 40x objective",
    data=data,
    units=("μm", "μm", "counts"),
    labels=("X position", "Y position", "Photon counts"),
)

# Set physical coordinate system
# 0.16 μm per pixel, field of view starts at origin
image.set_uniform_coords(dx=0.16, dy=0.16, x0=0.0, y0=0.0)

# Add acquisition metadata
image.metadata["objective"] = "40x"
image.metadata["exposure_time"] = 100  # ms
image.metadata["binning"] = "1x1"
image.metadata["camera_gain"] = 2.5

Les opérations de traitement fonctionnent automatiquement en unités physiques. Les mesures retournent des résultats en micromètres, pas en pixels. Les métadonnées accompagnent vos données tout au long du pipeline d’analyse.

Fonctionnalités spécialisées#

Support natif de multiples formats d’image

Sigima peut lire et écrire directement des images depuis divers formats de fichiers scientifiques et courants, facilitant l’intégration dans les flux de travail existants :

  • Formats courants : BMP, JPEG, PNG, TIFF, JPEG 2000

  • Formats scientifiques : DICOM (imagerie médicale), Andor SIF (caméras de spectroscopie)

  • Échange de données : NumPy (.npy), MATLAB (.mat), HDF5 (.h5img)

  • Basés sur du texte : CSV, TXT, ASC (avec support des métadonnées de coordonnées)

  • Spécialisés : Spiricon (.scor-data), Dürr NDT (.xyz), FT-Lab (.ima)

Chaque format préserve les métadonnées pertinentes lorsqu’elles sont disponibles, comme les en-têtes d’imagerie médicale DICOM ou les paramètres d’acquisition d’instruments scientifiques.

Opérations ROI

Définissez des régions d’intérêt rectangulaires, circulaires ou polygonales pour une analyse ou un traitement localisé.

Tableaux masqués

Support des tableaux masqués NumPy pour gérer les pixels invalides, les régions saturées ou les zones exclues.

Conversion de coordonnées

Conversion transparente entre les indices de pixels et les coordonnées physiques, essentielle pour l’imagerie multi-échelle ou multi-modale.

Différences clés par rapport aux tableaux bruts#

Voici pourquoi les objets Sigima sont plus puissants que les simples tableaux NumPy pour le traitement de données physiques :

Fonctionnalité

Tableau NumPy

Objet Sigima

Stockage de données

Nombres uniquement

Nombres + contexte

Unités

Implicites/externes

Explicites et suivies

Propagation d’erreur

Manuelle

Automatique (lorsque pris en charge)

Métadonnées

Variables séparées

Dictionnaire intégré

Systèmes de coordonnées

Uniquement basé sur les indices

Coordonnées physiques

Sérialisation

Données seules

Contexte complet

Historique de traitement

Perdu

Peut être suivi

Cas d’usage courants#

Sigima excelle dans les scénarios nécessitant :

Instrumentation scientifique

Traitez les données de capteurs, caméras, spectromètres ou tout dispositif de mesure en préservant l’étalonnage, les unités et les paramètres d’acquisition.

Pipelines d’analyse automatisés

Construisez des flux de travail reproductibles qui maintiennent la provenance et le contexte des données à travers plusieurs étapes de traitement.

Traitement à distance

Exécutez le traitement de signaux et d’images sur des serveurs distants ou dans des environnements cloud sans dépendances d’interface graphique.

Moteurs d’application

Fournissez le moteur de calcul pour des logiciels scientifiques, en gardant la logique de traitement indépendante des préoccupations d’interface utilisateur.

Recherche et développement

Développez et validez de nouveaux algorithmes de traitement dans un cadre testable et modulaire.

Connexion avec l’interface graphique#

En tant que moteur de calcul principal externalisé de DataLab, Sigima s’intègre parfaitement avec lui comme élément essentiel de la pile DataLab. Vous pouvez exploiter les puissantes fonctionnalités de traitement de Sigima au sein de l’interface graphique de DataLab, en utilisant par exemple Sigima pour gérer votre acquisition de signaux et d’images et en renvoyant les résultats vers DataLab pour la visualisation et l’analyse interactive approfondie.

Premiers pas#

Pour commencer à utiliser Sigima, consultez :

  • Installation - Installez Sigima dans votre environnement

  • Fonctionnalités - Explorez les principales fonctionnalités et capacités de Sigima

  • Exemples - Exemples pratiques montrant les signaux et images en action

  • API - Référence API complète

Note

Sigima est conçu pour être indépendant de toute interface graphique. Si vous avez besoin d’outils de visualisation et d’analyse interactifs, consultez DataLab, qui utilise Sigima comme moteur de traitement et ajoute une interface graphique complète.