Skip to content

Destriping algorithm for VIIRS/MODIS Ocean Products.

License

Notifications You must be signed in to change notification settings

ShenghaiLiao/destriping-dap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Destriping algorithm for VIIRS/MODIS Ocean Products.

This software was developed by the SST group at NOAA STAR (Lead: A. Ignatov). It is designed to destripe VIIRS Level 1b (SDR) and MODIS Level 1b data. See the following publication for more details on the algorithm:

Bouali, Marouan, and Alexander Ignatov, 2014: Adaptive Reduction
of Striping for Improved Sea Surface Temperature Imagery from Suomi
National Polar-Orbiting Partnership (S-NPP) Visible Infrared Imaging
Radiometer Suite (VIIRS).  J. Atmos. Oceanic Technol., 31, 150–163. doi:
http://dx.doi.org/10.1175/JTECH-D-13-00035.1

Dependencies

Besides standard C library functions, this code relies on the following libraries:

  • fftw3 library (float version),
  • HDF5 library (and dependencies, such as libsz, libz) for destripe_viirs,
  • HDF4 library (and dependencies, such as libjpeg, libsz, libz) for destripe_modis,
  • libpthread, and
  • OpenMP library (such as libiomp5 or libgomp)

The code is designed to run multiple threads using OpenMP. The number of threads can be set before execution by setting environment variable OMP_NUM_THREADS.

Installation

To install, run make install inside destripe_viirs or destripe_modis directory. You may need to adapt the Makefile for your system. The installed binary is named destripe_viirs or destripe_modis respectively.

Usage for VIIRS

On input, it requires two command line arguments: First argument should be the name of hdf5 file containing VIIRS SDR data, Second argument is the parameter file (see sample at destripe_viirs/destriping_viirs_param.txt).

On output, the hdf5 file with VIIRS SDR data is modified - the original data are replaced by the destriped data. In addition, it includes a destriping attribute under data field Data_Products/VIIRS-M??-SDR/VIIRS-M??-SDR_Aggr. The name of destriping attribute is DestripingBrightnessTemperature for bands 12-16, and it is DestripingReflectance for bands 1-11.

Below is an example of destriping band 12 of a VIIRS granule. First, download the example granule we've made available:

$ curl -O ftp://www.star.nesdis.noaa.gov/pub/sod/osb/aignatov/ACSPO/destriping/GMODO_npp_d20140410_t2130000_e2140001_b12705_c20140414174333267547_star_dev.h5
$ curl -O ftp://www.star.nesdis.noaa.gov/pub/sod/osb/aignatov/ACSPO/destriping/SVM12_npp_d20140410_t2130000_e2140001_b12705_c20140414174333267547_star_dev.h5

This is the dataset that we want to destripe:

$ h5dump -H SVM12_npp_d20140410_t2130000_e2140001_b12705_c20140414174333267547_star_dev.h5
...
   GROUP "Data_Products" {
      GROUP "VIIRS-M12-SDR" {
         DATASET "VIIRS-M12-SDR_Aggr" {
            DATATYPE  H5T_REFERENCE { H5T_STD_REF_OBJECT }
            DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
         }
...

Next, run the VIIRS destriping program. One OpenMP thread is fast enough for us:

$ export OMP_NUM_THREADS=1
$ destripe_viirs SVM12_npp_d20140410_t2130000_e2140001_b12705_c20140414174333267547_star_dev.h5 destriping_viirs_param.txt
destripe_viirs SVM12_npp_d20140410_t2130000_e2140001_b12705_c20140414174333267547_star_dev.h5 destriping_viirs_param.txt
numthreads = 1 maxthreads =  1
5 16 8 0.001000 0.020000 0.050000 0.000000 0.250000
7 16 8 0.001000 0.020000 0.050000 0.000000 0.250000
10 16 8 0.001000 0.020000 0.050000 0.000000 0.250000
12 16 8 0.050000 0.300000 0.500000 270.000000 320.000000
13 16 8 0.200000 0.300000 0.500000 270.000000 320.000000
14 16 8 0.050000 0.300000 0.500000 270.000000 320.000000
15 16 8 0.050000 0.300000 0.500000 270.000000 320.000000
16 16 8 0.050000 0.300000 0.500000 270.000000 320.000000
Band = 12
12 16 8 0.050000 0.300000 0.500000 270.000000 320.000000
Destriping atribute location = Data_Products/VIIRS-M12-SDR/VIIRS-M12-SDR_Aggr
Destriping atribute name = DestripingBrightnessTemperature
Data location = All_Data/VIIRS-M12-SDR_All/BrightnessTemperature
Corresponding geofile = GMODO_npp_d20140410_t2130000_e2140001_b12705_c20140414174333267547_star_dev.h5
nx = 3200 ny = 5408
scale = 0.002518 offset = 203.000000
fftw3 initialized on 1 threads
Iteration number: 0
Iteration number: 1
Iteration number: 2
Iteration number: 3
Iteration number: 4
Iteration number: 5
Iteration number: 6
Iteration number: 7
Average correction = -9.832491e-05
VIIRS_band    NIF        NDF      domain_size
    12      0.071900  0.956226      3654949

Now, if we look at the dataset, we see that the attribute DestripingBrightnessTemperature was added to it, which means it was successfully destriped:

$ h5dump -H SVM12_npp_d20140410_t2130000_e2140001_b12705_c20140414174333267547_star_dev.h5
...
   GROUP "Data_Products" {
      GROUP "VIIRS-M12-SDR" {
         DATASET "VIIRS-M12-SDR_Aggr" {
            DATATYPE  H5T_REFERENCE { H5T_STD_REF_OBJECT }
            DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
            ATTRIBUTE "DestripingBrightnessTemperature" {
               DATATYPE  H5T_IEEE_F32LE
               DATASPACE  SCALAR
            }
         }
...

Usage for MODIS

The usage of destripe_modis is similar to destripe_viirs. See destripe_modis/README file for more details.

License

Copyright 2014, NOAA STAR SST Team. All Rights Reserved. See accompanying LICENSE.txt file for use and distribution.

About

Destriping algorithm for VIIRS/MODIS Ocean Products.

Resources

License

Stars

Watchers

Forks

Packages

No packages published