GEE学习笔记 五十九:GEE中mosiac、qualityMosiac、max区别

    GEE的每一个API都值得我们去研究,就以GEE中最为普通的方法拼接来讲就有很多的内容可以研究,这一篇文章就是探讨一下GEE中拼接方法。关于GEE中的影像集合拼接为单张影像有很多中方法,最为普通的莫过于mosiac()方法,利用这个方法我们可以将影像集合拼接为单张影像。还有偶尔会用到的是qualityMosiac(),这个方法在我们要筛选某些数据的时候比较有用。先看一下这个两个的API:

 

GEE学习笔记 五十九:GEE中mosiac、qualityMosiac、max区别_第1张图片

 

GEE学习笔记 五十九:GEE中mosiac、qualityMosiac、max区别_第2张图片

 

从字面解释的意识可以知道:

  • mosaic获取的是最后一个有值的像素,然后生成一张影像;

  • qualityMosaic提取的是按照qunalityBand排序后最大值的数据,类似对集合使用max函数;

 

如果还是不太理解上面的解释,我们直接使用代码来解释相关内容。下面的例子都使用了公共的数据:

var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_SR"),

    roi = /* color: #d63000 */ee.Geometry.Point([-104.78007812499999, 37.982913413138604]);

 

1、普通的Mosaic

具体代码:

//普通的mosaic,获取的是最后一个有值的像素

//默认的addLayer(imageCollection)使用的是普通的mosaic

function normalMosaicDemo() {

  Map.centerObject(roi, 8);

  var scol = l8.filterBounds(roi)

              .filterDate("2018-1-1", "2018-3-1")

              .select("B1")

              .map(function(image) {

                return image.updateMask(image.lt(2000));

              });

  print(scol);

  Map.addLayer(scol, {}, "1");

  var img1 = scol.mosaic();

  Map.addLayer(img1, {}, "2");

}

normalMosaicDemo();

分析代码:

    这里需要注意的是,直接使用addLayer()添加imageCollection与imageCollection调用mosaic方法是结果是一致的。同时通过点击查看点的数据,可以看到mosaic计算所得是最后一个有效的像素值。

 

运行结果:

GEE学习笔记 五十九:GEE中mosiac、qualityMosiac、max区别_第3张图片

 

2、质量排序的qualityMosaic

(1)例子一,直接使用qualityMosaic方法

具体代码:

//qualityMosaic()提取的是排序后最大值的数据

function qualityMosaicDemo1() {

  Map.centerObject(roi, 8);

  var scol = l8.filterBounds(roi)

               .filterDate("2018-1-1", "2018-3-1")

               .select("B1");

  print(scol);

  Map.addLayer(scol, {}, "1");

  var img1 = scol.qualityMosaic("B1");

  Map.addLayer(img1, {}, "2");

}

qualityMosaicDemo1();

代码分析:

    从结果可以看到qualityMosaic提取的是像素点的最大值。

运行结果:

GEE学习笔记 五十九:GEE中mosiac、qualityMosiac、max区别_第4张图片

 

(2)例子二,单波段影像对比max和qualityMosaic结果

具体代码:

//单波段与max对比

function qualityMosaicDemo2() {

  Map.centerObject(roi, 8);

  var scol = l8.filterBounds(roi)

               .filterDate("2018-1-1", "2018-3-1")

               .select("B1");

  print(scol);

  Map.addLayer(scol, {}, "1");

  var img1 = scol.qualityMosaic("B1");

  Map.addLayer(img1, {}, "2");

  var img2 = scol.max();

  Map.addLayer(img2, {}, "3");

  var img3 = scol.reduce(ee.Reducer.max());

  Map.addLayer(img3, {}, "4");

  var img4 = scol.reduce(ee.Reducer.max(1));

  Map.addLayer(img4, {}, "5");

}

qualityMosaicDemo2();

代码分析:

    从结果可以看到使用max和qualityMosaic在拼接单波段影像中两者是没有区别的。

运行结果:

GEE学习笔记 五十九:GEE中mosiac、qualityMosiac、max区别_第5张图片

 

(3)例子三,多波段影像对比max和qualityMosaic的结果

具体代码:

//多波段与max对比

function qualityMosaicDemo3() {

  Map.centerObject(roi, 8);

  var scol = l8.filterBounds(roi)

               .filterDate("2018-1-1", "2018-3-1")

               .map(function(image) {

                 var doy = ee.Date(image.get("system:time_start")).format("DDD");

                 doy = ee.Number.parse(doy).int();

                 image = image.addBands(ee.Image.constant(doy).toInt().rename("doy"));

                 return image;

               })

               .select(["B1", "doy"]);

  print(scol);

  Map.addLayer(scol, {}, "1");

  var img1 = scol.qualityMosaic("B1");

  Map.addLayer(img1, {}, "2");

  var img2 = scol.max();

  Map.addLayer(img2, {}, "3");

  var img3 = scol.reduce(ee.Reducer.max());

  Map.addLayer(img3, {}, "4");

  var img4 = scol.reduce(ee.Reducer.max(2));

  Map.addLayer(img4, {}, "5");

}

qualityMosaicDemo3();

代码分析:

    这个结果可能有些人看得就有些懵了,使用qualityMosaic只会对imageCollection中的qualityBand排序不会影响其他波段,这种效果类似ee.Reducer.max(2)这种方法,关于max中参数有无的区别后续在讨论。而直接使用max()或者ee.Reducer.max()则是对所有波段排序后取值。这点区别需要注意一下。

运行结果:

GEE学习笔记 五十九:GEE中mosiac、qualityMosiac、max区别_第6张图片

GEE学习笔记 五十九:GEE中mosiac、qualityMosiac、max区别_第7张图片

 


大家如果有问题需要交流或者有项目需要合作,可以微信联系我,加微信好友请留言加上“GEE”。

知乎专栏:https://zhuanlan.zhihu.com/c_123993183

微信号:shi_weihappy

你可能感兴趣的:(GEE,GEE开发)