pyLSM, un module python pour microscope LSM 510

Posté par  (site web personnel) . Modéré par Bruno Michel.
Étiquettes :
18
7
nov.
2008
Python
Dans le cadre de mon travail, je dois faire de l'imagerie avec un microscope confocal (LSM 510 live pour les connaisseurs). Malheureusement, les fichiers générés ne sont pas lisibles nativement, c'est du tiff modifié. La bonne nouvelle, c'est qu'il existe déjà des modules libres (via imageJ) ou gratuits (via Matlab) pouvant charger ces images. La mauvaise nouvelle, c'est que je n'avais pas envie de me mettre à imageJ, et j'avais envie de me défaire de Matlab.

C'est donc pour tout ça que j'ai décidé d'écrire un module pour Python qui me permette de charger ces images. Ça n'a pas été très simple, car ces fichiers sont constitués de plusieurs images, une par canal et par tranche. En effet, en imagerie confocale, on peut exciter spécifiquement des fluorofores (c'est à dire des donneurs de fluorescence) et ainsi avoir un canal par marqueur. Une seconde spécificité de ces microscopes, c'est de pouvoir faire des tranches optiques, donc avoir une série d'images qui peuvent reconstituer nos objets en 3D (c'est de la chance en biologie de travailler avec des matériaux relativement transparents, ce qui permet ces tranches optiques). Tout ça pour dire qu'il y a des foules d'informations dans ces fichiers.

Avec ce petit module Python, il est donc possible de visualiser les différents canaux et tranches.

Parce que je suis très original et que je ne le cache pas, j'ai baptisé ce module pyLSM, py pour python et LSM pour... LSM (c'est l'extension des fichiers). Cette dépêche est un appel à tests et suggestions d'améliorations pour ceux intéressés. Il y a de plus quelques fonctionnalités amusantes. Comme Python est très objet, la variable retournée quand on charge un fichier est une instance de la classe LSMImage dans laquelle j'ai implémenté ces fonctionnalités.

On peut :
  • Enregistrer le temps écoulé depuis le début de l'expérience et ainsi comparer les image selon ce temps (im1>im2 donne TRUE si im1 a été enregistré après im2)
  • im1.getImage(stack,channel,precision=0.5) pour charger l'image correspondant à la tranche "stack" du canal "channel" et d'une taille moitié moindre que l'original (c'est utile pour faire des trucs plus rapides)
  • im1.setAngle(angle) si on veut tourner notre image
    et d'autres que vous trouverez sur le site... ou dans le code... je n'ai pas encore eu le temps de faire une documentation digne de ce nom.

Vous pourrez trouver tout ça sur Launchpad : https://launchpad.net/pylsm

