Monday, March 28, 2016

A simple GUI for analyzing thermal images

One of the grad students in the lab has started a project on thermoregulation, and he measures mouse tail temperature using an infrared camera from FLIR. FLIR has an analysis tool for its cameras which works OK, but is not really designed for analyzing hundreds of images. To save him some time, I made a simple GUI for analyzing thermal images. In this post I'm going to outline the design of the gui, and how to use it, in case anyone else needs to analyze lots of thermal images.

Creating temperature images

The FLIR camera stores images in pseudocolor jpegs that look like this:



However, these jpegs do not contain the actual temperature data. To figure out where the temperature data was, I consulted this thread from two years ago about FLIR images. I learned that the data is actually contained in the EXIF for the jpeg, is only 80x60 pixels (compared to the jpeg's 320x240), contains intensity data (not temperature), and that the data was stored with the wrong -endian. Luckily, the thread contained enough details that I was able to figure out how to extract the image from the EXIF using exiftool, and was able to switch the endian using ImageMagick.

Once I had the imaging data, I then needed to convert it to temperature. Here the thread came in handy again, specifically this post which outlined how to convert radiance to temperature. All of the constants for the equation are also stored in the EXIF of the jpeg, which allowed me to calculate the temperature for each point.

The GUI

Once I was able to calculate true-temperature images, it was time to make the GUI! Previously I've made GUIs using QT Designer, but I found an outline of a tkinter script that records the x,y coordinates whenever someone clicks on an image, so I decided to modify that instead. For the image to click on, I decided to go with a grayscale version of the pseudocolor jpeg, as it looks a lot nicer.

To use the GUI, you need to install python 3.4, exiftool and ImageMagick. Then to run the gui, open a command prompt, and go to the directory with the images, then execute:

python mouse_tail_gui.py

Grayscale version you can click on! The GUI uses the .jpg for display, but loads the temperature data in the background.

Once it opens, simply click on the pixel you want the temperature of, and the GUI will output the temperature of that pixel on the command line. If you are analyzing a bunch of images, you can hit space to go to the next image, or 'q' to quit. When you are done, the GUI will save a .csv containing the names of each image, and the temperature for that image.

Exciting screenshot of a CSV! Temperatures are in Celsius.
If this GUI sounds interesting to you, you can download the script. That folder contains: 1) a README.txt explaining how to install everything, and intructions on how to run the GUI; and 2) the script for the GUI, mouse_tail_gui.py. Everything was written in python 3. If you are using the script on Windows you may have to install packages for tkinter and image. If you have any problems, please contact me, as I helped someone else in the lab set it up.

7 comments:

  1. Hi Mike. What's the frame rate like? Can you detect respiratory fluctuations in temperature of the nose tip?

    ReplyDelete
  2. We're mostly interested in thermoregulation, so we just take one image every five minutes. I looked around, and FLIR sells a ~$400 model (C2) that allows you to stream video to a PC, but I have no idea what the framerate is. With mice that breath at 3-6Hz, I'd bet 30Hz would be ok. For primates, it's probably a lot easier.

    ReplyDelete
  3. I'm thinking about both primates and rats ATM. Flir C2 runs at 9Hz, so no dice there, even if the spatial res and sensitivity are good enough (which I don't know).

    ReplyDelete
    Replies
    1. FLIR has some higher end video cameras, with higher resolution and frame rate. Of course, they run > $10,000.

      Delete
  4. S.V.S: maybe this would work for you:

    http://people.csail.mit.edu/mrub/vidmag/

    ReplyDelete
  5. Hi, one question, how could I get the temperature from pictures fron a IR xenics camera? I can get only the video and pictures from the IR camera but not the range of temperatures.
    I look forward for your answer
    L.

    ReplyDelete
    Replies
    1. Sorry, my lab only had a FLIR camera, I don't know about Xenics.

      Delete

Note: Only a member of this blog may post a comment.