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!



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 >

Deploy, Share, Repeat: AI Meets the Analytics Repository

Deploy, Share, Repeat: AI Meets the Analytics Repository

10/13/2025

The upcoming release of ENVI® Deep Learning 4.0 makes it easier than ever to import, deploy, and share AI models, including industry-standard ONNX models, using the integrated Analytics Repository. Whether you're building deep learning models in PyTorch, TensorFlow, or using ENVI’s native model creation tools, ENVI... Read More >

1345678910Last
14317 Rate this article:
No rating

An ENVI 5 batch program

Anonym

ENVI 5, released last week, has a new UI and API. I’d like to show a pair of examples that use the API: this week, a batch program; next week, an extension (the successor to a user function). Batch programs are used to perform a sequence of processing tasks, typically noninteractively. They may use routines from both the ENVI and IDL libraries. Since batch programs are invoked from IDL, they require ENVI+IDL. I’d like to show a familiar task: creating an NDVI image from the Bighorn Landsat 7 ETM+ scene included in the ENVI distribution. Here’s the beginning of the batch program:

pro envi5_batch_ex
   compile_opt idl2

   e = envi(/headless)

Calling ENVI as a function starts the interface to ENVI 5. (You can still access ENVI Classic (the new nickname for three-window ENVI) by calling ENVI as a procedure.) The HEADLESS keyword starts ENVI without a UI, similar to the Classic ENVI_BATCH_INIT routine. The return value from the ENVI function is a reference for this ENVI session. Next, set up a path to the Bighorn Landsat file and get a reference to it:

   infile = filepath('bhtmref.img', $
      root_dir=e.root_dir, $
      subdirectory=['classic','data'])
   bh = e.openraster(infile)

The reference e is used here twice: the ROOT_DIR property holds the path to the ENVI installation directory; the OpenRaster method creates a new instance of the ENVIRaster class for this file. The reference bh is analogous to a FID in Classic, but it also holds image metadata, so an ENVIRaster in effect combines the functionality of ENVI_OPEN_FILE and ENVI_FILE_QUERY in Classic. To compute NDVI, I’ll choose to use the Classic NDVI_DOIT routine. Most of the DOIT routines haven’t yet been ported from Classic to ENVI 5; this will occur over the next few service packs. I’ll show here a technique that’ll work in this transitional period. NDVI_DOIT requires an input FID, which we don’t have. Use the ENVIRASTERTOFID function to extract a FID from the existing ENVIRaster object:

   bh_fid = envirastertofid(bh)

Note that ENVIRASTERTOFID has a complement, ENVIFIDTORASTER, that converts a FID to an ENVIRaster. Next, set up additional information required by NDVI_DOIT:

   outfile = e.getpreference('output_directory') + 'bhtmref_ndvi.img'
   bh_dims = [-1, 0, bh.ncolumns-1, 0, bh.nrows-1]
   bh_pos = [4,3] - 1 ; Landsat [nir,red] bands
   bh_dt = 4 ; float

The GetPreference method allows programmatic access to certain ENVI preferences. I’m using it here to get the path to the user’s output directory, where NVDI_DOIT will write its result. The variables bh_dims, bh_pos and bh_dt set up the band dimensions, band position vector and data type for the NDVI calculation. Note how the number of samples and number of lines in the image are pulled from the ENVIRaster reference bh. Now that setup is complete, call NDVI_DOIT through the ENVI_DOIT wrapper:

   envi_doit, 'ndvi_doit', $
      fid=bh_fid, $
      dims=bh_dims, $
      pos=bh_pos, $
      /check, $
      out_bname='Calculated NDVI', $
      out_dt=bh_dt, $
      out_name=outfile, $
      r_fid=r_fid
   print,'New file written to: ' + outfile

Finish the program by closing the headless ENVI session and returning to IDL:

   e.close
end

The Close method is the analogue to the Classic ENVI_BATCH_EXIT routine. Execute this program with the Run button in the IDL Workbench or by calling it from the IDL command prompt:

IDL> envi5_batch_ex
% Compiled module: ENVI5_BATCH_EX.
% Restored file: ENVI.
New file written to: C:\mpiper\ENVI\output\bhtmref_ndvi.img

Grab the source code for this example here.

Please login or register to post comments.