Package 'landsat'

Title: Radiometric and Topographic Correction of Satellite Imagery
Description: Processing of Landsat or other multispectral satellite imagery. Includes relative normalization, image-based radiometric correction, and topographic correction options. The original package description was published as Goslee (2011) <doi:10.18637/jss.v043.i04>, and details of the topographic corrections in Goslee (2012) <doi:10.14358/PERS.78.9.973>.
Authors: Sarah Goslee [aut, cre]
Maintainer: Sarah Goslee <[email protected]>
License: GPL (>= 2)
Version: 1.1.2
Built: 2024-11-17 03:09:05 UTC
Source: https://github.com/phiala/landsat

Help Index


Bare Soil Line

Description

Finds Bare Soil Line (BSL) and maximum vegetation point.

Usage

BSL(band3, band4, method = "quantile", ulimit = 0.99, llimit = 0.005, maxval = 255)

Arguments

band3

File name or image file (matrix, data frame, or SpatialGridDataFrame) for Landsat band 3 DN (red).

band4

File name or image file (matrix, data frame, or SpatialGridDataFrame) for Landsat band 4 DN (NIR).

method

Either "quantile" or "minimum" – describes way in which soil line is identified.

ulimit

Upper limit for quantile of band ratios (ulimit < 1).

llimit

Lower limit for quantile of band ratios (llimit > 0).

maxval

Maximum value for band data; default of 255 for Landsat 5 and 7.

Details

Finding the BSL requires identifying the lowest NIR values for each level of red. The quantile method takes the lowest set of points, those with a NIR/red ratio less than the llimit-th quantile. The minimum value method takes the lowest NIR value for each level of red. However they are found, these points with low NIR for their red values are used in a major axis regression to find the Bare Soil Line. This function also identifies the full canopy point (maximum vegetation), by using the ulimit to identify the top points, with NIR/red ratio greater than the ulimit-th quantile, and with high NIR values. Red or NIR values of 255 (saturated sensor) are omitted when calculating the BSL.

Value

BSL

Regression coefficients for the Bare Soil Line

top

band 3 and band 4 values for the full canopy point

Author(s)

Sarah Goslee

References

Maas, S. J. & Rajan, N. 2010. Normalizing and converting image DC data using scatter plot matching. Remote Sensing 2:1644-1661.

Examples

data(nov3)
	data(nov4)
	nov.bsl <- BSL(nov3, nov4)
	plot(as.vector(as.matrix(nov3)), as.vector(as.matrix(nov4)))
	abline(nov.bsl$BSL, col="red")
	points(nov.bsl$top[1], nov.bsl$top[2], col="green", cex=2, pch=16)

Create a cloud mask from Landsat bands 1 and 6.

Description

Uses Landsat band 1 and band 6 to identify clouds and create a cloud mask.

Usage

clouds(band1, band6, level = 0.0014, buffer=5)

Arguments

band1

File name or image file (matrix, data frame, or SpatialGridDataFrame) for Landsat band 1.

band6

File name or image file (matrix, data frame, or SpatialGridDataFrame) for Landsat band 6.

level

Threshold level for cloud/noncloud decision. The default threshold is appropriate for reflectance and temperature values, and must be adjusted for use with DN.

buffer

Pixel buffer size to expand around thresholded cloud areas.

Details

Clouds are reflective (high) in band 1 and cold (low) in band 6, so the ratio of the two bands is high over clouds. The ratio must be adjusted for data type, whether reflectance, radiance, or DN.

Value

Returns a cloud mask in the same format as band1. Clouds are 1; noncloud areas are NA. Cloud areas are expanded by buffer pixels to ensure that cloud edges are captured.

Author(s)

Sarah Goslee

References

This function is loosely based on: Martinuzzi, S., Gould, W.A., Ramos Gonzales, O.M. 2007. Creating Cloud-Free Landsat ETM+ Data Sets in Tropical Landscapes: Cloud and Cloud-Shadow Removal. USDA Forest Service General Technical Report IITF-GTR-32.

Examples

data(july1)
data(july61)
july.cloud <- clouds(july1, july61)

par(mfrow=c(1,2))
image(july1)
image(july.cloud)

Decimal Date

Description

Convert a vector containing year, month, day or individual year, month, day arguments into a decimal date in years.

Usage

ddate(year, month, day)

Arguments

year

Either a numeric year OR a vector in the form of c(year, month, day). The latter option is so that ddate() can be conveniently used with apply().

month

If year is a single value, must contain the number of the month.

day

If year is a single value, must contain the number of the day.

Details

ddate() will accept a vector with the three date components so that it can be conveniently used with apply() on a data frame containing columns for year, month and day.

Value

The decimal date in years.

