Version 1.0#
Sigima Version 1.0.6#
🛠️ Correctifs :
Compatibilité avec scikit-image 0.26.0+ : Correction des avertissements de dépréciation et des problèmes de compatibilité API
scikit-image 0.26.0 a introduit des changements majeurs dans les API de
CircleModeletEllipseModel: l’ancienne API utilisaitmodel.estimate(contour)+model.params, la nouvelle API utilisemodel.from_estimate(contour)+ un accès basé sur les propriétés (model.center,model.radius,model.axis_lengths)Ajout d’une couche de compatibilité sensible à la version dans
sigima.tools.image.preprocessingavec de nouvelles fonctions d’aidefit_circle_model()etfit_ellipse_model()qui gèrent les anciennes et nouvelles APIMise à jour de
get_contour_shapes()danssigima.tools.image.detectionpour utiliser les fonctions de compatibilitéMise à jour de
get_enclosing_circle()danssigima.tools.image.geometrypour utiliser les fonctions de compatibilitéUtilisation de
packaging.version.Versionpour une vérification robuste des versions au lieu d’une analyse de chaîne fragileÉlimine les avertissements de dépréciation tout en maintenant la compatibilité ascendante avec Python 3.9 et scikit-image < 0.26
Ceci clôture Issue #10 - Sigima n’est pas compatible avec NumPy 2.4.0 et scikit-image 0.26.0
Compatibilité avec NumPy 2.4.0 : Correction de l’échec du calcul du centroïde avec la nouvelle optimisation einsum de NumPy 2.4.0
NumPy 2.4.0 a introduit une nouvelle optimisation einsum utilisée par
scikit-image.measure.centroid()qui échoue avec certains types de ndarrayCorrection en convertissant explicitement les données d’image en tableau NumPy de base avant d’appeler
measure.centroid()dans la fonctionget_centroid_auto()Assure la compatibilité avec NumPy 2.4.0+ et scikit-image 0.26.0+ sans modifier les résultats de calcul
📦 Dépendances :
Contraintes de version des dépendances : Ajout de contraintes de version maximale pour éviter les futurs problèmes de compatibilité
Mise à jour des spécifications des dépendances :
NumPy >= 1.22, < 2.5,SciPy >= 1.10.1, < 1.17,scikit-image >= 0.19.2, < 0.27,pandas >= 1.4, < 3.0,PyWavelets >= 1.2, < 2.0Le nouveau job CI
build_latestexécute des tests programmés contre les dernières versions des dépendances pour détecter rapidement les changements majeursPermets d’éviter les régressions dues aux mises à jour majeures des dépendances tout en permettant des mises à niveau contrôlées après validation
🚀 Améliorations CI/CD :
Améliorations du workflow CI : Ajout de tests automatisés contre les dernières versions des dépendances
Nouveau job
build_latestdans GitHub Actions s’exécute selon un calendrier (hebdomadaire) et sur demande manuelleExtrait les noms des dépendances de
pyproject.tomlet installe les dernières versions disponiblesFournit un système d’alerte précoce pour les futurs problèmes de compatibilité des dépendances
Amélioration du workflow de déclenchement avec une sélection de jobs configurable pour des scénarios de test flexibles
Sigima Version 1.0.5 (19/12/2025)#
ℹ️ Ceci est une version corrective qui résout un problème d’emballage où les traductions françaises manquaient dans le package de la version précédente. Cette version ne contient aucun changement fonctionnel par rapport à la version 1.0.4 - elle garantit uniquement que les fichiers de traduction compilés (.mo) sont correctement inclus dans le package de distribution.
🛠️ Correctifs :
Packaging : Correction des fichiers de traduction française manquants dans le package de la version précédente
Les packages de la version précédente ne contenaient pas les fichiers de traduction compilés .mo, ce qui faisait que l’application affichait uniquement du texte en anglais quel que soit les paramètres régionaux
Mise à jour du processus de construction pour garantir que tous les fichiers de traduction sont correctement inclus dans les packages de distribution
Aucun changement de code fonctionnel - il s’agit purement d’une correction d’emballage pour restaurer la prise en charge de l’internationalisation
Sigima Version 1.0.4 (18/12/2025)#
🛠️ Correctifs :
Traitement d’image : plage LUT copiée incorrectement dans le résultat : Correction des images traitées affichant un contraste incorrect car la plage LUT a été copiée de l’original
Lors du traitement d’une image (par exemple, en soustrayant un offset), l’image résultante héritait de la plage LUT de l’original (
zscalemin/zscalemax), ce qui entraînait une visualisation incorrecte lorsque les valeurs de données changeaient de manière significativeExemple : Après avoir soustrait un fond d’environ 50 lsb d’une image avec une LUT de 50-200, le résultat (plage de données d’environ -5 à environ 175) était toujours affiché avec la LUT originale de 50-200, rendant certaines parties de l’image coupées ou invisibles
Corrigé en ajoutant des fonctions wrapper spécifiques à l’image
dst_1_to_1,dst_2_to_1etdst_n_to_1danssigima.proc.image.basequi réinitialisent la plage LUT après la copie de l’image sourceLa méthode
ImageObj.copy()reste inchangée (une copie doit copier fidèlement tous les attributs) - la correction est appliquée à la couche de traitement où elle appartientAjout d’un test de régression
test_image_offset_correction_lut_rangedansoffset_correction_unit_test.pyCeci clôture Issue #9 - Plage LUT copiée incorrectement lors du traitement des images
Une ROI rectangulaire définie à l’envers entraîne des statistiques NaN : Correction de la normalisation des coordonnées de ROI rectangulaire lorsqu’elle est définie en sens inverse
Lorsqu’une ROI rectangulaire était dessinée graphiquement « à l’envers » dans DataLab (du coin inférieur droit vers le coin supérieur gauche au lieu du coin supérieur gauche vers le coin inférieur droit), l’analyse statistique retournait des valeurs NaN
La méthode
RectangularROI.rect_to_coords()produisait des valeurs Δx et Δy négatives lorsquex1 < x0ouy1 < y0Corrigé en normalisant les coordonnées avec min/max pour garantir que Δx et Δy sont toujours positifs
La génération du masque de ROI fonctionne désormais correctement quelle que soit la direction dans laquelle le rectangle a été dessiné
Ajout d’un test de régression
test_backwards_drawn_rectangledansroi_coords_unit_test.py
ROI de grille - Paramètres d’espacement manquants pour les grilles non uniformes : Correction de l’extraction ROI de grille pour prendre en charge un espacement des caractéristiques non uniforme
L’extraction ROI de grille supposait auparavant des caractéristiques uniformément réparties (espacement = largeur/nx), ce qui échouait pour les images où les caractéristiques ne remplissent pas toute la zone de la grille
Exemple :
laser_spot_array_raw.pnga des points laser espacés d’environ 300 pixels, mais la grille était définie sur 3100×3100 pixels, ce qui a causé un placement incorrect des ROIAjout des paramètres de pourcentage
xstepetystep(1-200 %, par défaut 100 %) àROIGridParampour spécifier l’espacement entre les centres des ROIMise à jour de la fonction
generate_image_grid_roi()pour utiliser un calcul d’étape séparé :dx_step = dx_cell * p.xstep / 100.0Le calcul de la position utilise désormais :
x0 = src.x0 + (ic + 0.5) * dx_step + xtrans - 0.5 * dx(préservant la compatibilité ascendante)Les valeurs par défaut (100 %) maintiennent le comportement original exact pour les flux de travail existants
Cela permet un placement précis des ROI pour les grilles avec des espaces (par exemple, les tableaux de points laser, les tableaux d’échantillons) en ajustant l’espacement indépendamment de la taille des ROI
Formatage du titre du résultat du signal : Correction du suffixe en double dans les titres des résultats pour les fonctions image-vers-signal
Lors du calcul du profil radial ou d’autres opérations utilisant
new_signal_result, le suffixe (par exemple, les coordonnées du centre) apparaissait deux fois dans le titreExemple :
radial_profile(i019)|center=(192.500, 192.500)|center=(192.500, 192.500)au lieu deradial_profile(i019)|center=(192.500, 192.500)La fonction
new_signal_resultdanssigima/proc/base.pyajoutait le suffixe deux fois : une fois via le formateur et une fois explicitementSuppression de l’ajout redondant du suffixe - la méthode
format_1_to_1_titledu formateur gère déjà correctement le formatage du suffixeAffecte des fonctions telles que
radial_profile,histogramet d’autres conversions image-vers-signalCeci clôture Issue #8 - Suffixe dupliqué dans le titre du résultat lors de l’utilisation de
new_signal_result
Sérialisation HDF5 avec ROI de détection : Correction de l’échec de sauvegarde de l’espace de travail lorsque les images contiennent des ROI générées par la détection de blobs
La sauvegarde de l’espace de travail DataLab au format HDF5 échouait avec
NotImplementedError: cannot serialize 'rectangle' of type <enum 'DetectionROIGeometry'>La fonction
store_roi_creation_metadata()stockait l’énumérationDetectionROIGeometrydirectement dans les attributs de géométrieCorrigé en stockant la valeur chaîne de caractères de l’énumération au lieu de l’objet énumération lui-même
Cela permet une sérialisation HDF5 correcte tout en préservant les informations nécessaires pour que
apply_detection_rois()recrée les ROICeci clôture Issue #7 - La sérialisation HDF5 échoue pour l’énumération de la géométrie ROI de détection
Importation de données numériques CSV : Correction des colonnes numériques interprétées incorrectement comme des valeurs datetime (Issue #6)
Lors de l’importation de fichiers CSV avec de grandes valeurs numériques (par exemple, des fréquences en Hz comme
4.884e+06), les données étaient incorrectement converties en horodatages datetimeLa fonction
pd.to_datetime()interprétait les valeurs numériques comme des nanosecondes depuis l’époque Unix, corrompant les données originalesAjout d’une vérification pour ignorer les colonnes avec des types numériques dans la détection de datetime - les vraies colonnes datetime sont chargées comme type chaîne de caractères (
object)Les données numériques (fréquences, tensions, etc.) sont désormais correctement préservées lors de l’importation CSV
📚 Documentation :
Documentation de l’utilisation des paramètres : Amélioration de la documentation pour les paramètres nécessitant un contexte de signal/image (Issue #5)
Ajout d’une documentation complète expliquant le modèle
update_from_obj()pour les paramètres tels queZeroPadding1DParamClarification que
sigima.paramsest l’emplacement d’importation recommandé pour toutes les classes de paramètresAmélioration de la docstring de la classe
ZeroPadding1DParamavec un exemple d’utilisation et une admonition « Important »Ajout d’une nouvelle section dans le module
sigima.paramsrépertoriant tous les paramètres nécessitantupdate_from_obj()Création d’un nouvel exemple
doc/examples/features/zero_padding.pydémontrant l’initialisation correcte des paramètres
Nouvel exemple de grille ROI : Ajout d’un exemple démontrant la fonctionnalité de grille ROI
Introduction de l’image de test
laser_spot_array.png(grille de points laser 6×6) pour aider à déboguer un problème signalé dans DataLabCréation d’un nouvel exemple
doc/examples/features/roi_grid.pydémontrant la fonctiongenerate_image_grid_roi()L’exemple couvre : le chargement des images, l’extraction des sous-régions, la génération de grilles ROI, la configuration des paramètres de taille/traduction/pas, la compréhension des étiquettes de direction et l’extraction des points individuels
Sigima Version 1.0.3 (03/12/2025)#
🛠️ Correctifs :
Validation du type de données du signal : Correction des tableaux entiers qui n’étaient pas automatiquement convertis en float64
Les tableaux d’entrée entiers sont désormais automatiquement convertis en float64 au lieu de générer des erreurs
La validation est appliquée de manière cohérente à tous les accesseurs de données de signal :
set_xydata(),x,y,dx,dyAméliore l’utilisabilité en acceptant les entrées entières (courantes dans les données de test et les valeurs d’étalonnage) tout en maintenant la précision de calcul
Lève une exception
ValueErrorclaire pour les types de données vraiment invalides avec un message d’erreur utile répertoriant les types valides
Étalonnage de l’axe des signaux : Ajout de la fonction
replace_x_by_other_y()pour remplacer les coordonnées X d’un signal par les valeurs Y d’un autre signalRépond à un manque de fonctionnalité pour l’étalonnage en longueur d’onde et des cas d’utilisation similaires où les données d’étalonnage sont stockées dans les valeurs Y d’un signal séparé
Cette opération était auparavant impossible, même si la fonctionnalité ambiguë du mode X-Y existait et semblait liée à ce cas d’utilisation (mais cette fonctionnalité effectue un rééchantillonnage/interpolation, ce qui n’est pas souhaité ici)
La nouvelle fonction utilise directement les tableaux Y des deux signaux sans interpolation, nécessitant que les signaux aient le même nombre de points
A partir de deux signaux en entrée : le premier fournit les données Y pour la sortie, le second fournit les données Y qui deviendront les coordonnées X
Transfert automatique des métadonnées : étiquette/unité X à partir de l’étiquette/unité Y du second signal, étiquette/unité Y préservée du premier signal
Cas d’utilisation typique : étalonnage en longueur d’onde en spectroscopie (combiner les mesures d’absorption avec l’échelle de longueur d’onde)
Ceci clôture Issue #4 - Fonctionnalité manquante : Remplacer les coordonnées X par les valeurs Y d’un autre signal pour l’étalonnage
Formatage des titres de signaux :
Titres de signaux polynomiaux : Correction de la génération des titres de signaux polynomiaux pour afficher une notation mathématique (par exemple,
1+2x-3x²+4x³) au lieu d’une liste de paramètres verbeuse (par exemple,polynomial(a0=1,a1=2,a2=-3,a3=4,a4=0,a5=0))La méthode
PolyParam.generate_title()construit désormais des expressions mathématiques appropriées avec une gestion correcte des signes, une simplification des coefficients (par exemple,xau lieu de1x,-xau lieu de-1x) et une notation des exposants utilisant le symbole^Améliore la lisibilité dans l’interface graphique de DataLab et les listes de signaux en présentant les polynômes sous une forme mathématique standard
Les coefficients nuls sont automatiquement omis de l’expression (par exemple,
1+x+x³lorsque a2=0)Gère les cas limites, y compris les polynômes tous nuls (renvoie
"0"), les termes uniques et les coefficients négatifsCeci clôture Issue #3 - Les titres des signaux polynomiaux doivent utiliser une notation mathématique au lieu d’une liste de paramètres
Extraction de données ROI :
Correction de l’erreur
ValueError: zero-size array to reduction operation minimum which has no identitylors du calcul des statistiques sur des images avec ROI s’étendant au-delà des limites de la zone de dessinLa méthode
ImageObj.get_data()limite désormais correctement les boîtes englobantes des ROI aux limites de l’imageLorsqu’une ROI est complètement en dehors des limites de l’image, renvoie un tableau 1x1 entièrement masqué (contenant NaN) pour éviter les erreurs de tableau de taille zéro dans les calculs statistiques
Les ROI partiellement superposées sont correctement gérées en limitant les coordonnées aux plages valides de l’image
Ce correctif garantit un calcul statistique robuste quel que soit la position de la ROI par rapport aux limites de l’image
Ceci clôture Issue #1 -
ValueErrorlors du calcul des statistiques sur ROI s’étendant au-delà des limites de l’image
Sigima Version 1.0.2 (12/11/2025)#
✨ Nouvelles fonctionnalités et améliorations:
Nouveaux types d’images paramétriques : Ajout de cinq nouveaux types de génération d’images paramétriques pour les tests et l’étalonnage
Motif en damier : Carrés alternés pour l’étalonnage de la caméra et l’analyse de la fréquence spatiale. Les paramètres incluent la taille des carrés, le décalage et les valeurs min/max
Réseau sinusoïdal : Test de la réponse en fréquence avec des fréquences spatiales configurables (fx, fy), phase, amplitude et offset DC
Motif en anneau : Anneaux circulaires concentriques pour l’analyse radiale. Période, largeur, position centrale et plage d’amplitude configurables
Étoile de Siemens : Motif de test de résolution avec des rayons radiaux. Les paramètres incluent le nombre de rayons, le rayon intérieur/extérieur, la position centrale et la plage de valeurs
Fonction sinc 2D : Modélisation PSF/diffraction avec la fonction sinus cardinal. Amplitude, centre, facteur d’échelle (sigma) et offset DC configurables
Propriété GeometryResult.value : Nouvelle propriété de commodité pour un accès facile aux valeurs géométriques calculées dans les scripts
Prend en charge les formes POINT, MARKER et SEGMENT
Renvoie un tuple
(x, y)pour les formes POINT et MARKER (les deux coordonnées accessibles)Renvoie une longueur
floatpour les formes SEGMENT (calculée viasegments_lengths())Annotation de type de retour :
float | tuple[float, float]Fournit une API intuitive : déballer les coordonnées avec
x, y = result.valueou obtenir la longueur aveclength = result.valueGestion complète des erreurs pour les formes non prises en charge et les résultats à plusieurs lignes
Les fonctions d’analyse de signal renvoient GeometryResult : Modification de
x_at_y()ety_at_x()pour renvoyer des résultats géométriques pour une meilleure visualisationx_at_y()renvoie désormaisGeometryResultavec le typeMARKER(au lieu deTableResult)y_at_x()renvoie désormaisGeometryResultavec le typeMARKER(au lieu deTableResult)Les deux fonctions renvoient les coordonnées sous la forme d’un tableau N×2 pour l’affichage des marqueurs croisés
Permet une visualisation correcte des marqueurs dans l’interface graphique de DataLab (affichés comme des marqueurs croisés sur les graphiques)
API conviviale pour les scripts : utilisez la propriété
.valuepour extraire facilement les coordonnées sous forme de tuple(x, y)Exemple :
x, y = proxy.compute_x_at_y(params).valuefournit un accès direct aux deux coordonnéesChangement majeur : Les scripts accédant aux résultats sous forme de tableaux doivent être mis à jour pour utiliser la propriété
.valueou le tableau.coords
🛠️ Correctifs :
Fonctions de détection :
Détection de contours : Suppression du support de création de ROI dans
ContourShapeParam, car cela n’a pas de sens pour les cas d’utilisation de détection de contours. La classeContourShapeParamn’hérite plus deDetectionROIParam, et la fonctioncontour_shape()n’appelle plusstore_roi_creation_metadata(). La création de ROI reste disponible pour d’autres méthodes de détection (détection de blobs, détection de pics 2D) où cela est approprié.Gestion des erreurs de création de ROI : Amélioration de la gestion des erreurs dans la fonction
create_image_roi_around_points()pour fournir des messages d’erreur plus clairs :Lève désormais une exception
ValueErrorlorsque la taille de ROI calculée est trop petite (points trop proches les uns des autres)Messages d’erreur améliorés pour aider les utilisateurs à comprendre la cause des échecs
Valide le paramètre de géométrie de ROI de manière plus explicite
Meilleure gestion des cas limites dans le dimensionnement automatique des ROI
API publique :
La méthode
BaseObj.roi_has_changeda été rendue privée (en la renommant enBaseObj.__roi_has_changed) pour éviter une utilisation externe accidentelle. Cela interférerait avec le mécanisme interne de rafraîchissement des masques qui repose sur un accès contrôlé à cette méthode. La méthode ne fait pas partie de l’API publique et ne doit pas être appelée directement par les applications.
Sigima Version 1.0.1 (05/11/2025)#
✨ Nouvelles fonctionnalités et améliorations:
Création de ROI de détection : Mécanisme générique de création de ROI pour toutes les fonctions de détection
Nouvelle classe de paramètres
DetectionROIParamfournissant des champs de création de ROI standardiséscreate_rois: Indicateur booléen pour activer/désactiver la création de ROI (par défaut : Faux)roi_geometry: Enum sélectionnant la forme de la ROI (RECTANGLE ou CIRCLE, par défaut : RECTANGLE)
Nouvel énuméré
DetectionROIGeometrydanssigima.enumsavec les options RECTANGLE et CIRCLEToutes les classes de paramètres de détection héritent désormais de
DetectionROIParam:Peak2DDetectionParam: Détection de pics 2DContourShapeParam: Ajustement de la forme du contourBlobDOGParam,BlobDOHParam,BlobLOGParam,BlobOpenCVParam: Méthodes de détection de blobsHoughCircleParam: Détection de cercles de Hough
Nouvelle fonction d’assistance
store_roi_creation_metadata():Stocke l’intention de création de ROI dans le dictionnaire
GeometryResult.attrsAppelée dans les fonctions de calcul pour communiquer les préférences de ROI
Ne contrevient pas à la pureté de la fonction (pas de modification d’objet)
Nouvelle fonction d’assistance
apply_detection_rois():Crée des ROIs sur des objets d’image en fonction des métadonnées
GeometryResult.attrsRenvoie
Truesi des ROI ont été créées,FalsesinonGère les géométries rectangulaires et circulaires
Calcule automatiquement la taille optimale de la ROI en fonction de l’espacement des caractéristiques
Peut être appelé par des applications en dehors des fonctions de calcul
L’architecture basée sur les métadonnées maintient la séparation des concepts :
Les fonctions de calcul restent pures (pas d’effets de bord)
Les applications contrôlent quand/comment les ROI sont créées
Fonctionne sans problème avec les moteurs de traitement parallèle (par exemple, les processeurs DataLab)
Couverture de test complète avec l’assistant
validate_detection_rois()dans la suite de tests
Injection automatique de
func_namepour les objets de résultatLe décorateur
@computation_functioninjecte désormais automatiquement le nom de la fonction dans les objetsTableResultetGeometryResultLorsqu’une fonction de calcul renvoie un objet de résultat avec
func_name=None, le décorateur le définit au nom de la fonction en utilisantdataclasses.replace()Garantit l’attribution systématique de
func_namepour un suivi et un affichage appropriés des résultatsL’implémentation utilise la vérification directe de type
isinstance()pourTableResultetGeometryResultS’applique à la fois au wrapper principal du décorateur (avec les paramètres DataSet) et au wrapper de passage simple
Élimine le besoin d’attribution manuelle de
func_namedans les fonctions de calcul
Utilitaire de création de ROI d’image : Nouvelle fonction
create_image_roi_around_points()danssigima.objects.image.roiCrée des ROI rectangulaires ou circulaires autour d’un ensemble de coordonnées de points
Calcule automatiquement la taille optimale de la ROI en fonction de la distance minimale entre les points
Gère les conditions de bord pour maintenir les ROI dans des coordonnées d’image valides
Prend en charge les types de géométrie « rectangle » et « cercle »
Conçu pour créer des ROI autour des caractéristiques détectées (pics, blobs, etc.)
Centralise la logique de création de ROI précédemment dupliquée dans les applications
API d’annotations : Nouvelle API publique pour la gestion des annotations sur les objets Signal et Image
Ajout de la méthode
get_annotations(): Renvoie une liste d’annotations au format JSON versionnéAjout de la méthode
set_annotations(annotations): Définit les annotations à partir d’une liste (remplace les annotations existantes)Ajout de la méthode
add_annotation(annotation): Ajoute une seule annotation à l’objetAjout de la méthode
clear_annotations(): Supprime toutes les annotations de l’objetAjout de la méthode
has_annotations(): Renvoie True si l’objet a des annotationsLes annotations sont stockées dans les métadonnées de l’objet avec un support de versionnage (actuellement version « 1.0 »)
Chaque annotation est un dictionnaire avec des clés telles que
type,item_classetitem_json(par exemple)Fournit une séparation claire entre le stockage générique des annotations et les détails spécifiques à la visualisation
Permet aux applications de gérer les annotations de tracé (formes, étiquettes, etc.) indépendamment des ROI
Entièrement compatible avec le modèle d’adaptateur PlotPy de DataLab pour la visualisation
🛠️ Correctifs :
Détection de pics 2D : Correction d’une violation architecturale dans la fonction de calcul
peak_detection()Suppression de la création directe de ROI dans la fonction de calcul (modifiait les objets d’entrée)
Les fonctions de calcul décorées avec
@computation_function()doivent être pures (pas d’effets de bord)Suppression de la ligne 128 :
obj.roi = create_image_roi(...)qui contrevenait à ce principeLa création de ROI est désormais gérée par les applications dans leur couche de présentation
DataLab utilise la nouvelle utilité
create_image_roi_around_points()à cet effetMaintient la séparation des concepts : Sigima calcule les résultats, les applications créent des représentations visuelles
Corrige la régression où les ROI n’apparaissaient pas dans le flux de travail basé sur les processeurs de DataLab
Classes de paramètres : Suppression des titres par défaut des classes génériques
OrdinateParametAbscissaParamCes classes de paramètres sont réutilisées dans plusieurs fonctions de calcul (par exemple,
full_width_at_y,x_at_y)Des titres par défaut comme « Ordinate » créaient une redondance lorsqu’ils étaient affichés avec les noms de fonction dans les résultats d’analyse.
Les titres sont désormais vides par défaut, permettant aux applications de fournir des titres spécifiques au contexte si nécessaire.
Améliore la clarté lorsque la même classe de paramètres est utilisée par différentes fonctions.
Représentation HTML des résultats : amélioration du contraste des couleurs pour le mode sombre
Changement de la couleur du titre des résultats dans les méthodes
to_html()de bleu standard (#0000FF) à une teinte plus claire (#5294e2)Affecte la sortie HTML de TableResult et GeometryResult
Offre une meilleure visibilité en mode sombre tout en maintenant une bonne apparence en mode clair
Améliore la lisibilité lorsque les résultats sont affichés dans des applications avec des thèmes sombres
Correction de l’extraction des caractéristiques des impulsions avec des signaux ROI. Lors de l’extraction des caractéristiques des impulsions à partir de signaux avec des ROI, les paramètres de plage de début/fin (qui s’appliquent au signal complet) étaient utilisés sur les données extraites des ROI, ce qui entraînait des résultats incorrects. Désormais,
extract_pulse_features()détecte lorsque les plages de paramètres sont en dehors de la plage x de la ROI et passe automatiquement en mode de détection automatique. De plus,extract_pulse_features()danssigima.tools.signal.pulseinitialise désormais correctement les plagesNoneen utilisantget_start_range()etget_end_range()avec le paramètrefraction. Cela garantit que les caractéristiques des impulsions extraites d’un signal avec des ROI correspondent aux caractéristiques extraites des signaux ROI extraits individuellement.Correction de l’extraction des ROI pour les signaux : les ROI ne sont plus copiées vers les signaux de destination lors de l’extraction des ROI. Lors de l’utilisation de
extract_roi()ouextract_rois(), les signaux extraits n’ont désormais aucune ROI définie, ce qui est le comportement attendu puisque les données extraites représentent déjà la ROI elle-même. Cela corrige le problème où les signaux extraits hériterait des définitions de ROI du signal source.Correction de l’extraction des caractéristiques des impulsions pour qu’elle soit exclusive aux ROI lorsque des ROI sont définies. Auparavant,
TableKind.PULSE_FEATUREScalculait incorrectement les résultats à la fois pour l’objet entier et pour chaque ROI. Cela n’avait pas de sens pour l’analyse des impulsions, où la définition des ROI indique la présence de plusieurs impulsions, rendant les caractéristiques de l’objet entier non pertinentes. Désormais,PULSE_FEATUREScalcule correctement uniquement sur les ROI lorsqu’elles existent, sinon sur l’objet entier.TableKind.STATISTICSetTableKind.CUSTOMconservent le comportement attendu (objet entier + ROI).Correction de
ValueErrordanschoose_savgol_window_auto()lors du traitement de petits tableaux de données (par exemple, des segments ROI). La fonction contraint désormais correctement la longueur de la fenêtre Savitzky-Golay à être strictement inférieure à la taille du tableau, comme l’exige l’optionmode='interp'de scipy. Cela corrige le problème lors de l’extraction des caractéristiques des impulsions à partir de petits segments ROI dans les signaux.Modification de
RadialProfileParampour permettre l’initialisation de l’ensemble de données même lorsque l’objet image associé n’est pas encore défini (appel àupdate_from_obj). Cela est utile lors de la création de l’objet paramètre avant d’assigner l’image, permettant des flux de travail plus flexibles.Suppression de la fonction inutilisée
signals_to_array()du modulesigima.proc.signal.arithmetic. Cette fonction n’était utilisée nulle part dans la base de code et a été remplacée par une construction directe de tableau NumPy dans les fonctions__signals_y_to_array()et__signals_dy_to_array(), pour un usage interne uniquement.Méthodes de définition des coordonnées ROI : Correction des bogues dans les méthodes
set_physical_coords()etset_indices_coords()Correction de
RectangularROI.set_physical_coords(): Maintenant, les coordonnées sont correctement stockées au format delta[x0, y0, dx, dy]au lieu du format coin[x0, y0, x1, y1]lorsqueindices=TrueCorrection de
BaseSingleROI.set_indices_coords(): Maintenant, le paramètre d’entréecoordsest correctement converti au lieu deself.coordslorsqueindices=FalseCes méthodes ont été implémentées pour compléter l’API mais n’ont pas été utilisées dans la base de code Sigima/DataLab
Ajout de tests unitaires complets couvrant tous les types de ROI (rectangulaire, circulaire, polygonal) et les cas limites
Sigima Version 1.0.0 (28/10/2025)#
✨ Nouvelles fonctionnalités et améliorations:
Conversion de signaux en image : Nouvelle fonctionnalité pour combiner plusieurs signaux en une image 2D
Nouvelle fonction de calcul
signals_to_image()danssigima.proc.signal.arithmeticPrend une liste de signaux et les combine en une image en empilant des tableaux Y
Deux modes d’orientation :
Lignes : Chaque signal devient une ligne dans l’image (par défaut)
Colonnes : Chaque signal devient une colonne dans l’image
Normalisation facultative :
Prend en charge plusieurs méthodes de normalisation (Z-score, Min-Max, Maximum)
Normalise chaque signal indépendamment avant l’empilement
Utile pour visualiser des signaux avec différentes plages d’amplitude
Valide que tous les signaux ont la même taille avant de les combiner
Nouvelle classe de paramètres
SignalsToImageParamavec des paramètres d’orientation et de normalisationNouvel énuméré
SignalsToImageOrientationpour spécifier l’orientation des lignes/colonnesTests de validation complets pour toutes les combinaisons de paramètres
Idéal pour créer des spectrogrammes, des cartes thermiques ou des affichages en cascade à partir de collections de signaux
Prise en charge des coordonnées non uniformes pour les images : Ajout d’une prise en charge complète des coordonnées de pixels non uniformes
ImageObjprend désormais en charge les systèmes de coordonnées uniformes et non uniformes :Coordonnées uniformes : définies par l’origine (
x0,y0) et l’espacement des pixels (dx,dy)Coordonnées non uniformes : définies par des tableaux de coordonnées (
xcoords,ycoords)
Nouvelles méthodes pour la manipulation des coordonnées :
set_coords(): Définir les tableaux de coordonnées X et Y non uniformesis_uniform_coords: Propriété pour vérifier si les coordonnées sont uniformes
set_uniform_coords(): Nouvelle fonction de calcul pour convertir les coordonnées non uniformes en coordonnées uniformesExtrait automatiquement l’espacement uniforme des tableaux non uniformes
Gère les problèmes de précision numérique des tableaux générés par linspace
Préserve les données d’image lors de la transformation du système de coordonnées
Amélioration de la fonction
calibration()avec prise en charge des polynômes :Prend désormais en charge l’étalonnage polynomial jusqu’à l’ordre cubique :
dst = a0 + a1*src + a2*src² + a3*src³La classe de paramètres est passée de
a, b(linéaire) àa0, a1, a2, a3(polynomiale)Fonctionne sur l’axe X, l’axe Y (création de coordonnées non uniformes) et l’axe Z (valeurs de données)
L’étalonnage linéaire est un cas particulier avec
a2=0, a3=0Gère automatiquement la conversion entre les systèmes de coordonnées uniformes et non uniformes
Support I/O amélioré :
Le format HDF5 prend désormais en charge la sérialisation/désérialisation des coordonnées non uniformes
Les fichiers texte coordonnés prennent en charge les tableaux de coordonnées non uniformes
Toutes les opérations géométriques ont été mises à jour pour gérer les deux types de coordonnées :
Les transformations de coordonnées préservent ou créent un système de coordonnées approprié
Les opérations ROI fonctionnent sans problème avec des coordonnées uniformes et non uniformes
Prise en charge des DateTime pour les données de signal : Ajout d’une gestion complète des DateTime pour les données de l’axe X du signal
Détection et conversion automatiques des colonnes datetime lors de la lecture des fichiers CSV
Détecte les valeurs datetime dans la première ou la deuxième colonne (gestion des colonnes d’index)
Valide le format datetime et garantit des plages de dates raisonnables (post-1900)
Convertit les chaînes datetime en timestamps flottants pour un calcul efficace
Préserve les métadonnées datetime pour un affichage et une exportation appropriés
Nouvelles méthodes
SignalObjpour la manipulation des datetime :set_x_from_datetime(): Convertit les objets/chaînes datetime en données X de signal avec des unités de temps configurables (s, ms, μs, ns, min, h)get_x_as_datetime(): Récupère les valeurs X sous forme d’objets datetime pour l’affichage ou l’exportationis_x_datetime(): Vérifie si le signal contient des données datetime
Export CSV amélioré pour préserver le format datetime lors de l’écriture de signaux avec un axe X datetime
Nouveau module de constantes (
sigima.objects.signal.constants) définissant les clés de métadonnées datetime et les facteurs de conversion des unités de tempsTests unitaires complets couvrant la conversion datetime, le roundtrip I/O et les cas limites
Fichier de données de test exemple avec des données de logger de température/humidité du monde réel (
datetime.txt)
Nouveau sous-paquet client : Fonctionnalité client DataLab migrée vers
sigima.clientAjout de
sigima.client.remote.SimpleRemoteProxypour la communication XML-RPC avec DataLabAjout de
sigima.client.base.SimpleBaseProxyen tant que classe de base abstraite pour les proxys DataLabAjout de tests unitaires complets et de documentation API
Maintient le principe de conception sans interface graphique (composants GUI exclus)
Permet le contrôle à distance de l’application DataLab depuis des scripts Python et des notebooks Jupyter
La fonctionnalité client est désormais directement accessible :
from sigima import SimpleRemoteProxy
Nouvelle fonctionnalité de ROI d’image : Ajout de la fonctionnalité ROI inverse pour les ROIs d’image
Ajout du paramètre
insideà la classe de baseBaseSingleImageROI, héritée par tous les types de ROI d’image (PolygonalROI,RectangularROI,CircularROI)Lorsque
inside=True, le ROI représente la région à l’intérieur de la forme (comportement inversé)Lorsque
inside=False(par défaut), le ROI représente la région à l’extérieur de la forme (comportement original)Entièrement intégré à la sérialisation (
to_dict/from_dict) et à la conversion de paramètres (to_param/from_param)Les ROIs de signal (
SegmentROI) ne sont pas affectées car le concept ne s’applique pas aux intervalles 1D.Architecture optimale sans duplication de code - toute la fonctionnalité
insideest implémentée une seule fois dans la classe de base.Les classes ROI individuelles n’ont plus besoin de constructeurs personnalisés, héritant directement de la classe de base.
Nouvelle opération d’image :
Convolution.
Nouveau support de format d’image :
Fichiers image texte avec coordonnées : Ajout de la prise en charge de la lecture des fichiers texte coordonnés (extension
.txt), similaires au format d’image Matris.Prend en charge à la fois les données d’image réelles et à valeurs complexes avec des images d’erreur facultatives.
Gère automatiquement les valeurs NaN dans les données.
Lit les métadonnées, y compris les unités (X, Y, Z) et les étiquettes, à partir des en-têtes de fichiers.
Nouvelles fonctionnalités d’analyse de l’image :
Projections horizontale et verticale
Calcule le profil de projection horizontale en sommant les valeurs le long de l’axe y (
sigima.proc.image.measurement.horizontal_projection).Calcule le profil de projection verticale en sommant les valeurs le long de l’axe x (
sigima.proc.image.measurement.vertical_projection).
Nouveaux algorithmes de courbe d’ajustement: Cadre complet d’ajustement de courbe avec le module
sigima.tools.signal.fitting:Fonctions d’ajustement de base: Ensemble complet d’algorithmes d’ajustement de courbe pour l’analyse de données scientifiques :
linear_fit: Ajustement de régression linéairepolynomial_fit: Ajustement polynomial avec degré configurablegaussian_fit: Ajustement de profil gaussien pour l’analyse de picslorentzian_fit: Ajustement de profil lorentzien pour la spectroscopievoigt_fit: Ajustement de profil Voigt (convolution des profils gaussien et lorentzien)exponential_fit: Ajustement exponentiel simple avec protection contre les débordementspiecewiseexponential_fit: Ajustement exponentiel par morceaux (croissante-décroissante) avec estimation avancée des paramètresplanckian_fit: Ajustement planckien (radiation du corps noir) avec mise en œuvre physique correctetwohalfgaussian_fit: Ajustement de pic asymétrique avec des paramètres gauche/droite séparésmultilorentzian_fit: Ajustement Lorentzien multi-pic pour des spectres complexessinusoidal_fit: Ajustement sinusoïdal avec estimation de fréquence basée sur FFTcdf_fit: Ajustement de la fonction de distribution cumulative utilisant la fonction d’erreursigmoid_fit: Ajustement de la fonction sigmoïde (logistique) pour les courbes en S
Ajustement exponentiel par morceaux (croissante-décroissante) avancé: Algorithme amélioré avec :
Modèle standard exponentiel par morceaux :
y = a_left*exp(b_left*x) + a_right*exp(b_right*x) + y0Stratégie d’optimisation multi-démarrage pour une convergence robuste vers le minimum global
Prise en charge des taux exponentiels positifs et négatifs (composantes de croissance et de décroissance)
Validation complète des limites des paramètres pour éviter les erreurs d’optimisation
Ajustement de pic asymétrique amélioré:
twohalfgaussian_fitavancé avec :Offsets de base séparés pour les côtés gauche et droit (
y0_left,y0_right)Paramètres d’amplitude indépendants (
amp_left,amp_right) pour un meilleur modélisation asymétriqueEstimation robuste de la ligne de base utilisant des méthodes basées sur les percentiles
Fonctionnalités techniques: Toutes les fonctions d’ajustement incluent :
Estimation automatique des paramètres initiaux à partir des caractéristiques des données
Application correcte des limites garantissant la stabilité de l’optimisation
Gestion complète des erreurs et validation des paramètres
Structures de paramètres basées sur des classes de données cohérentes
Couverture de test complète avec validation des données synthétiques et expérimentales
Nouvelles fonctionnalités communes signal/image :
Ajout de la fonctionnalité
phase(argument) pour extraire les informations de phase des signaux ou des images complexes.Ajout de l’opération pour créer un signal/image à valeurs complexes à partir des parties réelle et imaginaire.
Ajout de l’opération pour créer un signal/image à valeurs complexes à partir de l’amplitude et de la phase.
Écart-type des signaux ou images de la sélection (ceci complète la fonctionnalité « Moyenne »).
Générer un nouveau signal ou une nouvelle image : bruit de Poisson.
Ajouter du bruit aux signaux ou images sélectionnés.
Du bruit gaussien, de Poisson ou uniforme peut être ajouté.
Nouvelles fonctions utilitaires pour générer des noms de fichiers.
Déconvolution dans le domaine fréquentiel.
Nouvelles fonctionnalités de ROI:
Amélioration de la gestion du titre de la ROI unique, en utilisant un titre par défaut basé sur l’index de la ROI lorsque aucun titre n’est fourni.
Ajout de la méthode
combine_withaux objets ROI (SignalROIetImageROI) pour renvoyer un nouvel ROI qui combine le ROI actuel avec un autre (union) et gère les ROIs en double.Transformations de ROI d’image:
Avant ce changement, les ROI d’image étaient supprimées après l’application de chaque fonction de calcul unique.
Maintenant, les fonctions de calcul géométrique préservent les informations de ROI à travers les transformations: les ROIs transformées sont automatiquement mises à jour dans l’objet image.
Coordonnées de ROI d’image:
Avant ce changement, les coordonnées de ROI d’image étaient définies par défaut à l’aide d’indices.
Maintenant,
ROI2DParamutilise des coordonnées physiques par défaut.Les ROI peuvent toujours être définies à l’aide d’indices (en utilisant la fonction
create_image_roi).
Grille de ROI d’image:
Nouvelle fonction
generate_image_grid_roi: crée une grille de ROIs à partir d’une image, avec des paramètres personnalisables pour la taille de la grille, l’espacement et la nomination.Cette fonction permet d’extraire facilement plusieurs ROIs d’une image de manière structurée.
Les paramètres sont gérés via la classe
ROIGridParam, qui fournit un moyen pratique de spécifier les propriétés de la grille:nx/ny: Nombre de cellules de grille dans la direction X/Y.xsize/ysize: Taille de chaque cellule de grille en pixels.xtranslation/ytranslation: Translation de la grille en pixels.xdirection/ydirection: Direction de la grille (croissante/décroissante).
Nouvelles fonctionnalités de traitement d’image:
Nouvelle fonctionnalité de « Rééchantillonnage 2D » :
Cette fonctionnalité permet de rééchantillonner des images 2D vers une nouvelle grille de coordonnées à l’aide d’une interpolation.
Elle prend en charge deux modes de rééchantillonnage : la taille des pixels et la forme de sortie.
Plusieurs méthodes d’interpolation sont disponibles : linéaire, cubique et plus proche voisin.
Le paramètre
fill_valuecontrôle la manière dont les pixels hors limites sont gérés, avec prise en charge des valeurs numériques ou de NaN.La conversion automatique du type de données garantit une gestion appropriée des NaN pour les images entières.
Elle est implémentée dans la fonction
sigima.proc.image.resamplingavec des paramètres définis dansResampling2DParam.
Nouvelle fonctionnalité de « Filtre fréquentiel gaussien » :
Cette fonctionnalité permet de filtrer une image dans le domaine fréquentiel à l’aide d’un filtre gaussien.
Elle est implémentée dans la fonction
sigima.proc.image.frequency_domain_gaussian_filter.
Nouvelle fonctionnalité « Gommage »:
Cette fonctionnalité permet de gommer une zone de l’image en utilisant la valeur moyenne de l’image.
Elle est implémentée dans la fonction
sigima.proc.image.erase.La zone gommée est définie par un paramètre de région d’intérêt (ROI).
Exemple d’utilisation:
import numpy as np import sigima.objects as sio import sigima.proc.image as sipi obj = sio.create_image("test_image", data=np.random.rand(1024, 1024)) p = sio.ROI2DParam.create(x0=600, y0=800, width=300, height=200) dst = sipi.erase(obj, p)
Par défaut, le regroupement de pixels modifie la taille des pixels.
Amélioration de l’estimation du centroïde:
La nouvelle méthode
get_centroid_autoimplémente une stratégie adaptative qui choisit entre le centroïde basé sur Fourier et un repli plus robuste (scikit-image), en fonction de l’accord avec une référence basée sur le profil projeté.Introduction de la fonction
get_projected_profile_centroidpour une estimation robuste via des projections 1D (médiane ou barycentrique), offrant une grande précision même avec des images tronquées ou bruyantes.Ces changements améliorent la précision et la stabilité du centroïde dans les cas extrêmes (par exemple, disques tronqués ou taches décentrées), tout en préservant la robustesse au bruit.
Voir l”issue DataLab #251 pour plus de détails.
Nouvelles fonctionnalités de traitement du signal:
Nouvelle fonctionnalité de « Filtre fréquentiel idéal » :
Cette fonctionnalité permet de filtrer un signal dans le domaine fréquentiel à l’aide d’un filtre idéal.
Elle est implémentée dans la fonction
sigima.proc.signal.frequency_filter, parmi les autres fonctionnalités de filtrage dans le domaine fréquentiel (Bessel,Butterworth, etc.).
Amélioration du remplissage de zéros pour prendre en charge l’ajout au début et à la fin. Changement de la stratégie par défaut vers la prochaine puissance de 2.
Algorithmes d’analyse des impulsions: Cadre complet d’extraction des caractéristiques des impulsions dans le module
sigima.tools.signal.pulse:Fonctions d’analyse des impulsions de base: Ensemble complet d’algorithmes pour la caractérisation des impulsions en escalier et carrées :
extract_pulse_features: Fonction principale pour l’extraction automatisée des caractéristiques des impulsionsheuristically_recognize_shape: Détection intelligente du type de signal (escalier, carré ou autre)detect_polarity: Détection robuste de la polarité utilisant l’analyse de la ligne de base
Extraction avancée des paramètres temporels: Algorithmes de mesure précis pour :
Calculs du temps de montée et de descente avec des rapports de début/fin configurables (par exemple, 10%-90%)
Paramètres temporels à des fractions spécifiques (x10, x50, x90, x100) de l’amplitude du signal
Calcul de la largeur à mi-hauteur (FWHM) pour les impulsions carrées
Mesure de la durée de l’impulsion pour la caractérisation des impulsions
Capacités d’analyse de la ligne de base: Méthodes statistiques pour :
Détection automatique de la plage de ligne de base à partir des extrêmes du signal
Estimation robuste du niveau de la ligne de base en utilisant les valeurs moyennes dans les plages
Caractérisation de la ligne de base de début et de fin pour l’analyse différentielle
Validation des signaux et gestion des erreurs: Validation des entrées complète avec :
Vérifications de la cohérence des tableaux de données et détection des NaN/infinis
Validation de la longueur du signal et vérification des limites de plage
Gestion des erreurs élégante avec des messages d’exception descriptifs
Dataclass PulseFeatures: Conteneur de résultats structuré avec tous les paramètres extraits :
Mesures d’amplitude, de polarité et de décalage
Paramètres temporels (rise_time, fall_time, fwhm, x10, x50, x90, x100)
Plages de ligne de base (xstartmin, xstartmax, xendmin, xendmax)
Classification de la forme du signal et durée de l’impulsion
L’implémentation s’appuie sur des méthodes statistiques robustes et fournit à la fois des fonctions de commodité de haut niveau et des blocs de construction de bas niveau pour des flux de travail d’analyse d’impulsions personnalisés.
Mise en œuvre complète de la propagation des incertitudes :
Ajout de la propagation des incertitudes mathématiquement correcte à ~15 fonctions de traitement du signal de base.
Amélioration de la classe
Wrap1to1Funcpour gérer la propagation des incertitudes pour les fonctions mathématiques (sqrt,log10,exp,clip,absolute,real,imag).Mise en œuvre de la propagation des incertitudes pour les opérations arithmétiques (
product_constant,division_constant).Ajout de la propagation des incertitudes pour les fonctions de traitement avancées (
power,normalize,derivative,integral,calibration).Toutes les implémentations utilisent des formules de propagation des erreurs appropriées avec une gestion de la stabilité numérique (protection contre les NaN/l’infini).
Optimisé pour l’efficacité mémoire en tirant parti de la copie automatique des incertitudes
dst_1_to_1et des modifications sur place.Maintient la compatibilité avec les flux de travail de traitement du signal existants.
Nouveau générateur d’image de rampe 2D:
Cette fonctionnalité permet de générer une image de rampe 2D: z = a(x − x₀) + b(y − y₀) + c
Elle est implémentée dans la classe de paramètres
sigima.objects.Ramp2DParam.Exemple d’utilisation:
import sigima.objects as sio param = sio.Ramp2DParam.create(width=100, height=100, a=1.0, b=2.0) image = sio.create_image_from_param(param)
Nouveaux générateurs de signaux: chirp linéaire, fonction logistique, fonction de Planck.
Nouveaux paramètres calculés d“« Étendue » de l’image :
Ajout de paramètres calculés pour l’étendue de l’image :
xmin,xmax,yminetymax.Ces paramètres sont automatiquement calculés en fonction de l’origine de l’image, de l’espacement des pixels et des dimensions.
Ils fournissent les limites des coordonnées physiques de l’image pour une analyse spatiale améliorée.
Nouvelles fonctionnalités d’E/S:
Ajout du format HDF5 pour les objets de signal et d’image (extensions
.h5siget.h5ima) qui peuvent être ouverts avec n’importe quel visualiseur HDF5.Ajout de la prise en charge du format de fichier de spectre MCA (Analyseur Multi-Canaux) :
Lecture des fichiers MCA (extension
.mca) couramment utilisés en spectroscopie et en détection de radiationExtraction automatique des données de spectre et des informations de calibration
Prise en charge de la calibration d’énergie avec interpolation pour des valeurs précises de l’axe X
Analyse des métadonnées à partir de plusieurs sections (PMCA SPECTRUM, DPP STATUS, CALIBRATION)
Prise en charge de divers formats d’encodage (UTF-8, Latin-1, CP1252) pour une compatibilité maximale
Ajout de la prise en charge du format de signal et d’image FT-Lab.
Ajout de fonctions pour lire et écrire des métadonnées et des ROIs au format JSON:
sigima.io.read_metadataetsigima.io.write_metadatapour les métadonnées.sigima.io.read_roietsigima.io.write_roipour les ROIs.
Ajout de fonctions d’E/S de commodité
write_signalsetwrite_imagesavec prise en charge deSaveToDirectoryParam:Ces fonctions permettent d’enregistrer par lots plusieurs objets de signal ou d’image dans un répertoire avec des modèles de nommage configurables.
SaveToDirectoryParamfournit un contrôle sur les noms de fichiers de base (avec prise en charge des chaînes de format Python), des extensions, des chemins de répertoire et du comportement d’écrasement.La résolution automatique des conflits de noms de fichiers garantit des noms de fichiers uniques en cas de doublons.
Efficacité améliorée du flux de travail pour le traitement et l’enregistrement de plusieurs objets dans des opérations par lots.
✨ Mise à jour de l’architecture de base: types de résultats scalaires
Introduction de deux nouveaux types de résultats immuables:
TableResultetGeometryResult, remplaçant les anciens objetsResultPropertiesetResultShape.Ces nouveaux types de résultats sont orientés vers le calcul et dépourvus de logique spécifique à l’application (par exemple, Qt, métadonnées), permettant une meilleure séparation des préoccupations et une réutilisation future.
Ajout d’un utilitaire
TableResultBuilderpour définir progressivement des calculs tabulaires (par exemple, des statistiques sur les signaux ou les images) et générer un objetTableResult.Tous les comportements liés aux métadonnées des anciens types de résultats ont été migrés vers la couche d’application DataLab.
Suppression de fonctionnalités obsolètes ou étroitement couplées telles que
from_metadata_entry()ettransform_shapes()du cœur de Sigima.
Cette refonte améliore considérablement la modularité, la testabilité et la clarté de l’API de calcul scalaire.
🛠️ Correctifs :
Correction de la gestion des données dans les objets de signal (
SignalObj):Les données du signal sont stockées en interne sous la forme d’un tableau 2D de forme
(2, n), où la première ligne est les données x et la deuxième ligne est les données y : c’est l’attributxydata.En raison de cela, lors du stockage de données Y complexes, le type de données est propagé aux données x, ce qui n’est pas toujours souhaité.
En guise de solution de contournement, la propriété
xrenvoie désormais la partie réelle des données x.De plus, la méthode
get_datarenvoie désormais un tuple de tableaux numpy au lieu d’un seul tableau, permettant d’accéder séparément aux données x et y, tout en conservant le type de données d’origine.
Correction de la conversion des coordonnées physiques et des indices de ROI:
La conversion entre les coordonnées physiques et les indices a été corrigée (l’erreur de demi-pixel a été supprimée).
La méthode
indices_to_physicaletphysical_to_indiceslèvent désormais uneValueErrorsi l’entrée ne contient pas un nombre pair d’éléments (paires x, y).
🔒 Corrections de sécurité:
Correction de vulnérabilité de dépendance: Correction de la vulnérabilité CVE-2023-4863 dans opencv-python-headless
Mise à jour de l’exigence minimale de 4.5.4.60 à 4.8.1.78
Correction de la vulnérabilité des binaires libwebp dans les paquets Wheel OpenCV
Voir l”avis de sécurité DataLab pour plus de détails.