Satellite Image Save

Python package to process images from Landsat tellites and return geographic information, cloud mask, numpy array, geotiff.

Project README


Build Status codecov


Provides a class to process images from various satellites, return: geographic information, cloud mask, reflectance, brightness temperature.

At this point, Landsat 5, 7, 8 (i.e., TM, ETM+, OLI, TIRS; a.k.a. LT5, LE7, LC8) are supported.
Use Landsat 578 to download and unzip an image based on the date and the location, pass the directory containing the unzipped package of files, and get an object that full attributes, a bounding feature, and methods to return ndarrays with all the information we want from Landsat:

  • Fmask cloudmask, water mask, shadow mask, or combination mask.
  • NDVI, NDSI; Normalized difference vegetation density, snow density.
  • At-satellite brightness temperature for thermal bands.
  • Reflectance for optical bands.
  • Albedo using the method from Smith, currently working on Tasumi.
  • Save any of these arrays as a GeoTiff.


pip install SatelliteImage

Given this small section of a Landsat 7 image of the S. Flathead Lake and the Mission Mountians in Montana, ETM+ band 5:


import os

from sat_image.image import Landsat7
from sat_image.fmask import Fmask

def fmask(image_dir, outdir):
    l7 = Landsat7(image_dir)

    f = Fmask(l7)
    cloud, shadow, water = f.cloud_mask()
    combo = f.cloud_mask(combined=True)

    f.save_array(cloud, os.path.join(outdir, 'cloud_mask_l7.tif'))
    f.save_array(shadow, os.path.join(outdir, 'shadow_mask_l7.tif'))
    f.save_array(water, os.path.join(outdir, 'water_mask_l7.tif'))
    f.save_array(combo, os.path.join(outdir, 'combo_mask_l7.tif'))

    return None

if __name__ == '__main__':
    image_directory = os.path.join('data', 'images', 'LE70410272007125EDC00')
    out_directory = os.path.join('data', 'masks')
    fmask(image_directory, out_directory)

Gives the cloud mask:

the shadow mask:

the water mask:

or a combination of all masks, leaving 0 everywhere there is clear sky:

import os
import datetime

from sat_image.image import Landsat7

def ndvi(image_dir, outdir):
    l7 = Landsat7(image_dir)

    ndvi = l7.ndvi()
    date = l7.date_acquired
    date_str = datetime.datetime.strftime(date, '%Y%m%d')
    ndvi.save_array(ndvi, os.path.join(outdir, 'ndvi_l7_{}.tif'.format(date_str)))

    return None

if __name__ == '__main__':
    out_directory = os.path.join('data', 'ndvi')
    image_directory = os.path.join('data', 'images', 'LE70410272007125EDC00')
    fmask(image_directory, out_directory)

Gives NDVI, or Normalized Density Vegetation Index:

and so on...

We're currently working on atmospheric corrections based on Tasumi (2008). Please contribute and make a pull request!

Open Source Agenda is not affiliated with "Satellite Image" Project. README Source: dgketchum/satellite_image
Open Issues
Last Commit
3 months ago

Open Source Agenda Badge

Open Source Agenda Rating