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 physiquesx0,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’axesxunit,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édicalesint16,int32: données signées, images de différencefloat32,float64: mesures scientifiques, résultats calculéscomplex128: 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.