Author(s)

Sarah Goslee

Examples

ddate(2001, 5, 15)

Digital Elevation Model

Description

A 30-meter resolution elevation model in SpatialGridDataFrame format that matches the Landsat images nov and july.

Usage

data(dem)

Details

Elevations are in meters.

Source

Digital Elevation Models for the United States are available from the United States Geologic Survey, http://www.usgs.gov

Examples

data(dem)
	dem.slopeasp <- slopeasp(dem)

	par(mfrow=c(1,3))
	image(dem)
	image(dem.slopeasp$slope)
	image(dem.slopeasp$aspect)

Dark Object Subtraction

Description

Calculates calibration value for the Dark Object Subtraction (DOS) method of radiometric correction.

Usage

DOS(sat = 5, scattering.coef = c(-4, -2, -1, -0.7, -0.5), SHV, SHV.band, gain,
	offset, Grescale, Brescale, sunelev, edist, Esun = c(198.3, 179.6, 153.6, 
	103.1, 22, 8.34), blackadjust = 0.01)

Arguments

sat

Landsat satellite platform: 5 for TM; 7 for ETM+; 8 for OLI.

scattering.coef

Atmospheric scattering coefficient; defaults are from Chavez 1988.

SHV

Starting Haze Value

SHV.band

Band from which the Starting Haze Value was obtained.

gain

Band-specific sensor gain. Require either gain and offset or Grescale and Brescale to convert DN to radiance.

offset

Band-specific sensor offset. Require either gain and offset or Grescale and Brescale to convert DN to radiance.

Grescale

Band-specific sensor $G_rescale$ (gain). Require either gain and offset or Grescale and Brescale to convert DN to radiance.

Brescale

Band-specific sensor $B_rescale$ (bias). Require either gain and offset or Grescale and Brescale to convert DN to radiance.

sunelev

Sun elevation in degrees

edist

Earth-Sun distance in AU.

Esun

Exo-atmospheric solar irradiance, as given by Chander et al. 2009 or others.

blackadjust

By default, implements 1% adjustment value to compensate for lack of perfectly dark pixels.

Details

The Dark Object Subtraction method assumes that the darkest parts of an image (water, artificial structures) should be black if not for the effects of atmospheric scatter. Corrections to make it possible to use the black value from one band to correct the remaining bands.

Value

DNfinal.mean

The Dark Object Subtraction value for the complete set of scattering coefficients (Table X in Chavez 1989).

DNfinal.approx

The same table as DNfinal.mean, but using a numerical approximation across the band wavelength instead of the mean wavelength.

Author(s)

Sarah Goslee

References

Chavez, Jr., P. S. 1988. An improved dark-object subtraction technique for atmospheric scattering correction of multispectral data. Remote Sensing of Environment 24:459-479.

Chavez, Jr., P. S. 1989. Radiometric calibration of Landsat Thematic Mapper multispectral images. Photogrammetric Engineering and Remote Sensing 55: 1285-1294.

See Also

radiocorr

Examples

data(july1)
	data(july3)

	# One approach to choosing a Starting Haze Value is to take
	# the lowest DN value with a frequency greater than some 
	# predetermined threshold, in this case 1000 pixels. 
	SHV <- table(july1@data[,1])
	SHV <- min(as.numeric(names(SHV)[SHV > 1000]))
	# this is used as Lhaze in the radiocorr function

	# G_rescale, B_rescale, sun elevation comes from metadata for the SHV band
	july.DOS <- DOS(sat=7, SHV=SHV, SHV.band=1, Grescale=0.77569, 
		Brescale=-6.20000, sunelev=61.4, 
		edist=ESdist("2002-07-20"))$DNfinal.mean

	# DOS() returns results for the complete set of scattering coefficients
	# need to choose the appropriate one based on general atmospheric conditions
		###	-4.0: Very Clear	SHV <= 55
		###	-2.0: Clear		SHV 56-75
		### 	-1.0: Moderate		SHV 76-95
		###	-0.7: Hazy		SHV 96-115
		###	-0.5: Very Hazy		SHV >115
	# for july, SHV == 70, so use -2.0: Clear
	july.DOS <- july.DOS[ , 2]

	# Use DOS value as Lhaze in radiocorr() for DOS correction to reflectance
	july3.DOSrefl <- radiocorr(july3, Grescale=0.77569, Brescale=-6.20000, 
		sunelev=61.4, edist=ESdist("2002-07-20"), Esun=1533, 
		Lhaze=july.DOS[3], method="DOS")

Earth-Sun distance for a given date.

Description

Calculates the estimated Earth-Sun distance in Astronomical Units (AU) for a given date.

Usage

ESdist(adate)

Arguments

