X

NV5 Geospatial Blog

Each month, NV5 Geospatial posts new blog content across a variety of categories. Browse our latest posts below to learn about important geospatial information or use the search bar to find a specific topic or author. Stay informed of the latest blog posts, events, and technologies by joining our email list!



From Answers to Action: Why ENVI and IDL Agents Go Beyond General AI

From Answers to Action: Why ENVI and IDL Agents Go Beyond General AI

4/20/2026

As generative AI tools like Claude and Gemini continue to gain traction, many organizations are asking the same question: Can general purpose AI actually support real geospatial workflows, or does it stop at surface-level answers? That question was front and center in our recent webinar, Meet Your New Partners in Science: ENVI... Read More >

Mapping Earthquake Deformation in Taiwan With ENVI

Mapping Earthquake Deformation in Taiwan With ENVI

12/15/2025

Unlocking Critical Insights With ENVI® Tools Taiwan sits at the junction of major tectonic plates and regularly experiences powerful earthquakes. Understanding how the ground moves during these events is essential for disaster preparedness, public safety, and building community resilience. But traditional approaches like field... Read More >

Comparing Amplitude and Coherence Time Series With ICEYE US GTR Data and ENVI SARscape

Comparing Amplitude and Coherence Time Series With ICEYE US GTR Data and ENVI SARscape

12/3/2025

Large commercial SAR satellite constellations have opened a new era for persistent Earth monitoring, giving analysts the ability to move beyond simple two-image comparisons into robust time series analysis. By acquiring SAR data with near-identical geometry every 24 hours, Ground Track Repeat (GTR) missions minimize geometric decorrelation,... Read More >

Empowering D&I Analysts to Maximize the Value of SAR

Empowering D&I Analysts to Maximize the Value of SAR

12/1/2025

Defense and intelligence (D&I) analysts rely on high-resolution imagery with frequent revisit times to effectively monitor operational areas. While optical imagery is valuable, it faces limitations from cloud cover, smoke, and in some cases, infrequent revisit times. These challenges can hinder timely and accurate data collection and... Read More >

Easily Share Workflows With the Analytics Repository

Easily Share Workflows With the Analytics Repository

10/27/2025

With the recent release of ENVI® 6.2 and the Analytics Repository, it’s now easier than ever to create and share image processing workflows across your organization. With that in mind, we wrote this blog to: Introduce the Analytics Repository Describe how you can use ENVI’s interactive workflows to... Read More >

1345678910Last
«May 2026»
SunMonTueWedThuFriSat
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456
22908 Rate this article:
.5

Converting an indexed image into an RGB image

Anonym

Here’s an example of how to convert an indexed image into an RGB image. Though they require more memory, I often find RGB images easier to work with because I don’t have to deal with color tables: I invariably forget to read the color table of an indexed image or pass the color table to a display routine in IDL. Start by reading an indexed image from a PNG file in IDL’s examples/data directory:

 IDL> f = file_which('africavlc.png') IDL> img = read_image(f, r, g, b) IDL> help, img, r, g, b IMG BYTE = Array[540, 560] R BYTE = Array[256] G BYTE = Array[256] B BYTE = Array[256]

The variable img is a two-dimensional array. The value of each element of img is mapped as an index into the arrays r, g and b; this is what gives each pixel of the image its RGB color[1]. Visualize the image with:

 IDL> i_idx = image(img, rgb_table=[[r],[g],[b]])

To create a single RGB image from these four arrays, perform the following array concatentation[2]:

 IDL> rgb = [[[r[img]]], [[g[img]]], [[b[img]]]] IDL> help, rgb RGB BYTE = Array[540, 560, 3]

This makes an RGB image with band sequential interleaving. Use TRANSPOSE to convert it to a pixel-interleaved RGB image:

 IDL> rgb = transpose(rgb, [2,0,1]) IDL> help, rgb RGB BYTE = Array[3, 540, 560]

View the result with:

 IDL> i_rgb = image(rgb)

Last, write the RGB image to a new PNG file:

 IDL> write_png, 'africavlc_rgb.png', rgb

An RGB image created from an indexed image


[1] For example, the value of img at [200,300] is 65. The RGB triple formed by [r[65], g[65], b[65]] is [50, 145, 19], the greenish color you see at this location in img.
[2] The values of img are being used as subscripts into the arrays r, g and b, so r[img] is a 540 x 560 array of 8-bit intensities in the red channel. Doing the same for g and b provides the intensities for the green and blue channels. (This is the inverse of [1]!) Experiment with img as a simple 2 x 2 array of colors to see how this works.
Please login or register to post comments.