Analyse d'image d'un pied d'éléphant dans JMPCeci est une image du bas du pied d'un éléphant. Comme vous pouvez le deviner en regardant cette photo, ce n'est pas un éléphant très heureux. Les éléphants gardés en captivité passent souvent leur temps à marcher sur le trottoir ou d'autres surfaces dures. Ce n'est pas le substrat auquel ils sont habitués, et ce n'est pas pour quoi un pied d'éléphant a été conçu. En conséquence, cet éléphant a développé des plaies sur son pied et, dans certains cas, ces plaies ont même été infectées. Le gardien de cet éléphant fournit des traitements, mais l'éléphant continue de marcher sur son pied, causant d'autres dommages. Donc, le gardien se demande si les traitements aident vraiment.

On m'a donné une copie de cette photo avec cette question sur l'analyse d'image: Existe-t-il un moyen de mesurer de manière quantifiable l'état du pied afin de déterminer avec le temps si le traitement a un effet positif?
En regardant l'image, je peux voir que toutes les zones du pied tombent dans l'une des trois catégories suivantes:
Il existe des zones de couleur brunâtre qui représentent la couleur normale du pied de l'éléphant. Ces zones sont en bonne santé.Il y a des zones qui sont légèrement nuancées d'orange. Ce sont les zones qui ont développé des plaies.Ensuite, il y a les zones blanchâtres dans les plaies. Ce sont les zones où les plaies sont devenues une infection et sont maintenant pleines de puss.En classant le pied entier dans ces trois seaux, j’ai pensé que nous pourrions obtenir une mesure de l’état du pied. Il est important d'ignorer le fond, les zones de l'image qui ne montrent pas le bas du pied, afin de ne pas fausser les résultats.
J'ai lu l'image dans JSL (langage de script JMP) et j'ai obtenu les valeurs de pixel de l'image rouge , vert et bleu ( RVB ) les valeurs en tant que matrices séparées. Je pourrais ensuite convertir ces matrices individuelles en une matrice représentant les trois composantes de couleur.
img = Nouvelle image ( "elephantFoot.jpg" )
{r, g, b} = img << getPixels ( "rgb" )
colr = RGBColor (r, g, b);
Mais souvent, il est préférable d’analyser les couleurs dans un schéma de couleurs autre que RVB. Donc, je veux vraiment les couleurs dans un jeu de couleurs appelé HLS , Qui veut dire teinte , légèreté et saturation . La teinte est essentiellement la teinte de la couleur, la luminosité est la luminosité et la saturation est la quantité de couleur par rapport à la quantité de blanc. Heureusement, JMP fournit une méthode de conversion de RVB en HLS.
{teinte, allumé, assis} = ColorToHLS (colr);
Maintenant que j'ai ma couleur en HLS, je peux créer un tableau de données JMP contenant mes valeurs en pixels.
dt = Nouvelle table ( "Pixel Data" ,
nouvelleColonne ( "Teinte" , définir les valeurs (teinte)),
nouvelleColonne ( "Allumé" , définir les valeurs (allumé)),
nouvelleColonne ( "Sam" , définir les valeurs (sat))
)
La raison en est que je peux utiliser une partie de la puissance statistique de JMP pour analyser mes données. Je suis curieux de connaître la répartition de mes valeurs de couleur. J'ai donc décidé de créer un Distribution de chacun des composants de couleur.
Distribution (Distribution continue ( Colonne (: teinte), boîte à valeurs aberrantes ( 0 )));
Distribution (Distribution continue ( Colonne (: allumé), boîte à moustaches ( 0 )));
Distribution (Distribution continue ( Colonne (: sat), Boîte à moustaches des valeurs aberrantes ( 0 )));
Voici le résultat.

En regardant mes distributions, je peux bien deviner quelles valeurs rechercher dans mes données pour identifier quels pixels sont en marron, en orange ou en blanc. Je traite chaque pixel, représenté par une rangée de données dans ma table de données, et je peux les catégoriser. Je peux alors signaler mon résultats .

Pour générer mon rapport, j'ai sélectionné toutes mes valeurs manquantes (tous les pixels représentant la zone d'arrière-plan) et les ai définies pour masquer / exclure. J'ai ensuite généré un tableau de synthèse à partir de mon tableau de données de pixels. Je peux ensuite utiliser Graph Builder pour générer mon graphique.
Le résultat est qu’environ la moitié du pied est en bon état. Pour la moitié, ce n'est pas normal, environ 30% ont développé des plaies et les 20% restants sont infectés. Nous avons maintenant une mesure quantifiable de l'état du pied. En faisant cela au fil du temps, nous pouvons déterminer l’état du pied et savoir si les traitements aident ou non.
L'image du pied d'éléphant m'est venue à travers une organisation appelée WildTrack . WildTrack se consacre à la préservation des espèces en voie de disparition et au bien-être général des animaux en liberté.
WildTrack est un client JMP qui figurera dans une prochaine diffusion Web, Analytiquement parlant . Si vous trouvez cet article intéressant, je vous encourage à vous inscrire et à participer à la diffusion Web. Je peux vous assurer que leurs discussions sont toujours fascinantes et informatives. Et comme toujours, s'il vous plaît laissez-moi savoir ce que vous pensez.
John Ponte a écrit: Sandeep, le lien posté dans mon précédent ... John Ponte a écrit:
Sandeep, le lien posté dans ma réponse précédente est un lien vers une vidéo décrivant la technique ( https://www.youtube.com/watch?v=wSkUwgNbv2g ). Vous pouvez également trouver du code JSL sur l'échange de fichiers JMP qui vous aidera. Recherchez ImageToDatatable.jsl sous Scripts ( https://community.jmp.com/docs/DOC-6100 ). Cela vous montrera comment ouvrir une image et générer la table de données à partir des valeurs en pixels. Vous pouvez également utiliser Image Analyzer pour générer la table de données à votre place ( https://community.jmp.com/docs/DOC-7181 ).
BTW, si vous venez à Discovery (à Cary, Caroline du Nord, dans deux semaines), venez me parler et je pourrai vous aider. Je serai aux postes de travail des développeurs et errerai.
Sandeep a écrit: John, existe-t-il un tutoriel vidéo que tu as ... Sandeep a écrit:
John, y a-t-il un didacticiel vidéo que vous avez réalisé pour moi afin d'apprendre cette technique?
John Ponte a écrit: En passant, JMP a publié une vidéo sur YouTube ... John Ponte a écrit:
À propos, JMP a publié une vidéo de moi décrivant le processus d’analyse du pied d’éléphant. Il contient plus de détails sur le processus. Si vous trouvez cette publication intéressante, vous pourrez également apprécier la vidéo.
Il peut être trouvé ici: https://www.youtube.com/watch?v=wSkUwgNbv2g
Prendre plaisir!
John Ponte a écrit: Rodrigo, JMP fonctionne dans un environnement normalisé ... John Ponte a écrit:
Rodrigo,
JMP fonctionne dans un espace colorimétrique normalisé, ce qui signifie que toutes les valeurs sont comprises entre 0,0 et 1,0. En regardant ma distribution pour la teinte, je constate que la plupart de mes valeurs sont inférieures à 0,125. Cependant, je vois aussi des valeurs supérieures à 0,9. Cela me donne donc une idée des valeurs que je devrais rechercher pour séparer mes couleurs.
Ce que vous devez faire, en JSL, consiste à parcourir chaque ligne (ce qui représente un pixel) en regardant la valeur de teinte et de lumière. Dans votre cas, vous chercherez du vert, du jaune et du marron. Le jaune et le marron ont une valeur de teinte très similaire, car ils sont tous deux composés de quantités égales de rouge et de vert. Ils se distinguent par leur luminosité ou, dans ce cas, par la valeur de la lumière. La légèreté du jaune sera supérieure à celle du marron. Le vert aura une teinte plus élevée que le jaune et le marron. Donc, en utilisant les valeurs de teinte et de luminosité, vous devriez pouvoir distinguer les couleurs.
Examinez votre distribution pour voir si vous avez trois groupes distincts. Les valeurs les plus élevées sont probablement vos pixels jaunes, les valeurs les plus basses sont probablement vos pixels bruns et les valeurs intermédiaires sont probablement vos pixels verts. Commencez avec cela et voyez si cela vous donne la bonne réponse. Vous pouvez créer une nouvelle image de la même manière que je l’ai fait avec le pied d’éléphant pour valider votre réponse. Si vous n'obtenez pas la bonne réponse, vous pouvez modifier vos plages de valeurs dans vos comparaisons.
J'espère que ça aide!
Rodrigo a écrit: Cher John, j'ai suivi ton script et j'ai ... Rodrigo a écrit:
Cher John,
J'ai suivi votre script et obtenu les valeurs de pixel pour H, L, S. Maintenant, je dois traiter chaque pixel et reconnaître ce qui est vert, jaune et marron. Comment je fais ça? Je suis perdu dans cette partie: "En regardant mes distributions, je peux deviner quelles valeurs rechercher dans mes données pour identifier quels pixels sont en marron, en orange ou en blanc. Je traite chaque pixel, représenté par une rangée de données dans ma table de données, et je peux les catégoriser. Je peux alors rapporter mes résultats. "
Tout conseil sera apprécié. Merci!
John Ponte a écrit: En un mot - manuellement! Je reçois beaucoup de ... John Ponte a écrit:
En un mot - manuellement! Je reçois beaucoup d'images de gens qui me demandent comment ils peuvent identifier un domaine d'intérêt dans l'image. Malheureusement, je ne peux pas passer autant de temps que je voudrais ou dois développer une solution complète. J'essaie donc de leur donner une solution rapide avec des idées sur la manière dont ils pourraient la développer davantage. La solution rapide consistait simplement à masquer l'arrière-plan à l'aide d'un autre progiciel (j'ai utilisé Gimp). Mais dans JMP / JSL, vous pouvez développer différentes techniques de détection de bord identifiant le bord du pied de l'éléphant pour vous. En fait, j'ai illustré cet exemple dans certains travaux que j'ai réalisés pour WildTrack, dans lesquels ils identifient l'empreinte d'un animal dans une image. Vous pouvez trouver une vidéo à ce sujet ici: http://www.youtube.com/watch?v=VjjccdCDXx9M
Scott a écrit: Excellent travail John! Je suis surpris que JMP puisse ... Scott a écrit:
Excellent travail John! Je suis surpris que JMP puisse être utilisé pour des applications aussi diverses.
Je suis curieux de savoir comment vous avez supprimé le fond de l'image. Comment avez-vous identifié les pixels d'arrière-plan lorsque l'arrière-plan n'est pas uniforme?
John Ponte a écrit: Eh bien, laissez-moi d'abord dissiper le mythe selon lequel ... John Ponte a écrit:
Eh bien, laissez-moi d'abord dissiper le mythe selon lequel je suis un expert! Bien que, si vous voyez mon patron, je vous encourage à lui dire que vous pensez que je suis. Et merci de le dire.
Deuxièmement, bien que je sois familier avec MATLAB, j’estime ne pas en savoir assez à ce sujet pour établir une comparaison valable entre les deux produits. J'ai parlé à un certain nombre d'utilisateurs JMP qui utilisent également MATLAB et ils semblent en être satisfaits. Pour ces utilisateurs (alerte teaser), assurez-vous de vérifier certaines des nouvelles fonctionnalités de la version 11 de JMP.
Outre les fonctionnalités statistiques, l'une des fonctionnalités que j'aime vraiment dans JMP est le langage de script JMP, JSL. Cet article montre comment importer une image dans JMP et la convertir en table de données à l'aide de JSL. Une fois que vous avez l'image en tant que données, vous disposez de toute la puissance statistique de JMP. Vous pouvez maintenant analyser votre image à l'aide de l'analyse discriminante ou du clustering, par exemple. Je lis actuellement un livre sur ce sujet. Il s’appelle Measuring Shape, de F. Brent Neal et John C. Russ. Je pense donc que la combinaison de ces fonctionnalités fait de JMP un outil puissant pour le traitement des images. Il permet à l'utilisateur de créer ses propres solutions sans avoir à implémenter réellement la fonctionnalité.
amit bothra a écrit: Bonjour John, excellent post. Je suis émerveillé par ... Amit Bothra a écrit:
Salut John,
Super article. Je suis stupéfait des capacités de JMP. En tant qu’expert, comment comparez-vous les capacités de traitement d’image de JMP avec certains logiciels dédiés tels que Matlab.
Sky & Zoe a écrit: Ceci est un excellent exemple de la façon dont l'analyse ... Sky & Zoe a écrit:
C’est un excellent exemple de la manière dont le pouvoir analytique du JMP pourrait être utilisé pour améliorer la prise de décision dans le traitement de la pathologie. Une grande partie de l'imagerie médicale repose toujours sur une évaluation visuelle par un expert plutôt que sur une quantification.
Une fois affinée, cette application pourrait s’avérer très utile pour normaliser les évaluations de la progression (ou non) de la guérison des plaies au fil du temps. John a un réel talent pour penser de manière originale, et nous sommes convaincus que le travail qu’il accomplit pour l’imagerie JMP sera extrêmement utile dans un grand nombre de domaines.
John Ponte a écrit: J'ai été un peu surpris quand la réponse c ... John Ponte a écrit:
J'ai été un peu surpris lorsque la réponse a été d'environ 50% normale également. Mais ensuite, j'ai réalisé que les zones en mauvais état (orange et blanc) apparaissent sous forme de zones plus grandes, tandis que les zones en bon état (marron) apparaissent sous forme de sections plus petites, plus longues et plus enveloppantes. Je pense que lorsque vous voyez beaucoup de zones plus petites et moins grandes, vous avez l’impression que les zones les plus grandes seront plus grandes.
Un calcul d'erreur est une bonne idée. C’était ma solution rapide (mais utilisable) pour le client. Parallèlement à cette solution, je leur ai donné un certain nombre d’idées sur la manière de l’améliorer. Je ne voulais pas leur enlever tout leur plaisir.
Merci pour les commentaires!
Scott Moore a écrit: Très cool. Quelques réflexions. Les e ... Scott Moore a écrit:
Très sympa. Quelques réflexions. L'œil est plutôt doué pour analyser les tendances. J'aurais pensé que le brun était plus près de 35% en regardant la photo. Il aurait été intéressant de faire une hypothèse avant votre analyse, puis de la comparer. J'aimerais aussi voir une sorte de calcul d'erreur. Très bon processus cependant et un excellent moyen de résoudre un problème.