Journal pydic, une suite d'outil python pour réaliser de la corrélation d'image locale

Posté par . Licence CC by-sa
22
14
avr.
2017

Cher journal,
Je t'écris aujourd'hui pour t'annoncer la venue de pydic. pydic, disponible sous licence GPLv3, est une suite d'outil Python permettant de faire de la corrélation d'image locale. Cette suite d'outil, disponible sous la forme d'un unique module pydic.py, s'adresse plus particulièrement aux mécaniciens expérimentateurs qui souhaitent cartographier les déformations au cours d'un essai mécanique comme un essai de flexion, un essai de traction ou que sais-je encore.

Bien qu'en anglais, l'image suivante résume bien ce que fait pydic: à partir d'une suite d'image prise au cours d'un essai mécanique, pydic permet de retrouver le champ de déplacement de la zone d'intérêt (définit par l'utilisateur) puis de calculer le champ de déformation associé à ces déplacements. Attention, à ce jour pydic n'est disponible que en anglais, une traduction française viendra peut-être ultérieurement.
Titre de l'image

L'un des problèmes récurrents avec la corrélation d'image locale est le "bruit" de corrélation qui affecte très fortement le calcul du champ de déformation. Pour minimiser ce problème, pydic encapsule plusieurs algorithmes de lissage qui permettent de réduire efficacement ce bruit de mesure.

L'animation suivante montre le résultat obtenu durant un essai de flexion 4 points sur le champ de déplacement. Pour que ces déplacements soient bien visibles, ils sont amplifiés d'un facteur x25 sur l'animation suivante.
Titre de l'image

Les résultats des calculs effectués par pydic sont disponibles sous formes de suites d'image (qui ont permis de réaliser l'animation ci-dessus) et sous la forme de fichiers csv qui favorisent l'interopérabilité entre divers logiciels de post-traitement.

Pour prendre en main facilement pydic, celui-ci est livré avec deux exemples : un essai de traction et un essai de flexion. En plus de cartographier les déformations, ces exemples montrent comment utiliser pydic pour calculer les constantes d'élasticités des matériaux comme le module de Young et le coefficient de Poisson qui sont des constantes d'un tout premier intérêt pour le mécanicien des matériaux.

Au niveau des dépendances, pydic dépend de matplotlib, numpy, scipy et de opencv2. Vous trouverez certainement les 3 premiers dans les packages de votre GNU/Linux préféré. Par contre, il vous faudra très certainement compiler à la main opencv2 pour pouvoir utiliser pydic.

Bonne corrélation ! omc.

  • # DIC vs image registration

    Posté par . Évalué à 5.

    Salut Damien,

    Merci pour cette superbe contribution.
    Pour que les informaticiens comprennent, ce que nous appelons DIC s'appelle Image registration ou recalage d'images. Il s'agit de recaler 2 images au moyen d'une transformation. Cette transformation peut être locale c-à-d sur une grille d'imagettes ou le calcul est fait sur chaque imagettes ou global par exemple calculer le mouvement de corps rigide ou la transformation affine sur toute l'image.
    Les informaticiens s'intéressent généralement aux images Après recalage, alors que les mécaniciens s'intéressent à la transformation. Nous pouvons à partir de celle-ci avoir accès aux déplacements locaux et par dérivation aux déformations.

    Ça fait longtemps que j'ai envie de faire une dépêche la dessus. Linuxfr permet il d'embarquer des images ou faut i les uploader ailleurs ?

    • [^] # Re: DIC vs image registration

      Posté par . Évalué à 4.

      Linuxfr permet il d'embarquer des images ou faut i les uploader ailleurs ?

      Il faut les uploader ailleurs, ensuite elles seront copiées sur img.linuxfr.org automatiquement pendant la soumission du journal/dépêche. Ce sont ces images copiées qui apparaissent alors dans le contenu publié.

    • [^] # Re: DIC vs image registration

      Posté par . Évalué à 2.

      Bonjour Jeff, c'est vrai que mon journal doit être assez incompréhensible pour les non-mécaniciens. Je le regrette mais je n'avais pas le courage d'expliquer tout en détail… En effet, ça mérite largement une dépêche ! Si tu le souhaites, je veux bien contribuer à celle-ci.

  • # Un truc important que j'ai oublié de dire...

    Posté par . Évalué à 2.

    Quand j'ai commencé à écrire pydic (il y a deux ans), il n'existait pas d'outil libre et encore moins de module python qui permettait de réaliser de la DIC. Aujourd'hui, il y a quelques projets mais aucun qui retient l'approche que j'ai choisie pour pydic. À savoir : un truc simple, facile et rapide à mettre en œuvre pour les mécano-geeks.

    • [^] # Re: Un truc important que j'ai oublié de dire...

      Posté par . Évalué à 6.

      Salut,

      Nous avons développé il y a plusieurs années un logiciel de Corrélation d'Images Numériques nommé YaDICs pour "yet another Digital Images Correlation software".

      Il est capable de traiter des images 2D et 3D (tomographie) et permet via un fichier d'entrée en netcdf de définir des séquences de corrélation assez diverses.

      Le logiciel sait faire de la corrélation intégrée (transformation globale), de la corrélation locale comme tu le fais dans ton soft et aussi la version avec une cinématique de type Éléments finis.

      Le calcul est évidemment multi-échelle c-à-d tu commence par une image très moyennée puis tu applique la transformation à l'échelle du dessous et ainsi de suite.

      L'originalité de ce logiciel est qu'à chaque échelle tu peux choisir ta méthode (globale, locale FEM) puis en passant à l'échelle suivante l'algorithme fait les projection ad hoc te permettant de commencer le calcul d'un peu moins loin.

      Nous avons de plus introduit une régularisation par filtre médian qui nous permet de descendre en taille d'éléments tout en évitant le bruit de manière assez satisfaisante.

      Il est parallélisé en OpenMP et est très rapide, il est basé sur la bibliothèque CImg pour le traitement d'image, le tout en C++. Il n'est pas codé par des informaticiens, il ne faut donc pas trop regarder le code de prés.

      Il n'est pas interfacé avec python mais netcdf existe en python, il est donc simple de créer un fichier, de le compiler et de lancer le programme de manière automatique.

      En ce qui concerne ce qui se fait ailleurs, il y a elastix qui existe depuis plus de 10 ans. Il fait du recalage d'images, il est bien plus générique que nos programmes, il utilise une grille BSplines pour la transformation et peut utiliser les moindres carrés comme nous ou d'autres métriques (NCC,Mutual Information, …), il traite les images 2D et 3D. Il est interfacé depuis 3 ans au travers du module python SimpleElastix directement accessible via easy_install ou pip. C'est à ce jour la solution la plus polyvalente sous python.
      Comme la couche python n'est qu'un binding, il n'est pas possible de développer de nouvelles techniques en python, il faut repasser en C++, mais en tant qu'utilisateur c'est super.

      Il est aussi possible de faire de très belle choses avec OpenCV directement avec des algorithmes de type DeepMatching implémentés via OptFlow_DeepFlow mais aussi SimpleFlow implémenté via calcOpticalFlowSF qui existe depuis plus de deux ans.
      C'est deux méthodes sont disponibles en python, donc comme tu utilises OpenCV, tu peux facilement y avoir accès. Il est aussi possible de tester la version GPU mais ce n'est pas disponible en python.

      Après, il est certain que si tu as cherché DIC, il est probable que tu n'aies rien trouvé …

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.