Lien pour télécharger directement (notez qu'il y a un embryon de documentation dans le premier lien) :
https://launchpad.net/pylsm/+download

Donc si vous ou des connaissances travaillez avec ce genre de microscope, allez-y et faites-moi part de vos remarques, encouragements, souhaits, ou je ne sais quoi.

Aller plus loin

  • # Simplement cool!

    Posté par  . Évalué à 6.

    Bravo pour l'idée et l'effort!

    Personnellement j'ai pesté sur un Leica confocal (bon, pour faire de belles images de structures MEMS - micro-électromécanique, on avait eu le microscope gratuitement par Leica suite à un retard pas possible sur un autre contrat) pendant mes travaux en salle blanche. Certes, j'avais bien les tranches d'images... exploitables uniquement par les outils proprio de Leica sur le PC qui gère le microscope...
    Donc, le tout en salle blanche, et si on n'occupe pas le PC pour travailler sa reconstitution sur place, pas de résultat!

    Je n'en ai plus besoin maintenant parce que je ne bosse plus au même endroit, mais avoir un outil libre pour retravailler les acquisitions plus tard, ça m'aurait bien arrangé! Donc je ne peux pas tester le résultat (encore moins l'adapter). Mais je n'aurais jamais espéré qu'un libriste programmeur se penche sur le sujet!

    Juste par curiosité, question technique, mais de ce que je me souviens, sur le Leica, il fallait pouvoir interprêter les variations de couleur (le pas vertical, on l'a réglé soi-même donc à priori il est connu), comment tu as fait pour "interprêter" les variations de couleurs/lumière/autre si le traitement se base sur un truc différent?
    A l'époque je pensais que c'était LE facteur bloquant.
    • [^] # Re: Simplement cool!

      Posté par  (site web personnel) . Évalué à 4.

      Merci pour l'encouragement.

      Niveau technique, le fichier est un "simple" tiff modifié. Le plus dur a été de comprendre les entête et les différents offsets qui pointent sur les entêtes elles-mêmes et sur les images.

      Ensuite, les images sont codées directement en intensité, le tout est de savoir si c'est en 8 ou 16 bits. Cette partie ne fait que 6 lignes de code (c'est la fonction readStack dans LSMParse.py).

      J'éspère avoir répondu à ta question...
      • [^] # Re: Simplement cool!

        Posté par  . Évalué à 1.

        Excellente initiative! Moi aussi j'aimerais bien me débarrasser de Matlab (pour ImageJ je pense que c'est impossible ;-)

        Dès que j'en ai le temps je vais essayer ton module.
  • # Gwyddion

    Posté par  . Évalué à 4.

    Je ne sais pas si c'est adaptable, mais pendant ma thèse j'ai eu la chance de trouver et d'utiliser un logiciel de microscopie libre : http://gwyddion.net

    Alors certes, ce logiciel est plutôt orienté microscopies à sonde locale, mais il dispose déjà de pas mal d'outil de traitement d'image et surtout il est possible de lui adjoindre des plugins dans différents langages dont le python, peut-être une piste à creuser?
    • [^] # Re: Gwyddion

      Posté par  (site web personnel) . Évalué à 2.

      C'est très intéressant comme lien, j'ai bossé avec un AFM durant ma thèse. Effectivement, c'est orienté "scanning probe microscope" (on appelle ça sonde locale en français ??), donc pas utilisable directement.

      Niveau traitement d'image, je me suis orienté vers Python Imaging Library, qui est très puissant. Mais je garde ton lien sous la main, il pourrait y avoir de bonnes inspirations.
      • [^] # Re: Gwyddion

        Posté par  . Évalué à 1.

        J'ai pas maté le code mais tu as regardé du côté de Scipy pour le traitement de données (et donc d'images) ?
  • # PEP-8

    Posté par  . Évalué à 6.

    Avant de faire mon rabat joie félicitation.

    Je noterai un léger bémol. Ton code enfreint a peu près toutes les conventions de la PEP-8 ( http://www.python.org/dev/peps/pep-0008/ ).

    Je sais que ça peut paraître ridicule, mais ça rend le code sensiblement plus difficile à lire.
    • [^] # Re: PEP-8

      Posté par  . Évalué à 3.

      Débutant en Python, on m'a conseillé récemment Pylint (http://www.logilab.org/857). Personnellement, je trouve cela fort pratique.

      Bon courage.
      • [^] # Re: PEP-8

        Posté par  (site web personnel) . Évalué à 3.

        Merci pour ton conseil, ce programme m'a beaucoup aidé à traquer les erreurs de conventions que j'ai faites.

        Pour Jean B : Tu as encore été gentil dans ton message... quand j'ai vu les spécifications, et surtout les insultes que m'a envoyé Pylint, j'étais pas fière (je devais avoir une note entre 0 et 1 sur 10, lamentable). Maintenant, ça vas mieux (plus de 9/10) et c'est en effet plus propre.

        Le point fort de Pylint, c'est qu'il traque aussi les variables qui ne sont pas utilisées, très pratique.

        Merci encore à vous deux.
    • [^] # Re: PEP-8

      Posté par  (site web personnel) . Évalué à 7.

      Au contraire, c'est pour ça que j'ai besoin d'un retours votre part. Ta remarque, très pertinente, m'est très utile.

      Je vais regarder ça de plus près et corriger mon code.

      Et effectivement, la lisibilité du code est très importante si je veux que mon travail puisse servir à d'autres.

      Merci.
  • # ITK / BioImageXD

    Posté par  (site web personnel) . Évalué à 2.

    Juste une question:
    - ITK support les fichiers LSM
    - BioImageXD support entre autre LSM

    Il ne sont pas cité dans l'article et pourtant sont des references dans le domaines medicale (distribué sous license open source), qu'elles etaient les problemes avec ces toolkits ?

    Le plus dur sous linux ca va etre les macro VB stockées dans les nouveau fichiers LSM :)

    merci
    ref:
    http://itk.org
    http://www.bioimagexd.net/
    • [^] # Re: ITK / BioImageXD

      Posté par  (site web personnel) . Évalué à 3.

      En effet, j'avais oublié ces projets lors de la rédaction de la dépêche. Toutes mes excuses aux personnes que j'aurais froissé.

      Cependant, de ce que je me rappelles, ces deux projets sont liés intimement à VTK, une biliothèque de visualisation très puissante.

      Dans mon cas, tout ce que je voulais étais un truc très simple qui me retourne une matrice avec les valeurs d'intensité des pixels pour pouvoir ensuite les analyser. J'ai essayé BioImageXD, mais il était lié à une version de VTK en dévoloppement (en tout cas quand j'ai essayé). J'ai essayé aussi de lire leurs code pour extraire ce qui m'intéressait au niveau de la lecture des fichiers LSM, mais c'était un peu compliqué pour moi en mélangeant du code python avec du C (faudra que je m'y mette au C...). De ce que j'avais compris à l'époque, c'est que la lecture de fichiers LSM était liée à cette version de VTK, une dépendance que je ne souhaitait pas par soucis de simplicité (pourquoi inclure un module de visualisation juste pour lire ces fichiers ?). Voilà donc pourquoi j'ai oublié de mentionner ces deux projets.

      L'avantage de ce module, c'est qu'il ne dépends que de numpy et scipy. Il ne renvoie qu'une matrice 2D correspondant au canal et tranche désirée. J'ai voulu faire simple et léger.
  • # Dispersion des efforts...

    Posté par  (site web personnel) . Évalué à 3.

    Initiative très intéressante (même si personnellement je n'en n'ai pas l'utilité: on n'a que du Leica icitte)!
    Une question tout de même: as-tu essayé d'utiliser le format OME (http://www.openmicroscopy.org/site/file-formats ) qui est vraiment fait pour ça?
    Et une deuxième question: as-tu essayé d'utiliser µManager (http://www.micro-manager.org/ ) pour commander ton confocal (apparemment, tu n'aimes pas imageJ, donc je suppose que non...)?
    • [^] # Re: Dispersion des efforts...

      Posté par  (site web personnel) . Évalué à 2.

      Je connaissais pas du tout l'initiative du format OME. Ça serait l'idéal si tous les constructeurs utilisaient le même format, ouvert qui plus est.

      Selon les infos sur le site, Zeiss (le constructeur du LSM 510) se trouve dans les "Formal Indication of Support", donc c'est pas gagné. Cependant, je ne manquerait pas de leur en faire part à l'occase.

      Pour le deuxième lien (µManager) ça parait aussi très intéressant. Malheureusement, le microscope n'est pas à moi, je dois donc faire avec ce qui est installé dessus. Typiquement, on est plusieurs laboratoires à se partager le même microscope. Les réservations se font 1-2 semaines à l'avance. Je me vois donc mal commencer à y installer un linux et y faire tourner µMananger (oui, ça tourne aussi sur windows, mais laisse-moi rêver...).

      En conclusion, ce sont deux liens très intéressant que je vais m'empresser de partager avec mes collègues, des fois, ça pourrait faire bouger les choses dans le bon sens. Mais pour l'instant, je dois faire avec les fichiers LSM :-(

      Merci pour ta remarque

Suivre le flux des commentaires

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