adate

date in "YYYY-MM-DD" format

Value

Returns estimated Earth-Sun distance in AU.

Author(s)

Sarah Goslee

Examples

ESdist("2010-08-30")

Simple image-matching georeferencing function.

Description

Finds best fit between target image and tofix image by minimizing RMSE between the two. The tofix image is moved one pixel at a time horizontally or vertically. Simple automated georeferencing is adequate for some image-processing tasks.

Usage

georef(target, tofix, maxdist = 1000, startx = 0, starty = 0)

Arguments

target

A georeferenced base image; can be matrix, dataframe or SpatialGridDataFrame.

tofix

The image to be georeferenced; can be matrix, dataframe or SpatialGridDataFrame.

maxdist

The greatest distance to move the tofix image. If this is exceeded, the function will stop.

startx

Shift the tofix image this many pixels in the x direction before beginning, to avoid local minimum.

starty

Shift the tofix image this many pixels in the y direction before beginning, to avoid local minimum.

Details

This function offers a simplistic approach to georeferencing using an iterative algorithm that at each step moves the tofix image one pixel in the direction that produces the greatest reduction in RMSE. When RMSE no longer decreases or maxdist is reached, the algorithm stops, assuming that the tofix image now matches the reference target image. This algorithm can produce local minima. Results should always be checked visually.

Note: this algorithm is only effective with images larger than the samples included with this package. The July and November images are already georectified, but this function will show them as needing considerable adjustment. Images of at least 1000x1000 pixels are necessary for adequate results.

Value

shiftx

The x-direction shift to get the best match (lowest RMSE).

shifty

The y-direction shift to get the best match (lowest RMSE).

initrmse

Initial RMSE between target and tofix images.

currrmse

Lowest RMSE, after shiftx and shifty pixel adjustments. Will be 9999 if maxdist is exceeded.

Author(s)

Sarah Goslee

See Also

geoshift

Examples

# to use for georeferencing
data(nov3)
data(july3)
july.shift <- georef(nov3, july3, maxdist=50) # match july to november
july3.corr <- geoshift(july3, padx=50, pady=50, july.shift$shiftx, july.shift$shifty)

# only need to run georef once for a particular date
# use the same correction for all bands
data(july4)
july4.corr <- geoshift(july4, padx=50, pady=50, july.shift$shiftx, july.shift$shifty)

Shift and pad an image

Description

Shifts an image vertically or horizontally and adds a padded border.

Usage

geoshift(mat, padx, pady, shiftx, shifty, nodata = NA)

Arguments

mat

A matrix, data frame or SpatialGridDataFrame

padx

Number of pixels to add as padding in the x direction on each side of the image (along the x-axis). Should be larger than the number of pixels to shift to avoid data loss.

pady

Number of pixels to add as padding in the y direction on each side of the image (along the y-axis). Should be larger than the number of pixels to shift to avoid data loss.

shiftx

Number of pixels to shift (positive or negative) in the x direction (along the x-axis).

shifty

Number of pixels to shift (positive or negative) in the y direction (along the y-axis).

nodata

Value to use for missing data.

Details

This function can be used to correct spatially-referenced images that are off by a few pixels in the x or y directions. It does not warp an image, only slide it. Adding padding to the outside edge makes it possible to match several images even if they are not stored with georeferecing information. geoshift() can be used in conjunction with georef() to automatically match up geospatial images. Note: directions are relative to the image as displayed by the image() command, and not the underlying matrix representation.

Value

Returns data in the same format as the function was given: matrix, data frame, or SpatialGridDataFrame.

Author(s)

Sarah Goslee

See Also

georef

Examples

testmat <- matrix(1:9, 3, 3)
geoshift(testmat, 5, 10, 0, 0)
geoshift(testmat, 5, 10, 2, 2)

# to use for georeferencing
data(nov3)
data(july3)
july.shift <- georef(nov3, july3, maxdist=50) # match july to november
july3.corr <- geoshift(july3, padx=50, pady=50, july.shift$shiftx, july.shift$shifty)

# only need to run georef once for a particular date
# use the same correction for all bands
data(july4)
july4.corr <- geoshift(july4, padx=50, pady=50, july.shift$shiftx, july.shift$shifty)

Histogram matching of an image

Description

Force image x to match target image by matching their histograms.

Usage

histmatch(master, tofix, mask, minval = 0, maxval = 255, by = 1)

Arguments

master

The target image, in SpatialGridDataFrame, data frame, matrix or vector format.

tofix

The image to be normalized, in any format.

mask

Areas to be omitted, if any, such as a cloud mask. Only NA values within the mask will be used.

minval

Lower bound of the possible range of values in target and tofix images.

maxval

