De l'image aux données
Introduction
Que faire lorsque vous n'avez qu'une image d'un graphique, mais que vous avez besoin des données derrière le graphique ? Ce processus peut être fastidieux si vous décidez de le faire à la main, un point à la fois. Cependant, vous pouvez extraire des données d'une image dans une table de données à l'aide de JMP, et cela ne prend que quelques étapes.

Étape 1 : Importer l’image
La première étape consiste à récupérer l'image entière sous forme d'informations dans une table JMP. Bien que cela puisse être fait via un script, cela peut également être fait en utilisant l'excellent module complémentaire Image to Table . Je vais utiliser une image de la population de Reykjavik comme exemple, mais n'importe quelle image d'un graphique linéaire devrait fonctionner.
Après avoir téléchargé et installé le module complémentaire, sélectionnez Modules complémentaires > Analyseur d'images pour sélectionner l'image et l'importer sous forme de tableau de données. Le tableau de données comprend les données RVB (ainsi que d'autres informations) pour chaque pixel de l'image.

Étape 2 : Fixer l'échelle
Une fois le tableau ouvert, il est assez simple d'utiliser le générateur de graphiques pour recréer une version en noir et blanc de l'image. Dans l'image ci-dessous, j'ai utilisé la colonne I (Intensité) comme colonne de couleur et j'ai inversé l'échelle Y pour qu'elle corresponde à la façon dont les images sont enregistrées.

Je peux maintenant voir un problème immédiat : l'échelle du graphique ne correspond pas à l'échelle dans JMP. C'est très simple à résoudre ; cela implique l'utilisation de certaines fonctionnalités intégrées dans JMP, ainsi qu'une table de données intermédiaire.
- Créez un tableau de données vierge avec quatre colonnes (X, Y, X souhaité et Y souhaité).

- Choisissez un point de données dans le coin inférieur gauche du graphique à un emplacement connu, par exemple, où l'axe des X est l'année 1896 et la population est 0. Saisissez ces valeurs dans le nouveau tableau de données dans la ligne 1 des colonnes X souhaité et Y souhaité.

- Dans la fenêtre du générateur de graphiques, sélectionnez l'outil Réticule, puis passez la souris sur ce point de données. Notez les valeurs X et Y données. Écrivez-les dans la ligne 1 des colonnes X et Y.

- Répétez ce processus pour un point connu dans le coin supérieur droit du graphique, en enregistrant les valeurs actuelles et souhaitées pour X et Y. Votre tableau doit ressembler à l'exemple ci-dessous.

L'étape suivante consiste à modifier les valeurs d'échelle X et Y dans le tableau de données d'image pour qu'elles correspondent à ce qui est affiché dans le graphique. Il est essentiellement nécessaire d'appliquer un décalage et un facteur d'échelle à chaque colonne. Heureusement, il s'agit simplement d'ajuster une ligne, ce qui est une fonction de base de la plate-forme Fit Y by X. Dans l'image ci-dessous, j'ai ajusté une ligne à la relation entre les valeurs actuelles et les valeurs souhaitées pour X et Y.

La clé ici est d'examiner la formule de l'ajustement linéaire. Elle fournit à la fois un décalage et une échelle, sous la forme d'une équation ay = mx + b, où m est l'échelle et b le décalage. Ces paramètres peuvent être utilisés avec l'outil Nouvelle colonne de formules dans JMP pour accélérer la correction des axes.
- Dans le tableau de données d'image, cliquez avec le bouton droit sur la colonne X , sélectionnez Nouvelle colonne de formule > Transformer > Décalage d'échelle...
- Saisissez les valeurs du facteur d'échelle (écrit ici sous la forme Multiplicateur) et du Décalage, copiées à partir de la formule dans la fenêtre Ajuster Y par X.

- Répétez ce processus pour la colonne Y. Assurez-vous de saisir le nombre négatif pour le multiplicateur.
Désormais, de nouvelles colonnes pour X et Y, avec des axes et des échelles correspondant à l'image, sont présentes dans le tableau de données. La modification des axes vers ces nouvelles colonnes dans le générateur de graphiques montre comment ces nouveaux axes s'alignent avec les axes de l'image.

Étape 3 : Extraire les données
La seule étape restante consiste à éliminer toutes les lignes de la table de données d'image qui ne sont pas des points de données sur la ligne d'intérêt. Pour ce faire, le clustering K-Means est un outil rapide et presque automatique. (Un merci spécial à @landonbw1 pour m'avoir montré cette astuce.)
L'image d'origine semble avoir quatre couleurs : blanc, bleu, gris et noir. Il devrait donc être simple de demander à JMP de séparer les colonnes R, G et B en quatre groupes, et la ligne bleue devrait être l'un de ces groupes. En raison de la façon dont la compression d'image, le mélange des couleurs et d'autres facteurs fonctionnent dans les fichiers image, il y a en fait plus de 500 couleurs distinctes dans cette image. Néanmoins, nous pouvons séparer les couleurs principales assez facilement. En général, définir le nombre de groupes à deux fois le nombre de couleurs visibles (couleurs qu'un humain ordinaire dirait être dans une image) crée des groupes d'éléments graphiques individuels à partir d'un fichier image.
- Sélectionnez Analyser > Clustering > Cluster K-Means .
- Entrez les colonnes R , G et B dans la sélection Y, Colonnes , puis sélectionnez OK .
- Entrez 8 dans la section Nombre de clusters , puis sélectionnez Aller .
- Sélectionnez chaque cluster dans le tableau Récapitulatif des clusters , l'un après l'autre, tout en regardant le générateur de graphiques, pour déterminer à quel cluster appartient la ligne. Dans l'image ci-dessous, la mise en surbrillance du cluster 5 met en surbrillance uniquement les points de données de la ligne du graphique.

- Sélectionnez tous les clusters à l'exception du cluster qui vous intéresse (5, dans ce cas) et supprimez ces lignes du tableau. Désormais, les seules lignes restantes sont les points de données du graphique dans l'image. La modification de quelques options du générateur de graphiques génère un graphique interactif des données dans JMP, là où il n'y avait auparavant qu'une image statique.

Conclusion
Il y a une certaine ironie dans le fait qu'il faut plus de temps pour lire comment extraire des données d'une image dans une table de données que pour effectuer le processus lui-même. Cependant, ironie mise à part, il existe également de nombreuses possibilités d'utiliser ce processus, notamment :
- Au début d’un projet de recherche, lors de l’étude de toute la littérature disponible.
- Rétro-ingénierie d'un processus ou d'un produit.
- Numérisation des courbes contrainte-déformation pour une utilisation dans la plateforme Fatigue Model .
Quelles opportunités cela ouvre-t-il pour votre travail ?
très sympa - le Clustering fait effectivement gagner beaucoup de temps !!
Bon travail, @Jed_Campbell .
Dans de nombreux cas, la sélection des données (extraction de la courbe) fonctionne également en sélectionnant de manière interactive les points/la région d'intérêt dans Graph Builder, puis en inversant la sélection de ligne (dans le tableau) puis en sélectionnant ligne > masquer et exclure. L'espace blanc peut être supprimé de manière similaire, par exemple en sélectionnant un point blanc (dans Graph Builder) > en sélectionnant les cellules correspondantes (clic droit sur la cellule dans le tableau) > ligne > masquer et exclure.
Cela a déjà bien fonctionné pour moi:)
Ce module complémentaire est un grand pas en avant pour les personnes souhaitant récupérer des données à partir d'images de tracé directement dans JMP. Merci de l'avoir rendu disponible !
Pour ceux qui recherchent des tâches similaires, je recommande également l'outil gratuit WebPlotDigitizer ( https://automeris.io/WebPlotDigitizer/ ). Il existe depuis un certain temps et est étonnamment rapide et convivial pour extraire des données de tous types de graphiques. La version 4.x est open source et peut être utilisée hors ligne, ce qui est très pratique.
C'est formidable de voir de plus en plus d'outils disponibles pour ce type de travail. Espérons que le développement continu sur ces deux fronts rendra l'extraction de données encore plus fluide !
De très belles fonctionnalités ajoutées récemment ! Merci @Jed_Campbell !