Radar Vegetation Index for Sentinel-1 SAR data - RVI4S1 Script

// Radar vegetation index for Sentinel-1 (RVI4S1) SAR data
// Institute: MRSLab, Indian Institute of Technology Bombay, India
// Data requirements: Sentinel-1 GRD data
// Reference: Bhogapurapu, N., Dey, S., Mandal, D., Bhattacharya, A., Karthikeyan, L., McNairn, H. and Rao, Y.S., 2022. Soil moisture retrieval over croplands using dual-pol L-band GRD SAR data. Remote Sensing of Environment, 271, p.112900.
function setup() {
   return {
      input: ["VV", "VH", "dataMask"],
      output: { bands: 4 }
   };
}

const ramp = [
   [0, 0x8e0152],
   [0.25, 0xde77ae],
   [0.5, 0xf7f7f7],
   [0.75, 0x7fbc41],
   [1, 0x276419],
];

const visualizer = new ColorRampVisualizer(ramp);

function evaluatePixel(samples) {
   //equivalent to complement of the degree of polarization
   // Ratio parameter
   let q =  (samples.VH / samples.VV);

   // co-pol purity parameter m
   // m = (1-q)/(1+q)
   // normalized co-pol intensity parameter beta
   // beta = 1/(1+q)
   // Dual-pol radar vegetation indec DpRVIc = 1-(m*beta)
   // It can be also written directly in terms of q as follows
   let N = q*(q+3);
   let D = (q+1)*(q+1);

   //depolarization within the vegetation
   //let value = (Math.sqrt(dop)) * ((4 * (samples.VH)) / (samples.VV + samples.VH));
   let value = N/D;
   let imgVals = visualizer.process(value);
   return imgVals.concat(samples.dataMask)
}
//VERSION=3
function setup() {
    return {
        input: ["VV", "VH", "dataMask"],
        output: [
            { id: "default", bands: 4 },
            { id: "index", bands: 1, sampleType: "FLOAT32" },
            { id: "eobrowserStats", bands: 1, sampleType: 'FLOAT32' },
            { id: "dataMask", bands: 1 }
        ]
    };
}

const ramp = [
    [0, 0x8e0152],
    [0.25, 0xde77ae],
    [0.5, 0xf7f7f7],
    [0.75, 0x7fbc41],
    [1, 0x276419],
];


const visualizer = new ColorRampVisualizer(ramp);

function evaluatePixel(samples) {
    //equivalent to complement of the degree of polarization
    // Ratio parameter
    let q =  (samples.VH / samples.VV);

    // co-pol purity parameter m
    // m = (1-q)/(1+q)
    // normalized co-pol intensity parameter beta
    // beta = 1/(1+q)
    // Dual-pol radar vegetation indec DpRVIc = 1-(m*beta)
    // It can be also written directly in terms of q as follows
    let N = q*(q+3);
    let D = (q+1)*(q+1);

    //depolarization within the vegetation
    //let val = (Math.sqrt(dop)) * ((4 * (samples.VH)) / (samples.VV + samples.VH));
    let val = N/D;

    // The library for tiffs works well only if there is only one channel returned.
    // So we encode the "no data" as NaN here and ignore NaNs on frontend.
    const indexVal = samples.dataMask === 1 ? val : NaN;
    const imgVals = visualizer.process(val);
    return {
        default: imgVals.concat(samples.dataMask),
        index: [indexVal],
        eobrowserStats: [val],
        dataMask: [samples.dataMask]
    };
}
// Radar vegetation index for Sentinel-1 (RVI4S1) SAR data
// Institute: MRSLab, Indian Institute of Technology Bombay, India
// Data requirements: Sentinel-1 GRD data
function setup() {
    return {
        input: ["VV", "VH"],
        output: { bands: 1, sampleType: "FLOAT32" }
    };
}

function evaluatePixel(samples) {
    //equivalent to complement of the degree of polarization
    // Ratio parameter
    let q =  (samples.VH / samples.VV);

    // co-pol purity parameter m
    // m = (1-q)/(1+q)
    // normalized co-pol intensity parameter beta
    // beta = 1/(1+q)
    // Dual-pol radar vegetation indec DpRVIc = 1-(m*beta)
    // It can be also written directly in terms of q as follows
    let N = q*(q+3);
    let D = (q+1)*(q+1);

    //depolarization within the vegetation
    //let value = (Math.sqrt(dop)) * ((4 * (samples.VH)) / (samples.VV + samples.VH));
    let value = N/D;
    return [value]
}

Evaluate and Visualize

General description of the script

The goal of the script is to calculate the Radar Vegetation Index for Sentinel-1 (RVI4S1) like dual-pol SAR data. In this script, we utilize Sentinel-1 GRD products as input and calculate the RVI4S1 index for monitoring crop growth. The theoretical value of this index ranges from 0 to 1. The bare soil or pure elementary targets indicate a very low RVI4S1 index towards zero. Conversely, a fully developed crop canopy advance the index towards 1. Zero is indicated by pink, whereas green indicates RVI4S1 == 1.0.

Details of the script

The script is applicable to monitor crop condition over the global scale and invariant to crop types. The vegetation indices developed here utilize the GRD product. First, the VH/VV ratio is calculated and denoted as q. Then an equivalent to the degree of polarization (m) is derived from q, as (1-q)/(1+q). The m factor ranges between 0 and 1. For low vegetation conditions, the co-pol backscatter will be high and the cross-pol backscatter is low (i.e., q->0). As a consequence, one can observe that, for bare field conditions m is high, and decreases gradually with an increase in vegetation canopy density.

Further, the beta (normalized co-pol intensity parameter) can be expressed as, beta = 1/(1+q). where 0.5<beta<1.

Now, the overall purity of the co-pol component can be obtained by multiplying the co-pol purity parameter m and normalized co-pol intensity parameter beta. Subsequently, by subtracting overall purity, we obtain a quantitative measure of scattering randomness, as RVI4S1. with 0<RVI4S1<1.0.

It quantifies impurity in the co-pol component of scattered wave. The index also separates urban areas and bare soil from the vegetated terrain. However, for very rough soil (likely after tillage) or water surface (high windy condition), the DOP would be lower, which turns the RVI4S1 to be quite higher than a smooth surface. Hence care should be taken with this particular condition. For example, RVI4S1 = 0 for a pure or point target scattering which corresponds to copol purity parameter m = 1, and beta =1. On the other extreme case m = 0 and beta = 0.5 for a completely random scattering. Therefore, RVI4S1=1 for a completely random scattering.

Author of the script

Dr. Dipankar Mandal

Description of representative images

1) Manitoba province, Canada

The representative image of RVI4S1 generated by EO Browser custom script. It shows the start of the season (11 May) to high vegetative growth condition (22 July) of summer 2019 in Manitoba province, Canada. This region is dominating by cereal crops (wheat, oats, barley), corn, canola and soybean. Throughout the growth season changes in RVI4S1 values are observed. The index changes from almost 0 to close to 1 as crop advanced.

The script example 1

2) Andhra Pradesh, India

The representative image of RVI4S1 generated by EO Browser custom script. It shows the start of the season (17 June) to high vegetative growth condition (08 November) of monsoon 2018 in Andhra Pradesh, India. This region is dominating by rice. Throughout the growth season changes in RVI4S1 values are observed. The index changes from almost 0 to close to 1 as crop advanced.

The script example 2