Upper bound of the possible range of values in target and tofix images.

by

Step size to use in constructing histograms. Should be appropriate for minval and maxval of the images.

Details

The histogram of the tofix image will be forced to match that of the target image.

Value

recode

The transformation table used to match the histograms.

newimage

The transformed image, in the same format in which tofix was provided.

Author(s)

Sarah Goslee

See Also

relnorm

Examples

## Not run: 
	data(nov3)
	data(july3)
	par(mfrow=c(2,2))
	image(nov3)
	image(july3)

	nov3.newR <- relnorm(master=july3, tofix=nov3)
	image(nov3.newR$newimage)

	nov3.newH <- histmatch(master=july3, tofix=nov3)
	image(nov3.newH$newimage)

## End(Not run)

Sample Landsat ETM+ data

Description

SpatialGridDataFrame containing a 300 x 300 pixel subset (1500 x 1500 m) of the Landsat ETM+ image for path 15, row 32, obtained on 20 July 2002. Each band, including both thermal bands, is contained in a separate file.

Usage

data(july1)

Format

Images are in SpatialGridDataFrame format. More information is available in the documentation for the sp package.

Details

Date: 2002-07-20
Satellite: Landsat ETM+ (7)
Sun elevation: 61.4
Sun azimuth: 125.8


——–
band Grescale Brescale
1 0.77569 -6.20
2 0.79569 -6.40
3 0.61922 -5.00
4 0.63725 -5.10
5 0.12573 -1.00
7 0.04373 -0.35

Source

Landsat images can be obtained from the United States Geological Survey at http://landsat.usgs.gov

Examples

data(july3)
	image(july3)

Subset a geotiff image.

Description

Uses GDAL tools to reproject (optional) and subset a geotiff given the center point and the desired size.

Usage

lssub(filename, outname, centerx, centery, centerepsg, widthx, widthy)

Arguments

filename

Filename (and path) to a geotiff image.

outname

Filename (and path) for subset image.

centerx

x coordinate of new center point.

centery

y coordinate of new center point.

centerepsg

Projection of the center point coordinates as 5-digit EPSG code. If missing, assume that point and geotiff have the same projection.

widthx

Desired width of subset image.

widthy

Desired height of subset image.

Details

The new image will be a subset of size (widthx, widthy) with center point (centerx, centery), with the same pixel size. If the center point coordinates are in a different projection than the original image, they will be reprojected.

Value

The new image is exported as a geotiff. Nothing is returned within R.

Note

Requires gdalinfo and gdaltransform to be available to the operating system. Only known to work on linux. This function was written to speed processing of multiple files for a specific project, and may be dropped in future releases of the landsat package. On my computer, lssub() is over an order of magnitude faster than reading the image into R, subsetting it, and writing out the result.

Author(s)

Sarah Goslee

Examples

## Not run: lssub("/data/gis/testimage.tif", "/data/gis/subimage.tif", centerx = 260485, 
	centery = 4527220, centerepsg = 26918, widthx = 50, widthy = 50)
## End(Not run)

Whole-image and pixel-based Minnaert topographic correction of remote sensing data.

Description

Adds several modified Minnaert corrections to the capabilities of topocorr().

Usage

minnaert(x, slope, aspect, sunelev, sunazimuth, na.value = NA, GRASS.aspect=FALSE, 
	IL.epsilon=0.000001, slopeclass = c(1, 5, 10, 15, 20, 25, 30, 45), coverclass)

Arguments

x

Image to be corrected, in matrix, data frame, or SpatialGridDataFrame format.

slope

Slope image of same size and resolution as x.

aspect

Aspect image of same size and resolution as x.

sunelev

Sun elevation in degrees.

sunazimuth

Sun azimuth in degrees.

na.value

Value to use for missing data.

GRASS.aspect

Whether aspect is measured according to GRASS defaults (counterclockwise from east) or is measured clockwise from north. If GRASS.aspect=TRUE, aspect is converted to clockwise from north before analysis.

IL.epsilon

If IL == 0 (Illumination), some methods will give a topographically-corrected value of Inf due to division by zero. If desired, adding a small increment to zero values eliminates this.

slopeclass

The classes into which the slope will be divided before calculating k separately for each class.

coverclass

If present, TRUE/FALSE vector indicating which pixels to use when calculating k. This allows k to be determined separately for different cover classes.

Details

Calculates the Minnaert k coefficients for the whole image and for the individual slope classes.

Value

allcoef

The Minnaert k for the entire image. This is the value used in topocorr() (though the latter may have been truncated).

classcoef

A data frame containing the slope class midpoints, number of pixels per class, and k for that class (for the desired cover class, if specified).

xout

A topographically-corrected image in the same format as x.

xout

A topographically-corrected image in the same format as x.

Author(s)

Sarah Goslee

References

Lu, D., Ge, H., He, S., Xu, A., Zhou, G., and Du, H. 2008. Pixel-based Minnaert correction method for reducing topographic effects on a Landsat 7 ETM+ image. Photogrammetric Engineering and Remote Sensing 74:1343-1350.

See Also

topocorr

Examples

# require slope and aspect for topographic correction
	data(dem)
	dem.slopeasp <- slopeasp(dem)

	# use cosine method of topographic correction
	data(july4)
	july4.minpix <- minnaert(july4, dem.slopeasp$slope, dem.slopeasp$aspect, 
		sunelev=61.4, sunazimuth=125.8, slopeclass=c(1, 5, 10, 15, 50))
	july4.minpix$classcoef # all coefficients

Simple moving window function.

Description

Very simple function to apply a kernel to a matrix across a moving window.

Usage

movingwindow(x, kernel, na.rm=TRUE)

Arguments

x

A matrix.

kernel

The kernel to be applied to the matrix, for example a Sobel kernel.

na.rm

NA handling option to be passed to sum(). If TRUE, NA will be returned if any value under the kernel is NA or NaN, otherwise NA values will be omitted.

Details

This function is used in the calculation of slope and aspect by slopeasp().

Value

Returns the transformed matrix.

Note

Should be rewritten in C for greater efficiency.

Author(s)

Sarah Goslee

See Also

slopeasp

Examples

data(dem)
	dem.smoothed <- movingwindow(dem, matrix(c(1,1,1,1,0,1,1,1,1), 3, 3)/8)

	par(mfrow=c(1,2))
	image(dem)
	image(dem.smoothed)

Sample Landsat ETM+ data

Description

SpatialGridDataFrame containing a 300 x 300 pixel subset (1500 x 1500 m) of the Landsat ETM+ image for path 15, row 32, obtained on 25 November 2002. Each band, including both thermal bands, is contained in a separate file.

Usage

data(nov1)

Format

Images are in SpatialGridDataFrame format. More information is available in the documentation for the sp package.

Details

Date: 2002-11-25
Satellite: Landsat ETM+ (7)
Sun elevation: 26.2
Sun azimuth: 159.5


——–

band Grescale Brescale
1 0.77569 -6.20
2 0.79569 -6.40
3 0.61922 -5.00
4 0.63725 -5.10
5 0.12573 -1.00
7 0.04373 -0.35

Source

Landsat images can be obtained from the United States Geological Survey at http://landsat.usgs.gov

Examples

data(nov3)
	image(nov3)

Pseudo-Invariant Features

Description

Pseudo-invariant features identification for relative radiometric normalization.

Usage

PIF(band3, band4, band7, level = 0.99)

Arguments

band3

Landsat band 3, as a filename to be imported, a matrix, data frame, or SpatialGridDataFrame.

band4

Landsat band 4, as a filename to be imported, a matrix, data frame, or SpatialGridDataFrame.

band7

Landsat band 7, as a filename to be imported, a matrix, data frame, or SpatialGridDataFrame.

level

Threshold level for identifying PIFs. (0 < level < 1)

Details

Pseudo-invariant features (PIFs) are areas such as artificial structures that can reasonably be expected to have a constant reflectance over time, rather than varying seasonally as vegetation does. Differences in PIF reflectance between dates can be assumed to be due to varying atmospheric conditions.

Value

Returns a PIF mask in the same format as the input files, with 1 for pseudo-invariant features and 0 for background data.

Author(s)

Sarah Goslee

References

Schott, J. R.; Salvaggio, C. & Volchok, W. J. 1988. Radiometric scene normalization using pseudoinvariant features. Remote Sensing of Environment 26:1-16.

See Also

RCS

Examples

# identify pseudo-invariant feature
	data(july3)
	data(july4)
	data(july7)
	july.pif <- PIF(july3, july4, july7)

	# use PIFs to related nov to july Landsat data for band 3
	# properly, would also remove cloudy areas first
	data(nov3)
	# use major axis regression: error in both x and y
	nov.correction <- lmodel2:::lmodel2(july3@data[july.pif@data[,1] == 1, 1] ~ 
	nov3@data[july.pif@data[,1] == 1, 1])$regression.results[2, 2:3]
	nov3.corrected <- nov3
	nov3.corrected@data[,1] <- nov3@data[,1] * nov.correction[2] + nov.correction[1]

Radiometric correction of Landsat data

Description

Implements several different methods for absolute radiometric correction of satellite data.

Usage

radiocorr(x, gain, offset, Grescale, Brescale, sunelev, satzenith = 0, edist,
	Esun, Lhaze, method = "apparentreflectance")

