IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Images Discussion :

Aide Traitement d'images


Sujet :

Images

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    Par défaut Aide Traitement d'images
    Bonjour à tous,
    dans le cadre d'une thèse dont le sujet est "extraction de connaissances à partir d'images médicales pour la conception d'un système d'aide à la décision" je suis amené à définir, dans le domaine de l'ORL, si un nez comporte ou non une fracture. Etant nouveau sur la planète Matlab, j'ai posé des questions par ci et par là afin d'avoir une méthodologie à suivre. Les réponses que j'ai pu obtenir sont visibles à la page suivante : http://www.louizi.com/thesis/
    Mais je crains que ce ne soit un peu compliqué/mal défini pour moi. Je dois en fait isoler une partie de l'image (l'os propre du nez) à partir d'images TDM (Dicom) pour ensuite voir s'il y a des déformations particulières sur cette partie.

    Toute aide sera la bienvenue. D'avance merci!

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Et quel est la question exactement ?
    Sur quel point bloques-tu ?

    Je ne pense pas que tu en sois la programmation MATLAB pour le moment...
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    Tu as raison, ma question pourrait se résumer à : comment extraire l'os propre du nez à partir de l'image entière. Cela constituerait la première étape.
    Pour info, après je compte visualiser si cet os pourrait avoir des fractures ou pas. Et j'utiliserai alors les classifieurs SVM pour mettre les images en catégories A et B (avec fractures, sans fractures).
    Pour ce qui est de l'avancement en thèse, il faut que je puisse isoler automatiquement cet os pour pouvoir appliquer plusieurs notions théoriques. Bref, cela constituerait un bon début

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Tes images sont issues d'un scanner (protocol CT de la norme DICOM).

    Tu peux donc assez aisément extraire par seuillage les parties osseuses en te basant sur l'échelle de Hounsfield (http://en.wikipedia.org/wiki/Hounsfield_scale) avec une valeur de quelques centaines de HU)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    Merci pour cet élément de réponse. Je regarde l'échelle de Hounsfield et je reviendrai poster ce que j'ai pu trouver/faire.

    Me revoilà,
    j'ai utilisé la fonction imagesc de Matlab qui à priori permet d'utiliser les coefficients de Hounsfield. J'ai fait quelques essais qui sont visibles sur le bas de la page http://www.louizi.com/thesis/
    Est-ce de cela dont il s'agissait?

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Tu dois lire l'image en utilisant la fonction DICOMREAD.
    Tu obtiens une matrice X dont les valeurs vont de 0 à Vmax

    Il faut ensuite utiliser la fonction DICOMINFO pour récupérer la valeur des deux champs RescaleSlope (0028;1053) et RescaleIntercept (0028;1052). Ces valeurs sont généralement 1 et -1024 pour les images CT (de mémoire à vérifier )

    Pour obtenir X en HU, tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Xhu = X * RescaleSlope + RescaleIntercept
    soit généralement :

    Ensuite tu seuilles à la valeur souhaitée, par exemple 200HU :

    Pour n'afficher que les parties de l'image contenant (principalement) des structures osseuses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    figure
    imagesc(BW.*Hhu,[min(Xhu) max(Xhu)])
    Enfin je dis tout ça de tête mais c'est l'idée générale
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    Merci beaucoup pour l'aide apportée. J'essaierai les différentes étapes et je reviendrai vers vous au plus tôt pour vous fournir les résultats obtenus. Encore merci pour l'intérêt!

  8. #8
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    De retour!
    Effectivement les valeurs que tu m'as données sont -1024 et 1. Par contre, lors de la compilation j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ??? Undefined function or variable 'Hhu'.
    Probablement une faute de frappe quelque part, et j'ai essayé plein de combinaisons avant de revenir poster

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Salut,

    une petite faute de frappe dans le code que t'as donné Dut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    imagesc(BW.*Xhu,[min(Xhu) max(Xhu)])
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    Salut Magelan,
    j'ai aussi essayé de changer Hhu par Xhu et voilà les erreurs que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> times
    Integers can only be combined with integers of the same class, or scalar doubles.
     
    Error in ==> test at 10
    imagesc(BW.*Xhu,[min(Xhu) max(Xhu)])
    Des idées?

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    c = class(Xhu);
    BWc = cast(BW,c);
     
    imagesc(BWc.*Xhu,[min(Xhu) max(Xhu)])
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  12. #12
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    La nouvelle erreur affichée maintenant est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ??? Error using ==> image
    Incorrect number of arguments specified
     
    Error in ==> imagesc at 40
        hh = image(varargin{:},'CDataMapping','scaled');
     
    Error in ==> mehdi at 14
    imagesc(BWc.*Xhu,[min(Xhu) max(Xhu)])
    Un problème avec la taille de l'image à priori?
    Sinon, j'ai exploré entre temps une autre piste, celle de la détection des sommets (ou corner detection en anglais) que j'ai posté sur http://www.louizi.com/thesis/
    Un algorithme qui permettrait d'avoir les différents points, et après probablement dessiner des lignes et arriver à extraire cet os propre..Mais j'en suis pas encore là et j'aimerai surtout terminer de visualiser uniquement les os et voir si ce serait plus clair après.
    J'ai fait uploader une image DICOM, au cas où cela serait utile. http://www.louizi.com/thesis/IM5

  13. #13
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Je ne suis pas un expert dans le format dicom, mais lorsque je fais
    J'obtiens un vecteur X qui est vide. Et j'ai l'impression que c'est pareil chez toi quant je vois l'erreur que tu obtiens : si X est vide, alors max(X) renvoie un élément vide et le deuxième argument de imagesc provoque une erreur.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  14. #14
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Il est vrai que le fichier a l'air particulier... comme ça arrive souvent avec la norme DICOM...

    Sinon, tu ne devrais pas diffuser ce genre de fichier tel quel

    Il faut IMPERATIVEMENT l'anonymiser car il y a des données dans l'entête des fichiers DICOM qui permettent d'identifier le patient (et le secret médical... ça sert à quelque chose)

    Je crois me souvenir qu'il y a des logiciels gratuits sur le net permettant de rentre anonyme les fichier DICOM (suppression du nom du patient, de sa date de naissance, du numéro de dossier, du jour et de l'heure d'examen...)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  15. #15
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    Mea culpa! j'ai complètement oublié cela...J'ai commencé par enlever l'image déjà le temps que je trouve un logiciel qui l'"anonymisera". Par contre, auriez-vous un soupçon d'idée s'il vous plaît? ça me génère toujours le même type d'erreur avec toutes les images obtenues...galère galère...

  16. #16
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    As-tu réussi à ouvrir tes images avec d'autres logiciels (en gratuit : ImageJ, Dicomworks, Osirix sur Mac, ... => http://www.sph.sc.edu/comd/rorden/dicom.html#links) ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  17. #17
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    Il est très fort ImageJ! Ma question est, supposons qu'après bidouillage, je sois arrivé à isoler l'Os propre du nez (je sens que ça va m'amuser pendant encore quelques temps tellement y a des fonctionnalités). Comment faire cela automatiquement ? j'essaie de trouver les équivalents des opérations que j'ai effectuées sous Matlab?

  18. #18
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    Pour enlever toute ambigüité, j'ai mis une image Dicom au format jpg (http://www.louizi.com/thesis/image/jpg).
    Pourriez-vous s'il vous plaît m'indiquer les opérations à suivre via ImageJ (entre autres) pour pouvoir extraire l'os propre du nez? J'ai pas mal galéré et à chaque fois que je suis une piste elle s'avère infructueuse. Je voudrais avoir au moins les étapes, ou des idées pour ces étapes, je m'occuperai ensuite de rendre tout ça automatique.
    D'avance merci, je suis à la recherche d'un peu de lumière...!

  19. #19
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    Il y a un sujet sur ce même forum qui traite à peu près du même problème que j'ai :
    http://www.developpez.net/forums/d33...ges-medicales/
    sauf que si jamais j'applique les mêmes opérations eh ben ça ne me donne rien

  20. #20
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Si tu continues sur ImageJ, je t'informe que nous avons un forum dédié : http://www.developpez.net/forums/f12...phisme/imagej/
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] aide sur un code de traitement d'image
    Par kouabenan11 dans le forum Images
    Réponses: 8
    Dernier message: 01/07/2015, 10h41
  2. Traitement d'images aide
    Par nicodu43 dans le forum Sujets
    Réponses: 0
    Dernier message: 02/11/2011, 19h19
  3. Traitement d'images : quel langage?
    Par belasri dans le forum Langages de programmation
    Réponses: 19
    Dernier message: 07/10/2005, 09h59
  4. Besoin d'aide pour algorithme de traitement d'images
    Par Zenman94 dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 07/04/2005, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo