Images are an often-underutilized data source in analysis tasks. This presentation explores various methods for integrating images into JMP workflows, from importing and processing to use in modeling and experimental design.
Using a fictional case study approach, this presentation begins by showing how to create, import, and use images in JMP data tables. Next, a free JMP Marketplace extension is used to show how to isolate elements within images, calibrate colors and scales, and even perform measurements from within JMP. The presentation also shows how images (and information extracted from images) can serve as inputs or outputs in designed experiments in the FDE and Torch Deep Learning platforms in JMP Pro. Whether you work often with image-based data, or if you just need to extract the data from a graph in an academic journal, this session offers practical insights into making it easy and approachable to work with images in JMP.

Welcome. Thank you for tuning into this. I'm here today to present on basically how to incorporate images into JMP's workflow. I'm going to be presenting today using a mixture of JMP and JMP Pro features, and I'll be sure to call out when I'm using JMP Pro features. But when we talk about incorporating images into JMP's workflow, really the workflow is big, and we can do image work just about anywhere in this workflow, all the way from using images as a data source to using them in analysis, and then, of course, incorporating them into our outputs.
That being said, I want to take a little bit of a case study today, but I want to give a bit of a sneak preview first and walk through what we're going to be talking about. I'm going to show basically how to get JMP to create images for us, how to maybe get images into a data table if I have them from a different source, for example. Maybe you need to extract information from a static image into a dynamic JMP report. We'll do that on a couple of examples. Again, from static images to maybe something that I can actually manipulate.
Then we'll switch gears a little bit and use those images by maybe taking a heat map of something and converting it into a curve that we can use in JMP's Functional Data Explorer. We'll also use images to make a model for temperature. We're going to do a lot of stuff, and we'll even take that model and monitor it live.
That being said, I'm going to go ahead and close this, and we'll just jump in. I thought that this might work best if we talked about it from the idea of a case study. There's a bit of a story going on. Don't read too much into the story because I've made most of this up. It's mostly just for the idea of having a narrative.
We're going to pretend that we are Casey Sparks, and we're an electrical process engineer in charge of making a machine that's critical to our widget making process at the Red Triangle Widgets factory. We've made prototypes of the machine, and the machine just keeps overheating. We've been able to trace this overheating to one specific in-house circuit board on the machine, in-house meaning we build this circuit board in-house. That's really nice because that means we can make modifications to it. Really, the company needs this done yesterday. It needs to be production ready. Production has been struggling to keep up with demand for this new product, and the machine is really going to make it much easier for everybody. It's going to impact everybody's morale. Of course, the overtime budget is suffering because of the workaround.
On a personal note, this persona, Casey, is new to working for Red Triangle, and she wants to make an impact. We all want to make an impact where we're working. We're going to use images to walk through a process of understanding, solving, and verifying that we've solved the problem. We'll go through that understanding process together. We'll go through the experiment process together, and then we'll go through this verification process together, and we'll just basically walk through it.
We'll start with a data table. This probably happens a lot where you're doing some research, and you come up with a set of graphs. It would be really nice if you could bring these into a table and do something with them. It's super easy to do, but it's hidden in this Edit menu.
If you right-click on any image in JMP and then go to the Edit menu, you'll see an option down here that says "make a table of graphs like this". That's really all that it takes. Now, because I have multiple graphs in this report that are the same, JMP has made this table for me, and the graphs are actually brought in at full size, full resolution.
We could start making some notes on each of these files as we're talking about this problem. Casey has found these four potential problems. She wants to make some notes about this and save this file into her project folder so that in the future, when people are looking into this, they'll have these notes and they'll have the graph. That's really, really cool.
Again, it's super easy to do by just right-clicking on a graph, going to the Edit menu, and make a table of graphs like this. That's one of those wow features. I'm going to show you in a little while how to get your own images into a data table really, really quickly, and it'll be just about as fast as that.
Maybe we'll change directions a little bit. We've already have this graph of the initial factors. These are maybe four potential factors that Casey is thinking of experimenting with. She also found a couple of images that she needs to get the data from.
A little detour here. There is a link in this journal, which will be shared, to an extension on the JMP marketplace called Image to Table. Full disclosure, I wrote the add-ins, so of course, I think it's amazing. But you can download it for free and install it into JMP, and then you'll be able to import an image. I've got a couple of examples here of how we're going to do that. We'll take this first example.
Let's say that Casey found... Combing through her company's library of previous experiments, she found a graph from 10 years ago that somebody had made with the power in some arbitrary unit over some other X factor. This is really cool. She's really excited about this because it can help her understand one of her factors. But she would really like to have an estimate and see, does it keep going up? Especially where X equals 7 is where she's really interested in.
Can't she extrapolate to where X equals 7 more than just drawing a line and looking at it with some degree of statistical rigor? Of course, the answer is yes. It's fairly simple. Once that add-in is installed, you just select it, and it will ask you, where is your image file? We're going to point it to that. Excuse me.
We get this an image of the image and a little console down here. I'm just going to push this, remove white pixels, and you'll see that we go from potentially importing 270,000 rows to just 50,000 rows. Images tend to be pretty big when you make them into a table. Anytime we can save time, that's great.
When you push that button, though, you get a data table and a couple of graphs. Sometimes a black and white graph works better, and sometimes a colored graph works better. In this case, I think the colored one will work better. Let's look at a data table with those 50,000 pixels that have been imported. I'm just going to move this down here and think my way through what needs to happen next. We've got a couple of steps that I want to do in order to extrapolate to where X equals 7.
The first thing to do would be to recalibrate our X and Y axes. To do that, I'm just going to make a selection. Because this is just the Graph Builder, it's really easy to interactively select things. I've made the selection of the area on my graph. I'm going to hit this recalibrate X and Y axes. What I have selected is my X axis goes from zero to five and my Y axis goes from zero to one. I just need to put that in. Zero to five and zero to one.
I hit okay, and then it tells me, hey, I created these new columns for you. You might want to use those. Yeah, I like that idea. This amazes me every time I do it, how simple it was and how many times I wish that I had this in the past, having found an image. Now these scales are aligned. This is really, really cool.
The next step that I need to do, though, is I just need to keep just this blue trace in the middle. I don't need all these other colors. Because I now have this data in JMP, this becomes a trivial task. I'm going to go to the Clustering menu and K Means Clustering is extremely fast with fairly large data sets like this.
All I really need to do is tell JMP, I want you to make clusters of colors. I want you to separate this into a number of colors. Now I can take a look at the graph and I can count on my fingers. I've got black and two grays and blue. So that's four colors. I might be tempted to put in 4 right here.
What I found, though, is because the computers when they make images, they blend the colors together. I found that doubling the number of colors you can see, it's really, really good results. I hit this go. Again, this is nice and interactive, so I can use the down arrow on my keyboard and just walk my way through.
It's not Cluster 1. Oh, I guess one click, and I'm there. It is Cluster 2. I could keep going. What I want to do is I want to just select everything except for Cluster 2, and then I'll go to my data table and delete those rows. There you go. I now have that blue trace, and it's in the correct units. It's really easy for me now to come in and maybe fit that curve with my calibrated units.
I know since this goes up and down... I'm going to hit Alt as I click this. I know as this goes up and down, it's probably biexponential, but I don't know if it's 4 or 5. I probably should have memorized that. It is a biexponential 5 parameter because that's the one on top, so I'm going to eliminate this.
Now, all of a sudden, I have the ability to extrapolate here. That's a really good R-square, 0.99. I can look at that profiler. I can see where we're at 7. I can get that value. It's really, really easy to get things from images into JMP like that. Let me clean up and we'll take another example. Let me do this.
Can Casey extrapolate to where X is 7? Yeah, pretty easily. It takes a couple of steps. Here's another graph that Casey found. We'll pretend that this was from an academic journal, and you see that it's two different groups, but it's just a graph, or I shouldn't say graph, it's just an image of a graph.
What she'd really like to do is maybe get a line of fit for the yellow points and for the green points, two different lines of fit. She doesn't have the data, this is just something that she grabbed from the Internet. Can she get a line of fit for each group? Of course, the answer is going to be yes. We're going to use that add-in again with this image to table. We'll choose this sample scatter plot.
Incidentally, I neglected to say this, if you're downloading this journal, you'll have access to all the files. You push that button, then it'll create all the files you need.
We just need to do the same thing as we did before. We'll start the same way by removing those white pixels. We'll hit that Import button. Once it's imported, we'll do the same thing we did before to recalibrate our axes, which was to select the region that we know is bounded. It looks like it goes from 50 to 70 on the X and from 60 to 180 on the Y. I could hit this recalibrate and go from 50 to 70 and then 60 to 180. Hit okay. Now I have these new axes. That's so cool.
Next up is I want to categorize these data points by their color. Again, in Graph Builder, I'm just going to select the things that are important to me. Then I'm going to come over here, and I'm going to say, I want to do some color calibration. There are a couple of options here. This one is a categorical legend, and it's text or characters.
I'm going to push this and JMP will... I probably should have got that data table out of the way. There we go. It's highlighted these green ones. It's daring me to type in what the text is associated with those. That's A. Next up is B. It tends to find a couple of extra colors, like we mentioned that computers do that blending. I'm going to skip any other ones that show up. There we go. There were three extra colors in the background that we didn't really care about.
But here's something really cool. Now, if I go to the data table and I select my A's, that's the green, I select the B's, that's the yellow/orange. But maybe even more importantly, here's everything else. Since I don't care about that everything else, I can delete it. Then there's just this remnant of the legend right here, and I can delete that.
Now I have the data pulled in. What I don't have, though, quite yet is one individual point. I have 46 points. I fear if I were to maybe do that line of fit, it might not be super accurate because each of these data groups is a different number of points. I don't think we're quite ready yet. Perhaps what I want to do instead is I want to get the center of each of these points. We're going to use the same tool as before, this K Means clustering.
Instead of clustering on the colors, which I already have those, correct, I'm going to cluster on X and Y groups. Basically, I'm telling JMP, I want you to create a number of clusters. Now, we're faced with this. How many clusters? I don't know. It looks like somewhere between 30 and 40. I could count them, but if I just put this range of clusters in instead, then I'm going to let JMP tell me that apparently it's 38 clusters. I like that much better than counting by hand.
I'm going to come here at this 38 and just double check. I want to save the colors to the table. Now this will change the colors in the Graph Builder. As long as I don't see maybe one of these data points cut directly in half, then I know I got the right number. I can save these clusters to the table. Now my data table has basically everything I need to do. It has the clusters and the labels.
I can summarize all of this very quickly by saying, I want to know which group it is, each of my clusters is, and then I want to know the midpoint or the mean of the X and Y. If I make that into a data table, then I can pull this into the Graph Builder and I can finally answer this question. Finally, meaning, what, this took us about 2 minutes altogether. So cool.
Now I can look for this and I ask for that equation. Back to our original question, can Casey calculate the line of fit for each group? She totally can. We can get information from images pretty easily. We can manipulate that information, and we can use JMPs tools for it. It's really, really cool. To me, it's really impressive just how much you can do with it.
Clean up here, and then we'll move on to the next stage, which is... In this background information, Casey used all this information to narrow down on a number of factors for her experiment. Again, we're trying to reduce the temperature here of a component. She narrowed it down to a number of factors, and she created these test boards, 20 of them.
Then she ran each of the boards through a 20-minute stress test, but the output wasn't a number. The output was a thermal image, something that maybe looks a little bit like this. Is there a way that she can use that image to lower the total temperature, not maybe just the hottest point, but the total temperature of the board? Of course, the answer is going to be yes. We've done this, use the image to table, so I'm taking a shortcut here.
Basically, there's a little process that we need to go through with this data for each of the images for her test. You can't really see it very well, probably, but there's a little light gray border here. If I select that and then delete it and then select the hottest point, so that's right here, and then I select the same Ys that that hottest point is and remove other points, then I can change the Y axis here from just that one trace to looking at the temperature itself, and I can use that.
That might seem complicated, but I made a workflow to do it as well. This was just me recording myself doing it in JMP once. I did cheat a little bit and made a little script, but that was just for selection. The workflow asks me, hey, what run number was this? It'll save that data table.
Life is really good. Doing this with 20 images not a big deal. If you really hate doing the same workflow 20 times, you can also just write a script to do it. I won't show you that, but I've included that as well in case you're curious. That process can be followed. Casey can use that process to take the temperature for... We'll look at run one for each X position.
You see how the DOE has been replicated a bunch of times for each of our runs. Now we've created this 20-run DOE and incorporated the image information into it. What that means then is that we can use the Functional Data Explorer. By the way, the Functional Data Explorer is a JMP Pro feature, but we can use that Functional Data Explorer on all of these traces. Sorry, I skipped a step here. This data table might make a little more sense.
I've got all of these runs and all the traces from all of these test boards as well as I have a run zero, this ideal. I can tell the Functional Data Explorer in JMP Pro, "Hey, here are all my traces. I've got a target. Can you optimize that target?" It will tell me where my factor settings need to be to make that happen. I can also experiment with that and see what happens to that temperature trace.
It's super cool being able to go from images of a circuit board and its temperature to DOE settings and factor settings that will minimize that overall temperature across the whole surface, not just improving one data point that may be at the expense of other data points. That's really, really cool.
Casey does that experiment and completes it, and she builds her ideal sweet spot circuit board, and she's ready to put the final machine into production, but she wants to monitor it because it's one thing to run a DOE and get a sweet spot. It's another thing to get that sweet spot into production and verify and make sure that it really is performing well.
The issue here is that the test apparatus has a calibrated temperature sensors and a thermal camera. She's been able to have access to both, but the production machine only has a thermal camera, and that thermal camera is already installed, so she doesn't want to swap anything out in terms of temperature. She still wants to know what is that maximum temperature that's going on.
A couple of questions. Can she use an image as a thermometer? Maybe pushing things a little bit farther, can she get notified if the temperature gets too hot? I don't know. If she's wondering what the temperature is, can she check it on her phone? Let's start with these images as a thermometer. Again, if you push that button, it'll create this folder for you as well.
With all of these DOE files, including the images, you see how run number 1 here is a little bit brighter, therefore a little bit hotter than run number 2. What I'd like to do is I'd like to get all of these images into JMP really quickly and create basically a data set with them. It's super easy. It's here in the file, Import multiple files. It's right there. I just need to tell JMP where to do this. Of course, it remembers the last time I used it, so it's already there.
I'm going to select files by extension, and I have a bunch of PNG files, because I don't want to import the JMP files as well, just the images. If I click this Add File Name column, JMP is automatically going to say, "Oh, you've got a bunch of images? I know how to deal with those. I'm just going to put them in a data table for you."
I didn't have to copy and paste anything. Basically, it was three clicks and we got it. It was really cool. The images come in ready to use. With a little bit of recoding, I can get this file name down to just the run number.
For the sake of our case study, we'll pretend that Casey did this work. She got the run number, the actual max temperature, because, again, her machine has sensors and a thermal camera. She's just going to use this to test and basically make a model to see if she can predict temperature based on an image. It's a little bit computationally intensive. This also is a JMP Pro feature. It's an add-in for JMP Pro, but basically, it's a way to use images and use those images to create a model. It's really cool.
\In this case, we've got a model that is predicting... It's got an R-square of about 0.8 on data that was withheld from the model. Casey continues take that model and generate the Python code for it, and then take that Python code. Of course, I think she'll have to install a couple of modules in her production machine. Take this Python code and install it in the production machine.
Then the production machine can use the model that was created in JMP, but it will use the Python version of it. She doesn't have to have JMP installed on every machine in the world. She just uses JMP to make that model, and then the machine can run that model. Really, really cool. She put some code in there also to output that to a database, and then she uses JMP Live to automatically refresh and see what that temperature is doing.
She's subscribed to any warnings. If it goes out of control, she'll know right away, or she can look at it on her phone as well. I guess I should show what it would look like on a phone. She can see that on her phone. Yeah, everything is good. The answer to the question is, can she get notified if the temperature gets too hot? Can she check the temperature from her phone? Yes, yes, yes. I think the coolest thing here is that she used images in a data table to create a model for temperature, and that model predicts super, super well.
If we take a step back, what did we do today? Well, we got some images from JMP. Excuse me. We had JMP make some images for us. We brought images into a table. We brought information that was contained and just graphs or just images into JMP, and we were able to manipulate that, use that.
Then we were able to use those things to conduct an experiment using the curve extrapolated from an image and then also use an image itself as a factor in building a model. Thanks for tuning in. Super excited to see what the next things that we can do with images are. Thanks.
Presenter
Skill level
- Beginner
- Intermediate
- Advanced