This module implements the Simplified Method for Atmospheric Correction (SMAC) for hyperspectral data in GRASS GIS. It provides two methods for atmospheric correction:
- Simple SMAC: A faster, less accurate method suitable for quick processing
- Libradtran SMAC: A more accurate method using the libRadtran radiative transfer model
The module is based on the original SMAC algorithm developed by Rahman and Dedieu (1994) and the implementation by Olivier Hagolle.
- Supports multiple hyperspectral sensors (AVIRIS, HYPERION, PRISMA, etc.)
- Two correction methods: simple and libradtran-based
- Automatic estimation of atmospheric parameters:
- Aerosol Optical Depth (AOD) using the Dense Dark Vegetation (DDV) method
- Water Vapor Content (WVC) using atmospheric absorption features
- Uses libRadtran for accurate atmospheric simulations (for libradtran method)
- Handles both per-pixel and scene-average atmospheric correction
- Preserves the original data structure and metadata
- GRASS GIS 8.0 or later
- Python 3.x
- NumPy
- PyEphem (for solar zenith angle estimation)
- libRadtran (for atmospheric simulations)
- scipy (for interpolation and optimization)
- pandas (for data handling)
- scikit-learn (for regression models in AOD estimation)
# Simple SMAC (default)
i.hyper.smac input=name output=name elevation=name [sensor=string]
[aod=float] [water_vapor=float] [ozone=float]
[solar_zenith=float] [solar_azimuth=float]
[view_zenith=float] [view_azimuth=float]
[--overwrite] [--verbose] [--quiet] [--keep-temp]
# Libradtran SMAC
i.hyper.smac input=name output=name elevation=name method=libradtran
sensor=string [aod=float] [water_vapor=float] [ozone=float]
[solar_zenith=float] [solar_azimuth=float]
[view_zenith=float] [view_azimuth=float]
[aot_lut=name] [visibility=float]
[aerosol_type=string] [--overwrite] [--verbose] [--quiet] [--keep-temp]- input - Name of input 3D raster map
- output - Name for output 3D raster map
- elevation - Name of elevation raster map (default: DEM from GRASS location)
- method - Atmospheric correction method (simple, libradtran; default: simple)
- sensor - Sensor type (AVIRIS, HYPERION, PRISMA, etc.)
- aod - Aerosol Optical Depth at 550nm (if not provided, will be estimated)
- water_vapor - Water vapor content in g/cm² (if not provided, will be estimated)
- ozone - Ozone content in cm-atm (default: 0.3)
- solar_zenith - Solar zenith angle in degrees (required)
- solar_azimuth - Solar azimuth angle in degrees (default: 0)
- view_zenith - View zenith angle in degrees (default: 0)
- view_azimuth - View azimuth angle in degrees (default: 0)
- aerosol_type - Aerosol type (continental, maritime, urban, desert; default: continental)
- aot_lut - Look-up table for AOD estimation (if not provided, will be generated)
- visibility - Visibility in km (if not provided, will be estimated from AOD)
# Automatically estimate AOD and water vapor
i.hyper.smac input=hyperspectral output=corrected elevation=dem sensor=AVIRIS# Manually specify AOD and water vapor
i.hyper.smac input=hyperspectral output=corrected elevation=dem sensor=AVIRIS \
aod=0.2 water_vapor=2.5i.hyper.smac input=hyperspectral output=corrected elevation=dem sensor=HYPERION \
aod=0.2 water_vapor=2.5 solar_zenith=30i.hyper.smac input=hyperspectral output=corrected elevation=dem method=libradtran \
sensor=AVIRIS aod=0.15 water_vapor=2.0 solar_zenith=25 \
aerosol_type=maritime visibility=50i.hyper.smac input=hyperspectral output=corrected elevation=dem method=libradtran \
sensor=PRISMA aot_lut=aot_lookup.txt solar_zenith=30-
Automatic Parameter Estimation:
- AOD is estimated using the Dense Dark Vegetation (DDV) method, which identifies dark vegetation pixels and uses their reflectance in the blue region
- Water vapor is estimated using atmospheric absorption features around 940nm and 1130nm
- If estimation fails, default values are used (AOD=0.15, Water Vapor=2.0 g/cm²)
-
Performance Considerations:
- The simple method is faster but less accurate than the libradtran method
- AOD and WVC estimation add computational overhead but improve accuracy
- The module creates temporary files in the current mapset (use
--keep-tempto preserve them)
-
Requirements:
- The libradtran method requires the libRadtran software to be installed and properly configured
- Additional Python packages (scipy, pandas, scikit-learn) are required for parameter estimation
-
Supported Sensors:
- PRISMA, AVIRIS, AVIRIS_NG, HYPERION, ENMAP, OSK_GHOST, PIXEL, ESPER, IPERLITE, KUVASPACE_23, KUVASPACE_32, WYVERN_23, WYVERN_32, HYP4U, TANAGER
-
Best Practices:
- For best results, provide as much metadata as possible
- Verify the estimated parameters using the module's output messages
- Consider using the
--keep-tempflag for debugging if results are unexpected
- Rahman, H., & Dedieu, G. (1994). SMAC: a simplified method for the atmospheric correction of satellite measurements in the solar spectrum. International Journal of Remote Sensing, 15(1), 123-143.
- Original SMAC implementation: https://github.com/olivierhagolle/SMAC
- Original SMAC algorithm: H. Rahman and G. Dedieu
- GRASS GIS implementation: [Yann Chemin] dr.yann.chemin@gmail.com
Available at: GRASS GIS Addons Repository