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

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

 

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

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

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

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

var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_SR"),
 
    roi = /* color: #d63000 */ee.Geometry.Point([-104.78007812499999, 37.98291341313860
 

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计算所得是最后一个有效的像素值。

运行结果:

 

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提取的是像素点的最大值。

运行结果:

 

(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在拼接单波段影像中两者是没有区别的。

运行结果:

 

(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()则是对所有波段排序后取值。这点区别需要注意一下。

运行结果:

来源请引用:地理遥感生态网科学数据注册与出版系统.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值