Arguments

x

Image to be corrected, in matrix, data frame, or SpatialGridDataFrame format.

gain

Band-specific sensor gain. Require either gain and offset or Grescale and Brescale to convert DN to radiance.

offset

Band-specific sensor offset. Require either gain and offset or Grescale and Brescale to convert DN to radiance.

Grescale

Band-specific sensor Grescale (gain). Require either gain and offset or Grescale and Brescale to convert DN to radiance.

Brescale

Band-specific sensor Brescale (bias). Require either gain and offset or Grescale and Brescale to convert DN to radiance.

sunelev

Sun elevation in degrees

satzenith

Satellite sensor zenith angle (0 for Landsat)

edist

Earth-Sun distance in AU.

Esun

Exo-atmospheric solar irradiance, as given by Chandler et al. 2009 or others.

Lhaze

Haze value, such as SHV from DOS() function. Not needed for apparent reflectance.

method

Radiometric correction method to be used. There are currently four methods available: "apparentreflectance", "DOS" (Chavez 1989), "COSTZ" (Chavez 1996), "DOS4" (SWS+2001).

Details

Uses one of four image-based radiometric correction methods to adjust a satellite image to compensate for atmospheric conditions.

Value

Returns a radiometrically-corrected image in the same format as x.

Author(s)

Sarah Goslee

References

Chavez, Jr., P. S. 1989. Radiometric calibration of Landsat Thematic Mapper multispectral images. Photogrammetric Engineering and Remote Sensing 55:1285-1294.

Chavez, Jr., P. S. 1996. Image-based atmospheric corrections revisited and improved. Photogrammetric Engineering and Remote Sensing 62:1025-1036.

Song, C.; Woodcock, C. E.; Seto, K. C.; Lenney, M. P. & Macomber, S. A. 2001. Classification and change detection using Landsat TM data: when and how to correct atmospheric effects? Remote Sensing of Environment 75:230-244.

See Also

DOS

Examples

data(july1)
	data(july3)

	# One approach to choosing a Starting Haze Value is to take the lowest DN value
	# with a frequency greater than some predetermined threshold, in this case 1000 pixels. 
	SHV <- table(july1@data[,1])
	SHV <- min(as.numeric(names(SHV)[SHV > 1000]))
	# this is used as Lhaze in the radiocorr function

	# Grescale, Brescale, sun elevation comes from metadata for the SHV band
	july.DOS <- DOS(sat=7, SHV=SHV, SHV.band=1, Grescale=0.77569, Brescale=-6.20000,
		sunelev=61.4, edist=ESdist("2002-07-20"))$DNfinal.mean

	# DOS() returns results for the complete set of scattering coefficients
	# need to choose the appropriate one based on general atmospheric conditions
		###	-4.0: Very Clear	SHV <= 55
		###	-2.0: Clear		SHV 56-75
		### 	-1.0: Moderate		SHV 76-95
		###	-0.7: Hazy		SHV 96-115
		###	-0.5: Very Hazy		SHV >115
	# for july, SHV == 70, so use -2.0: Clear
	july.DOS <- july.DOS[ , 2]

	# Use DOS value as Lhaze in radiocorr() for DOS correction to reflectance
	july3.DOSrefl <- radiocorr(july3, Grescale=0.77569, Brescale=-6.20000, 
		sunelev=61.4, edist=ESdist("2002-07-20"), Esun=1533, 
		Lhaze=july.DOS[3], method="DOS")

Radiometric Control Sets

Description

The Radiometric Control Sets method of relative radiometric correction for Landsat data.

Usage

RCS(data.tc, level = 0.01)

Arguments

data.tc

The output of tasscap().

level

Threshold level to use (0 < level < 1).

Details

Radiometric Control Sets (RCSs) are areas such as artificial structures and large bodies of water that can reasonably be expected to have a constant reflectance over time, rather than varying seasonally as vegetation does. Differences in RCS reflectance between dates can be assumed to be due to varying atmospheric conditions. Pixels with low greenness and either high or low brightness are identified.

Value

Returns an RCS mask file in the format of the original data (vector, matrix, data frame or SpatialGridDataFrame, as preseved by tasscap()) with 1 for RCS pixels and 0 for background.

Author(s)

Sarah Goslee

References

Hall, F.; Strebel, D.; Nickeson, J. & Goetz, S. 1991. Radiometric rectification: toward a common radiometric response among multidate, multisensor images. Remote Sensing of Environment 35:11-27.

See Also

PIF, tasscap

Examples

# identify radiometric control set
	data(july1)
	data(july2)
	data(july3)
	data(july4)
	data(july5)
	data(july7)
	july.tc <- tasscap("july", 7)
	july.rcs <- RCS(july.tc)

	# use RCS to relate nov to july Landsat data for band 3
	# properly, would also remove cloudy areas first
	data(nov3)
	# use major axis regression: error in both x and y
	nov.correction <- lmodel2:::lmodel2(july3@data[july.rcs@data[,1] == 1, 1] ~ 
		nov3@data[july.rcs@data[,1] == 1, 1])$regression.results[2, 2:3]
	nov3.corrected <- nov3
	nov3.corrected@data[,1] <- nov3@data[,1] * nov.correction[2] + nov.correction[1]

Relative normalization of an image

Description

Use regression methods to adjust distribution of values in image tofix to match those in the master image.

Usage

relnorm(master, tofix, mask, method = "MA", nperm = 1000)

Arguments

master

The target image, in SpatialGridDataFrame, data frame, matrix or vector format.

tofix

The image to be normalized, in any format.

mask

Areas to be omitted, if any, such as a cloud mask. Only NA values within the mask will be used.

method

Regression method to be used. OLS: Ordinary Least Squares; MA: Major Axis (recommended); SMA: Standard Major Axis.

nperm

Number of permutations to use for significance testing.

Details

The regression coefficients from tofix ~ master will be used to match the distribution of values of tofix to those in the master image.

Value

regression.results

The regression results from lmodel2

newimage

The transformed image, in the same format in which tofix was provided.

Author(s)

Sarah Goslee

See Also

histmatch

Examples

## Not run: 
	data(nov3)
	data(july3)
	par(mfrow=c(2,2))
	image(nov3)
	image(july3)

	nov3.newR <- relnorm(master=july3, tofix=nov3)
	image(nov3.newR$newimage)

	nov3.newH <- histmatch(master=july3, tofix=nov3)
	image(nov3.newH$newimage)

## End(Not run)

Calculate slope and aspect from elevation data.

Description

Uses gridded elevation data to calculate slope and aspect, by default using a 3x3 region. The horizontal resolution and vertical resolution must be in the same units.

Usage

slopeasp(x, EWres, NSres, EWkernel, NSkernel, smoothing=1)

Arguments

x

gridded elevation data, either as a SpatialGridDataFrame, dataframe, or matrix.

EWres

East-West grid resolution. May be omitted if x is a SpatialGridDataFrame and the horizontal units are the same as the vertical units.

NSres

North-South grid resolution. May be omitted if x is a SpatialGridDataFrame and the horizontal units are the same as the vertical units.

EWkernel

The kernel to use when calculating the East-West component of slope. If missing, a 3x3 kernel will be used.

NSkernel

The kernel to use when calculating the North-South component of slope. If missing, a 3x3 kernel will be used.

smoothing

A positive integer describing the additional smoothing to be applied, if any. smoothing=1 (default) means no smoothing will be used.

Details

By default, a 3x3 Sobel filter is used (as is standard in many GIS packages). A larger Sobel filter or a different filter will give varying results. This filter provides the third-order finite difference weighted by reciprocal of distance method proposed by Unwin (1981).

Value

slope

The slope of the DEM, in degrees

aspect

The aspect of the DEM, beginning with north and moving clockwise, and with aspect = 0 where slope = 0.

Author(s)

Sarah Goslee

References

Unwin, D. 1981. Introductory Spatial Analysis. London: Methuen. Clarke, K.C.and Lee, S.J. 2007. Spatial resolution and algorithm choice as modifiers of downslope flow computed from Digital Elevation Models. Cartography and Geographic Information Science 34:215-230.

See Also

movingwindow, topocorr

Examples

data(dem)
	dem.slopeasp <- slopeasp(dem)

	par(mfrow=c(1,3))
	image(dem)
	image(dem.slopeasp$slope)
	image(dem.slopeasp$aspect)

Tasseled Cap for Landsat data

Description

Tasseled cap transformation for Landsat TM, ETM+, or OLI.

Usage

tasscap(basename, sat = 7)

Arguments

basename

Base filename (string) to which band numbers are appended, eg "july" for files named "july1", "july2", "july3", etc. Data should be at-sensor reflectance.

sat

Landsat satellite platform: 5 for TM; 7 for ETM+; 8 for OLI.

Details

For Landsat TM, the coefficients are to be applied to "reflectance factors", which appear to be the DN. For ETM+ and OLI, the coefficients are for top-of-atmosphere reflectance. For both TM and ETM+, the bands to be provided are 1, 2, 3, 4, 5, and 7. For OLI, the bands needed are 2 through 7. Future updates will allow use of a raster stack rather than separate objects.

Value

