Documentation‎ > ‎

4. LUTs

About LUTs

LUTs, or false-color lookup tables, allow for indexed color values to be quickly applied to data as a visualization.

This only has one goal -- to make information more easily understood.

LUTs are primary used by the mapping and gamma spectroscopy components.  This section contains early documentation and specific examples of this in action, with further links and information if you wanted to know more.

LUT Options

Available options for LUTs can vary depending on how they are used by a specific component.

In general, the options available are:
  • Scale Mode (linear, LN, LOG10)
    • LN and LOG10 are non-linear scaling used to provide improved contrast at low ranges, while compressing high ranges
    • LOG10 provides a stronger non-linear histogram shift than "LN"
  • Range (min, max)
    • Note the gamma spectroscopy histogram has a fixed range of 0.0 - 2000.0 keV applied presently.
  • Invert
    • Invert reverses the order of the colors, it does not invert the RGB values.
  • Discretize
    • Decreases the color depth of a LUT, which in some situations can make larger-scale patterns more visible.

Specific LUT Information
  • Rainbow
    • If you've seen the film "Predator", you know what this is.
    • General 3-color LUT.
    • Best in cases where each color band highlights a distinct range of data
    • Weak in cases where data ranges bleed across color bands
    • From ImageJ's "Rainbow RGB"
  • Safecast
    • Copy of Safecast's palette used on their web map
    • Isothermic palette; clear breakpoints at 0.2, 0.5, 1.0, 5.0, and 10.0.
    • These breakpoints are fixed and the scale is static
    • Isothermic palettes excel at highlighting bands of data with greater contrast, but do so at the cost of not showing relative intensity in that band well (or at all).
    • From Safecast
  • Fire (default)
    • This type of palette is sort of the new standard in thermal cameras (at least the building inspection ones)
    • This emulates how hot liquid metal looks to the human eye (ie, black body radiation)
    • Less prone to banding effects than rainbow
    • Somewhat better contrast at low intensities than rainbow
    • From ImageJ
      • (image credit: FLIR)
  • Green Fire Blue
    • Rainbow palette with somewhat higher brightness and lower contrast
    • From ImageJ
  • Smart
    • Isothermic palette
    • General idea is, make anything around normal levels grayscale, and only color in the hotspots
    • From ImageJ
  • Thallium
    • Monochrome green palette
    • Provides better contrast at higher ranges, by sacrificing contrast at lower ranges (black crush)
    • From ImageJ
  • Arctic
    • Higher brightness rainbow palette
    • Similar to (but distinct from) ImageJ's "cool" LUT
  • White Hot
    • Simple luminance scaling based on intensity
    • Extremely common palette used pretty much everywhere
    • Lack of chroma makes it have less visible contrast to the human eye
  • Black Hot
    • Inverse of white hot.
    • Shows lower intensities better than white hot, generally.
    • Again, generally less contrast than colored palettes.
  • ENVG Color Fusion
    • Variant of the "Smart"-type LUT, with better brightness at lower ranges
    • Green and then breaks to orange -> yellow
    • This is a LUT I created based on one of the AN/PSQ-20's display modes
      • (image credit: TNVC)
  • Gem
    • Darker version of Iron, mostly
    • From ImageJ
  • Isotherm
    • Pretty standard white-hot with red-high and blue-low isotherm bands
    • Good at highlighting extremes
    • Used to find dew points in thermal cameras
    • Similar to (but distinct from) ImageJ's "HiLo" LUT
  • Rainbow HC
    • A rainbow variant with 6 colors
    • Increased bands cover large differences better, but it is excessive for limited ranges
  • Cherenkov
    • A monochrome blue palette with a higher minimum brightness
    • I modeled this after the visual appearance of Cherenkov radiation
    • Similar to (but distinct from) ImageJ's "Cyan Hot" LUT
  • Firestorm
    • Similar to Cherenkov, intent was a palette with increased minimum brightness
    • Similar to (but distinct from) ImageJ's "Red Hot" LUT
  • RGB Ramps
    • Very heavily banded palette
    • Situationally useful for increased contrast in small ranges of data
  • Many LUTs have been converted directly from ImageJ.  Don't thank me, thank the NIH.

