Change vector analysis

Change Vector Analysis (CVA) is a change detection method that characterizes the magnitude and change direction in spectral space between two times. A change vector is the difference vector between two vectors in n-dimensional feature space defined for two observations of the same geographical location (i.e. corresponding pixels) during two dates. The CVA inputs include the set of raster images corresponding to the multispectral data for each date. Note that there must be the same number of image files (bands) for the two dates and they must be entered in the same order, i.e. if three bands, red, green, and blue are entered for date one, these same bands must be entered in the same order for date two.

CVA outputs two image files. The first image contains the change vector length, i.e. magnitude, for each pixel in the multi-spectral dataset. The second image contains information about the direction of the change event in spectral feature space, which is related to the type of change event, e.g. deforestation will likely have a different change direction than say crop growth. The vector magnitude is a continuous numerical variable. The change vector direction is presented in the form of a code, referring to the multi-dimensional sector in which the change vector occurs. A text output will be produced to provide a key describing sector codes, relating the change vector to positive or negative shifts in n-dimensional feature space.

It is common to apply a simple thresholding operation on the magnitude data to determine 'actual' change (i.e. change above some assumed level of error). The type of change (qualitatively) is then defined according to the corresponding sector code. Jensen (2005) provides a useful description of this approach to change detection.

See Also:

Scripting:

The following is an example of a Python script using this tool:

wd = pluginHost.getWorkingDirectory()
# You may have multiple input files but they must
# be separated by semicolons in the string.
inputFilesDate1 = wd + "date1_band1.dep" + ";" + wd + "date1_band2.dep" + ";" + wd + "date1_band3.dep"
inputFilesDate2 = wd + "date2_band1.dep" + ";" + wd + "date2_band2.dep" + ";" + wd + "date2_band3.dep"
outputMagnitude = wd + "change magnitude.dep"
outputVector = wd + "change vector.dep"
args = [inputFilesDate1, inputFilesDate2, outputMagnitude, outputVector]
pluginHost.runPlugin("ChangeVectorAnalysis", args, False)

This is a Groovy script also using this tool:

def wd = pluginHost.getWorkingDirectory()
// You may have multiple input files but they must
// be separated by semicolons in the string.
def inputFilesDate1 = wd + "input1.dep" + ";" + wd + "input2.dep" + ";" + wd + "input3.dep"
def inputFilesDate2 = wd + "date2_band1.dep" + ";" + wd + "date2_band2.dep" + ";" + wd + "date2_band3.dep"
def outputMagnitude = wd + "change magnitude.dep"
def outputVector = wd + "change vector.dep"
String[] args = [inputFilesDate1, inputFilesDate2, outputMagnitude, outputVector]
pluginHost.runPlugin("ChangeVectorAnalysis", args, false)

Credits:

References: