3

For my research I want to have sentinel-1 layers for each month and in order to reduce the amount of border noise I used the imageCollection.median() on a Sentinel-1 timeseries within the Google Earth Engine.

The problem is that when I zoom in the pixels seem to be overlapping and not aligning properly.

strange pixels

Does anybody know how to fix this or is it simple not possible to reduce sentinel-1 timeseries?

See code below:

// Load the Sentinel-1 ImageCollection.
var sentinel1 = ee.ImageCollection('COPERNICUS/S1_GRD');
var geometry2 = /* color: #d63000 */ee.Geometry.Polygon(
    [[[17.12881578170004, 46.81643443671282],
      [17.101364827626412, 46.55282544717593],
      [18.4462854747203, 46.861496672885984],
      [18.094957936090168, 47.11612461249994]]]),

// Filter by metadata properties.
var vvvh = sentinel1
// Filter to get images with VV and VH dual polarization.
  .filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VV'))
  .filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VH'))
  .filter(ee.Filter.eq('instrumentMode', 'IW'))
  .filter(ee.Filter.eq('resolution_meters', 10))
  .filter(ee.Filter.eq('relativeOrbitNumber_start', 51)) 
  .filter(ee.Filter.bounds(geometry2));

var S1 = vvvh.select('VH','VV');

//Create timeseries for whole year 2015
var S1y = S1.filterDate('2015-01-01', '2015-12-31');

// Create timeseries for summer and winter
var S1s =  S1.filterDate('2015-06-01', '2015-09-01');
var S1w =  S1.filterDate('2015-10-01', '2016-03-01');

// Create timeseries for each month in the year 2015
var S1_1 =  S1.filterDate('2015-01-01', '2015-02-01').median();
var S1_2 =  S1.filterDate('2015-02-01', '2015-03-01').median();
var S1_3 =  S1.filterDate('2015-03-01', '2015-04-01').median();
var S1_4 =  S1.filterDate('2015-04-01', '2015-05-01').median();
var S1_5 =  S1.filterDate('2015-05-01', '2015-06-01').median();
var S1_6 =  S1.filterDate('2015-06-01', '2015-07-01').median();
var S1_7 =  S1.filterDate('2015-07-01', '2015-08-01').median();
var S1_8 =  S1.filterDate('2015-08-01', '2015-09-01').median();
var S1_9 =  S1.filterDate('2015-09-01', '2015-10-01').median();
var S1_10 =  S1.filterDate('2015-10-01', '2015-11-01').median();
var S1_11 =  S1.filterDate('2015-11-01', '2015-12-01').median();
var S1_12 =  S1.filterDate('2015-12-01', '2016-01-01').median();

var compall =    
ee.Image.cat([S1_1,S1_2,S1_3,S1_4,S1_5,S1_6,
S1_7,S1_8,S1_9,S1_10,S1_11,S1_12]);

Map.addLayer((compall), {min: -25, max: 0}, 'RGB');

All right, I tried to use only 1 relative orbit and now they seem to allign but still overlap: Imgur

4
  • Are you using the same relative orbit for your time series?
    – GCGM
    Jan 11, 2018 at 15:36
  • Your code example is missing some information. Please define geometry2 and S1. How are you adding the layers to the Code Editor's interactive map? Jan 12, 2018 at 14:33
  • They are both in the code now, I tried using the same relative orbit but it still does not align perfectly...
    – Jim Groot
    Jan 12, 2018 at 14:51
  • You have a typo in the definition of geometry2. It should end with a semicolon, not a comma. Jan 12, 2018 at 17:37

3 Answers 3

4

The non-aligning data is expected when overlaying Sentinel-1 data.

The COPERNICUS/S1_GRD image collection contains data from two satellite platforms in the Sentinel-1 constellation, Sentinel-1a and Sentinel-1b. The identical satellites orbit Earth 180° apart, and have a combined global revisit time of 6 days. For locations away from the equator, there is scene overlap and areas may be observed more often than every 6 days, but from different orbit paths. The images from different paths will not align with each other.

Furthermore, even images from the same relative path (taken 6 or 12 days apart) will not align with each other. The following code demonstrates this by comparing two scenes taken 12 days apart. The scenes share the same relative orbit (see the image metadata relativeOrbitNumber_start) but the orbits and the alignment of observations are not exactly the same.

var viz_params = {bands:'VV', min: -25, max: 0, opacity:0.5};
var image1 = ee.Image('COPERNICUS/S1_GRD/S1A_IW_GRDH_1SDV_20150101T045337_20150101T045402_003973_004C86_D47F');
var image2 = ee.Image('COPERNICUS/S1_GRD/S1A_IW_GRDH_1SDV_20150113T045337_20150113T045402_004148_005074_AA6B');

You can display the pixels in the first two bands which shows are they are not aligned:

Map.addLayer(image1, viz_params, 'image1 pixels');
Map.addLayer(image2, viz_params, 'image2 pixels');

enter image description here

You can also display the image "footprints" which also differ:

Map.addLayer(image1.select(0).geometry(), {color:'red'}, 'image1 footprint (red)');
Map.addLayer(image2.select(0).geometry(), {color:'blue'}, 'image2 footprint (blue)');

enter image description here

Link to code used to generate the preceding images: https://code.earthengine.google.com/8a7f776724fec5d26811283d159f4392

Given that the pixels of individual images are not aligned, it makes sense that the monthly mosaics of images also exhibit this.

3
  • Thanks, I tried that but there is still a shift in pixels somewhere...
    – Jim Groot
    Jan 12, 2018 at 15:10
  • Agreed. I updated my answer to reflect this. Jan 12, 2018 at 18:49
  • Thank you, I see a simple solution wont work... But i was thinking if there might be a way to resample pixels into a new raster in order to achieve comparable monthly values?
    – Jim Groot
    Jan 14, 2018 at 15:03
2

I found a solution to the problem by reprojecting the images based on the original scale:

var compall = compall.reproject({
crs: compall.projection().crs(),
scale: 10
});

This realigns the pixels and solved the problem for me. I hope this will also help others.

Thanks for the help. :D

0

Try it like this

var S1_1 =  ee.Image(S1.filterDate('2015-01-01', '2015-02-01').median());
var S1_2 =  ee.Image(S1.filterDate('2015-02-01', '2015-03-01').median());
var S1_3 =  ee.Image(S1.filterDate('2015-03-01', '2015-04-01').median());
var S1_4 =  ee.Image(S1.filterDate('2015-04-01', '2015-05-01').median());

Map.addLayer(S1_1.addBands(S1_2).addBands(S1_3), {min: -25, max: 0}, 'RGB');
1
  • Thank you for the answer, but it think it all depends on the incidence angle not aligning properly for each scene. I think the only option is to separately classify each scene and later merge them once classified...
    – Jim Groot
    Jan 12, 2018 at 13:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.