LUT Example: X-Ray of Canine Lateral Abdomen

The original image is the first.  The other images have been colored using ImageJ's LUTs that are also available for mapping in Geiger Bot.  

Some are built-in to ImageJ, the others I have created and imported. (using the NucMed plugins)

While you're looking at map data and not a radiograph, this should at least be a good visual example of the differences between some of the LUTs.  Other than the LUT being applied, they are unaltered.

 White Hot**
Black Hot 

**actually black hot, but we'll ignore that for a better visual comparison


 Fire (ImageJ)
Iron (FLIR) 
Gem (ImageJ) 

 Blue Red Blended (FLIR)
Rainbow RGB (ImageJ) 
Rainbow (FLIR) 
Rainbow HC (FLIR)

 Lava (FLIR)
Arctic (FLIR) 
Green Fire Blue (ImageJ)

Thallium (ImageJ) 

 Smart (ImageJ)
ENVG Color Fusion
 RGB Ramps


Note how "Green Fire Blue" shows blown highlights vs. the source image.  And how "Thallium" exhibits black crush while at the same time enhancing the contrast of the bone structure.  Yet, for "Green Fire Blue", intermediate contrast is enhanced, and a pathology in this image (bladder hypertrophy) is more apparent than in the original image. (in "Thallium" it is lost)

The "isothermic" type palettes try to band colors to highlight layers that may or may not exist.  "Isotherm" itself only partially highlights the bones, making it not particularly useful in this case unless the image histogram were altered.  "Smart" and "ENVG Color Fusion" both do a better job separating soft tissue from bone, but neither are truly successful.  (in this image, due to the source contrast, it is not possible to isolate the bone and soft tissue by luma)

"Rainbow HC" goes in the other direction, and overall decreases the image contrast because the heavy color banding make the original luma values difficult to differentiate.  The hypertrophic bladder pathology is not really visible.  And such is the double-edge of color perception; it can obfuscate changes in brightness.  (which is why red-green colorblind soldiers were sometimes used to defeat enemy camouflage)

Optimal LUT Selection:

There is no one perfect LUT.  For the absolute best view of a particular dataset -- be it an x-ray radiograph, map of geolocated radiation data in Geiger Bot, or thermal camera image -- the minimum and maximum values probably need to be tweaked, and the LUT chosen and tested by trial and error.  It is a somewhat more specialized version of postprocessing images with Photoshop.

That said, some of the LUTs are more specialized than others.  For general use, specifically in Geiger Bot's mapping module for radiation data, I think "Iron" works the best with diverse ranges of data and loss of intermediate contrast data (ie, abrupt jumps in color instead of smooth scaling).  But, it is fully customizable, and you can choose your own default as you like.

Further LUT Use Links
  • ImageJ
    • In two words, I'd say it is the "scientific Photoshop".
    • Great tool with many built-in LUTs
    • Free and Java-based
    • The 3D surface plots are also nifty
  • ImageJ NucMed Plugins
    • Essential tools for easily importing/exporting LUTs from ImageJ
    • Would also probably be good if only there were giant machines that could see inside the human body
  • VirtualDub
    • Want to apply LUTs to video data in realtime?  First download this.  (Win32/64 only)
    • You'll be using it in "Capture" mode.
    • Not very exciting for imagery in the visual spectrum, but great if you have a thermal camera that is white-hot / black-hot only like me.
  • Pseudocolor Filter for Virtual Dub
    • After dropping this into your Virtual Dub directory:
      • 1.  Go to capture Mode in Virtual Dub
      • 2.  Select an input source (video in / camera)
      • 3.  Make sure preview / both fields is enabled
      • 4.  Make sure filters are enabled
      • 5.  Add the pseudocolor filter to the chain
      • 6.  Configure it by selecting a LUT file
    • Fun fact: The (terrible) LUTs that come with this originated with the old DOS program "FractInt".
  • LUT Maker for VDub's Pseudocolor Filter
    • I made most of my custom LUTs with this
    • Hey, it's easier than coding Chebyshev polynomials
While I would love to have a LUT import feature in Geiger Bot the time constraints make it unlikely to happen anytime soon.  Nonetheless, if anyone creates any LUTs they'd like to see in Geiger Bot, email them to me and I'll probably add them.