GEE学习2-ImageCollection的可视化2-可视化实现的方法


这一部分将给出具体的ImageCollection实现方法

二、ImageCollection的可视化实现

首先我们要知道一个知识点:
可视化图像时,数据范围缩放是一个需要考虑的重要因素。在默认情况下,在(0,1]范围内的浮点数值会在(0,255]之间缩放。超出此范围的值被强制分为0和255。同理,带符号的16位数据的范围为−32,768至32,767,默认情况下也会被缩放为[0,255]。但是,接受默认设置通常会导致可视化时图像特征之间几乎没有对比。因此,可以通过使用minmax,改善对比度并强调特定的数据范围。官方给出了一个好的经验法则是:将minmax设置为代表感兴趣区域中数据的第2个百分点和第98个百分点的值:

var demImg = ee.Image('USGS/SRTMGL1_003');
var aoi = ee.Geometry.Polygon(  
  [[  
    [-103.84153083119054,  49.083004219142886],
    [-103.84153083119054,  25.06838270664608],
    [-85.64817145619054,  25.06838270664608],   
    [-85.64817145619054,  49.083004219142886]
  ]],
  null,  false);
//计算500m分辨率下的第2和第98个百分位高程值
//注意返回的是字典对象
var percentClip = demImg.reduceRegion({ 
  reducer: ee.Reducer.percentile([2,  98]), 
  geometry: aoi, 
  scale:  500, 
  maxPixels:  3e7  
});
//使用keys+get方法得到上一步中计算出的所有百分位值
var keys = percentClip.keys();
print('Set vis min to:', ee.Number(percentClip.get(keys.get(0))).round());  
print('Set vis max to:', ee.Number(percentClip.get(keys.get(1))).round());

(1)静态可视化

下面的例子是将可视化功能映射到ImageCollection中的每个单波段影像,具体为将MODIS NDVI影像转化为RGB影像:

var ndviCol = ee.ImageCollection('MODIS/006/MOD13A1') 
  .filterDate('2018-01-01',  '2019-01-01') 
  .select('NDVI');

//定义可视化参数 
var visArgs =  { 
   min:  0, 
   max:  9000, 
   palette:  [  'FFFFFF',  'CE7E45',  'DF923D',  'F1B555',  'FCD163',  '99B718',  '74A901',  '66A000',  '529400',  '3E8601',  '207401',  '056201',  '004C00',  '023B01',  '012E01',  '011D01',  '011301'  ]  
};

//将图像转换为RGB可视化图像并复制的函数 
//从原始图像到RGB图像。
var visFun =  function(img)  {  
   return img.visualize(visArgs).copyProperties(img, img.propertyNames());  
};

var ndviColVis = ndviCol.map(visFun);

此时,影像的波段信息已经改变

同样的操作,可用于多波段影像集合:

var s2col = ee.ImageCollection('COPERNICUS/S2_SR')
   .filterBounds(ee.Geometry.Point(-96.9037,  48.0395))
   .filterDate('2019-06-01',  '2019-10-01');
var visArgs =  {bands:  ['B11',  'B8',  'B3'], min:  300, max:  3500}; 
var visFun =  function(img)  {  return img.visualize(visArgs).copyProperties(img, img.propertyNames());  };
var s2colVis = s2col.map(visFun);  

这时我们随机查看集合中的一个影像:

(2)动态可视化——VideoThumbURL

getVideoThumbURL()函数根据ImageCollection中的所有图像生成动画,其中每个图像代表一帧。该方法得到的是一个URL,打开可在新的浏览器页面中及时生成动画。也可以调用ui.Thumbnail函数,在代码编辑器控制台中查看动画。

//2018年全球植被变化
var aoi = ee.Geometry.Polygon(  
   [[[-179.0,  78.0],  [-179.0,  -58.0],  [179.0,  -58.0],  [179.0,  78.0]]],  null,  false);

var ndviCol = ee.ImageCollection('MODIS/006/MOD13A1') 
  .filterDate('2018-01-01',  '2019-01-01') 
  .select('NDVI');

//定义动画参数
var videoArgs =  { 
  dimensions:  768, 
  region: aoi, 
  framesPerSecond:  7, //每秒帧数
  crs:  'EPSG:3857', 
   min:  0, 
   max:  9000, 
   palette:  [  'FFFFFF',  'CE7E45',  'DF923D',  'F1B555',  'FCD163',  '99B718',  '74A901',  '66A000',  '529400',  '3E8601',  '207401',  '056201',  '004C00',  '023B01',  '012E01',  '011D01',  '011301']
};

//根据上面的参数生成动画,并用ui.Thumbnail打印到控制台
print(ui.Thumbnail(tempCol, videoArgs));

//打印一个URL,在访问该URL时产生动画
print(tempCol.getVideoThumbURL(videoArgs));

注:dimensions参数指的是缩略图的尺寸(以像素为单位)。如果提供单个征数,则它定义图像的较大的横纵尺寸的大小,并按比例缩放较小的尺寸,对于较大的图像横纵尺寸,默认为512像素。格式:一个整数或者字符串如'WIDTHxHEIGHT'’

(3)动态可视化——FilmstripThumbUrl

getFilmstripThumbUrl()这个函数类似于PPT的放映功能,其原理是先生成一个个静态图像,在按顺序从上到下的放映出来

var aoi = ee.Geometry.Polygon(  
   [[[-179.0,  78.0],  [-179.0,  -58.0],  [179.0,  -58.0],  [179.0,  78.0]]],  null,  false);

var ndviCol = ee.ImageCollection('MODIS/006/MOD13A1') 
  .filterDate('2018-01-01',  '2019-01-01') 
  .select('NDVI');

//定义参数
var filmArgs =  { 
  dimensions:  768, 
  region: aoi, 
  crs:  'EPSG:3857', 
   min:  0, 
   max:  9000, 
   palette:  [  'FFFFFF',  'CE7E45',  'DF923D',  'F1B555',  'FCD163',  '99B718',  '74A901',  '66A000',  '529400',  '3E8601',  '207401',  '056201',  '004C00',  '023B01',  '012E01',  '011D01',  '011301']
};

print(ndviCol.getFilmstripThumbURL(filmArgs));

最后,我们可以对比下两种方法的效果,两者的差别还是很明显的。
getVideoThumbURL()方法的结果:

getFilmstripThumbUrl()方法的结果:


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM