GEE|GEE学习笔记 五十九(GEE中mosiac、qualityMosiac、max区别)

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

GEE|GEE学习笔记 五十九(GEE中mosiac、qualityMosiac、max区别)
文章图片


GEE|GEE学习笔记 五十九(GEE中mosiac、qualityMosiac、max区别)
文章图片


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

  • 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)使用的是普通的mosaicfunction 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学习笔记 五十九(GEE中mosiac、qualityMosiac、max区别)
文章图片


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学习笔记 五十九(GEE中mosiac、qualityMosiac、max区别)
文章图片


(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学习笔记 五十九(GEE中mosiac、qualityMosiac、max区别)
文章图片


(3)例子三,多波段影像对比max和qualityMosaic的结果
【GEE|GEE学习笔记 五十九(GEE中mosiac、qualityMosiac、max区别)】具体代码:
//多波段与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学习笔记 五十九(GEE中mosiac、qualityMosiac、max区别)
文章图片

GEE|GEE学习笔记 五十九(GEE中mosiac、qualityMosiac、max区别)
文章图片


大家如果有问题需要交流或者有项目需要合作,可以微信联系我,加微信好友请留言加上“GEE”。
知乎专栏:https://zhuanlan.zhihu.com/c_123993183
微信号:shi_weihappy

    推荐阅读