Skip to content

Sharpening Functions

Aaron Zuspan edited this page Apr 25, 2022 · 11 revisions

Sharpening functions apply pan-sharpening algorithms to combine the spectral detail of one image (such as a multiband Landsat image) with the spatial detail of another image (such as a panchromatic Landsat band). Pan-sharpening algorithms differ in how exactly they combine spatial and spectral detail, and as a result their accuracy varies as well. If accuracy is crucial, users should consult published literature in order to choose the best algorithm for their application.

Table of contents


SFIM

geeSharp.sharpen(input, pan, "SFIM")

Smoothing Filter-based Intensity Modulation (SFIM) is a simple, effective pan-sharpening algorithm that directly injects spatial detail from a high resolution panchromatic band into lower resolution multispectral bands. A low-pass-filtered copy of the panchromatic band is then used to minimize spectral distortion resulting from the fusion.

SFIM is simpler and faster than the more complex algorithms (GS and PCA) and generally produces better results than other simple algorithms (Brovey, IHS, HPFA and simpleMean), so it is the recommended algorithm to use in geeSharp (although experimentation is encouraged).

Arguments

  • input (ee.Image):
    • An image to sharpen, usually multiband. The pan band should not be included in the input image.
  • pan (ee.Image):
    • A single-band panchromatic image from which to extract spatial detail.

Returns (ee.Image)

  • A pan-sharpened image.

Gram-Schmidt

geeSharp.sharpen(input, pan, "GS", geometry, scale, maxPixels)

Gram-Schmidt (GS) sharpening uses the Gram-Schmidt orthonormalization process to create linearly independent image bands. The high-resolution pan band is swapped for the first GS-transformed band, and the process is reversed to turn the components into a high-resolution multiband image.

Arguments

  • input (ee.Image):
    • An image to sharpen, usually multiband. The pan band should not be included in the input image.
  • pan (ee.Image):
    • A single-band panchromatic image from which to extract spatial detail.
  • geometry (ee.Geometry, default: null)
    • The region to calculate image statistics for. Sharpening will only be accurate within this region.
  • scale (number, default: null)
    • The scale, in projection units, to calculate image statistics at.
  • maxPixels (number, default: 1000000000000)
    • The maximum number of pixels to sample when calculating image statistics.

Returns (ee.Image)

  • A pan-sharpened image.

PCA

geeSharp.sharpen(input, pan, "PCA", substitutePC, geometry, scale, maxPixels)

Principal component analysis (PCA) uses eigen-decomposition to convert correlated image bands into uncorrelated principal components (PCs). The high-resolution panchromatic band is swapped for one of the PCs (usually PC1), and the transformation is inverted to turn the components into a high-resolution, multiband image.

PCA does not work on all scenes and may produce inconsistent results.

Arguments

  • input (ee.Image):
    • An image to sharpen, usually multiband. The pan band should not be included in the input image.
  • pan (ee.Image):
    • A single-band panchromatic image from which to extract spatial detail.
  • substitutePC (number, default: 1)
    • The principal component which will be swapped with the pan band. Use 1 unless there is a good reason not to.
  • geometry (ee.Geometry, default: null)
    • The region to calculate image statistics for. Sharpening will only be accurate within this region.
  • scale (number, default: null)
    • The scale, in projection units, to calculate image statistics at.
  • maxPixels (number, default: 1000000000000)
    • The maximum number of pixels to sample when calculating image statistics.

Returns (ee.Image)

  • A pan-sharpened image.

Brovey

geeSharp.sharpen(input, pan, "brovey", weights)

Brovey sharpening calculates weighted intensity using the input bands, and transforms the input image based on the intensity and the panchromatic band to inject spatial detail, creating a high-resolution multiband image.

Arguments

  • input (ee.Image):
    • An image to sharpen, usually multiband. The pan band should not be included in the input image.
  • pan (ee.Image):
    • A single-band panchromatic image from which to extract spatial detail.
  • weights (ee.List, default: Null)
    • The relative weights to use for each band when calculating the image intensity. Weights should be provided as a list of numbers, where each number represents the weight for the corresponding band (for example, weights for a 3-band Landsat image could be ee.List([0.5, 0.2, 0.3])). Optimal weights depend on the sensor. If no weights are provided, equal weight will be given to each band.

Returns (ee.Image)

  • A pan-sharpened image.

IHS

geeSharp.sharpen(input, pan, "IHS")

Intensity-hue-saturation (IHS) sharpening splits a red-green-blue image into intensity, hue, and saturation components. The intensity component is replaced with the high resolution panchromatic image and the components are transformed back into red-green-blue space. Note that because of how IHS works, it is restricted to only 3-band visible imagery.

Arguments

  • input (ee.Image):
    • An 3-band image to sharpen. For accuracy, those bands must represent red, green, and blue. The pan band should not be included in the input image.
  • pan (ee.Image):
    • A single-band panchromatic image from which to extract spatial detail.

Returns (ee.Image)

  • A pan-sharpened image.

HPFA

geeSharp.sharpen(input, pan, "HPFA", kernelWidth)

High-pass filter additive (HPFA) extracts spatial detail from a high-resolution pan-band and linearly adds it to the input bands, generating a high-resolution multiband image.

Arguments

  • input (ee.Image):
    • An image to sharpen. The pan band should not be included in the input image.
  • pan (ee.Image):
    • A single-band panchromatic image from which to extract spatial detail.
  • kernelWidth (ee.Number, default: Null)
    • The width of the square high-pass filter kernel used to extract detail from the pan-band. Leave blank unless there is a good reason not to. If no kernelWidth is provided, it will be calculated for optimal performance following Gangofner et. al. 2008.

Returns (ee.Image)

  • A pan-sharpened image.

Simple Mean

geeSharp.sharpen(input, pan, "simpleMean")

Simple mean sharpening generates a high-resolution multiband image by calculating each band as the mean of the unsharpened band and the pan-band.

Arguments

  • input (ee.Image):
    • An image to sharpen, usually multiband. The pan band should not be included in the input image.
  • pan (ee.Image):
    • A single-band panchromatic image from which to extract spatial detail.

Returns (ee.Image)

  • A pan-sharpened image.