If the input files are matrices or data frames, returns a data frame with three columns, one for each component. If the input files are SpatialGridDataFrames, returns a list with one element for each component. In either case three components are returned: Brightness, Greenness, Wetness.

Author(s)

Sarah Goslee

References

Original papers:

Baig, M. H. A., Zhang, L., Shuai, T. & Tong, Q. 2014. Derivation of a tasselled cap transformation based on Landsat 8 at-satellite reflectance. Remote Sensing Letters 5:423-431.

Crist, E. P. 1985. A TM tasseled cap equivalent transformation for reflectance factor data. Remote Sensing of Environment 17:301-306.

Crist, E. & Kauth, R. 1986. The tasseled cap de-mystified. Photogrammetric Engineering and Remote Sensing 52:81-86.

Huang, C., Wylie, B., Yang, L., Homer, C. & Zylstra, G. 2002. Derivation of a tasseled cap transformation based on Landsat 7 at-satellite reflectance. International Journal of Remote Sensing 23:1741-1748.

Examples

data(july1)
data(july2)
data(july3)
data(july4)
data(july5)
data(july7)
july.tc <- tasscap("july", 7)

Thermal band to temperature conversion.

Description

Converts Landsat thermal band DN (TM or ETM+ band 6-1 and 6-2) to temperature using default coefficients from Chander et al. 2009.

Usage

thermalband(x, band)

Arguments

x

Landsat band 6 Digital Number (DN) in matrix, data frame or SpatialGridDataFrame format.

band

6 for TM; 61 or 62 for the appropriate ETM+ bands. Any other value will fail.

Value

Returns a temperature image in the same format as x.

Author(s)

Sarah Goslee

References

Coefficients from Chander, G., Markham, B.L., Helder, D.L. 2009. Summary of current radiometric calibration coefficients for Landsat MSS, TM, ETM+, and EO-1 ALI sensors. Remote Sensing of Environment 113:893-903.

Examples

data(nov61)
	nov.temp1 <- thermalband(nov61, 61)
	image(nov.temp1)

Topographic correction of remote sensing data.

Description

Implements several different methods for topographic correction of remote sensing data.

Usage

topocorr(x, slope, aspect, sunelev, sunazimuth, method = "cosine", na.value = NA,
	GRASS.aspect=FALSE, IL.epsilon=0.000001)

Arguments

x

Image to be corrected, in matrix, data frame, or SpatialGridDataFrame format.

slope

Slope image of same size and resolution as x.

aspect

Aspect image of same size and resolution as x.

sunelev

Sun elevation in degrees.

sunazimuth

Sun azimuth in degrees.

method

Topographic correction method to be used. There are currently eight methods available: "cosine", "improvedcosine", "minnaert", "ccorrection" (first four from Riano et al. 2003), "minslope" (Minnaert with slope correction, also from Riano et al. 2003), "gamma" (from Richter et al. 2009), "SCS" (Gu and Gillespie 1998, Gao and Zhang 2009), "illumination" (uncorrected illumination).

na.value

Value to use for missing data.

GRASS.aspect

Whether aspect is measured according to GRASS defaults (counterclockwise from east) or is measured clockwise from north. If GRASS.aspect=TRUE, aspect is converted to clockwise from north before analysis.

IL.epsilon

If IL == 0 (Illumination), some methods will give a topographically-corrected value of Inf due to division by zero. If desired, adding a small increment to zero values eliminates this.

Details

Uses one of the available topographic correction methods to compensate for the effects of slope and aspect on reflectance from the land surface.

Value

Returns a topographically-corrected image in the same format as x.

Author(s)

Sarah Goslee

References

Gao, Y. & Zhang, W. 2009. LULC classification and topographic correction of Landsat-7 ETM+ imagery in the Yangjia River Watershed: the influence of DEM resolution. Sensors 9:1980-1995.

Gu, D. & Gillespie, A. 1998. Topographic normalization of Landsat TM images of forest based on subpixel sun-canopy-sensor geometry. Remote Sensing of Environment 64:166-175.

Riano, D., Chuvieco, E., Salas, J. & Aguado, I. 2003. Assessment of different topographic corrections in Landsat-TM data for mapping vegetation types. IEEE Transactions on Geoscience and Remote Sensing 41:1056-1061.

Richter, R., Kellenberger, T. & Kaufmann, H. 2009. Comparison of topographic correction methods. Remote Sensing 1:184-196.

See Also

slopeasp

Examples

# require slope and aspect for topographic correction
	data(dem)
	dem.slopeasp <- slopeasp(dem)

	# use cosine method of topographic correction
	data(july3)
	july3.topo <- topocorr(july3, dem.slopeasp$slope, dem.slopeasp$aspect, 
		sunelev=61.4, sunazimuth=125.8)