今天继续GEE的学习,我们依然看到影像数据的处理,今天将涉及到的函数命令时栅格掩膜、栅格裁剪、栅格的波段选择创建、栅格的波段添加、栅格重投影以及栅格的色彩转换。
A.栅格掩膜
掩膜的意思就是以其中一个为边界范围,将边界范围内覆盖的数据保留,而将边界外的数据都赋值为0进行去除的过程,效果类似于ArcGIS里面的掩膜提取工具,此处我们以DEM的掩膜为例:
//栅格的掩膜分析
var DEM = ee.Image("CGIAR/SRTM90_V4");
var LandCover = ee.Image("ESA/GLOBCOVER_L4_200901_200912_V2_3").select("landcover").eq(14);
var Mask = DEM.mask(LandCover);
print("DEM:",DEM,"LandCover:",LandCover,"Mak:",Mask);
Map.setCenter(100,30);
var palettes = require('users/gena/packages:palettes');
Map.addLayer(DEM,{"opacity":1,"bands":["elevation"],min:0,max:8000,palette:palettes.colorbrewer.RdYlGn[11].reverse()},"DEM");
Map.addLayer(LandCover,{"opacity":1,"bands":["landcover"],"palette":["FFFFFF","FF0000"]},"landCover");
Map.addLayer(Mask,{"opacity":1,"bands":["elevation"],min:0,max:8000,"palette":["0D33FF","FF0000"]},"Mask");
DEM数据用到的是NASA提供的CGIAR数据,分辨率是90m,掩膜的提取数据采用ESA提供的全球土地覆盖数据,该数据波段下的不同值代表不同的土地利用覆盖类别,代码中我们选择值为14,代指“Rainfed croplands”即雨养农田,从图中我们可以看出大部分地区的农业发展都极大依赖于雨水灌溉的进行,使用DEM.Mask(landcover)便能够提取雨养农田覆盖区域的DEM数据,结果如下所示:
上为雨养农田的土地覆盖分布,右为DEM,在地图上点击,得到的结果为:
B.栅格裁剪
利用边界范围对影像数据进行裁剪,这个与掩膜提取得到结果类似,但原理不同,我们还是要稍作区别。
//栅格裁剪
var DEM1 = ee.Image("USGS/SRTMGL1_003");
var Jiangxi = ee.FeatureCollection("users/hesuixinya511/Province").filterBounds(ee.Geometry.Point([115.08,26.48]));
var JXDEM = DEM.clip(Jiangxi);
Map.addLayer(JXDEM,{min:0,max:2000,"bands":["elevation"],palette:palettes.colorbrewer.RdYlGn[10].reverse()},"JXDEM");
DEM数据采用USGS和NASA联合提供的数据,边界范围是小编自主上传的矢量数据,利用点进行空间过滤,使用clip方法即可裁剪,结果将得到江西省内的DEM。
C.栅格波段选择创建
由于卫星传感器的发展,栅格影像数据一般是多波段数据,每一个波段单独存储信息,用户在实际环境中并不需要全部的数据,需要的只是其中1到2个波段的数据,而利用select方法,就能够选择想要的波段来进行显示。这里我们举个例子,Copernicus提供的土地覆盖数据有多个波段(下图显示了一部分),我们想把离散化分类和树木覆盖率单独提取出来,代码上应该如何实现?
//栅格波段选择创建
var collection = ee.Image('COPERNICUS/Landcover/100m/Proba-V-C3/Global');
var cover = collection.select("discrete_classification");
var tree = collection.select("tree-coverfraction");
Map.addLayer(cover,{},"cover");
Map.addLayer(tree,{palette:palettes.colorbrewer.YlGn[9]},"tree");
先调用数据集,再利用select选择想要波段,再进行可视化操作即可,是不是很简单呢!接下来欣赏一下华丽结果!!
D.波段裁剪
波段的裁剪就是保留想要的波段,去除不想要的波段,一般使用slice,波段切片,结果将返回一个保留切片波段的影像。
//栅格的波段裁取创建
var L9 = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA");
var L9Image = ee.Image(L9.filterBounds(ee.Geometry.Point(115.83,28.66)).first());
var L9Image1 = L9Image.slice(1,4);
print("L9Image",L9Image,"L9Image1",L9Image1);
此处使用最新的L9举例,L9有多个波段,通过slice,我们保留波段索引号为1到3,注意slice末尾虽然写的是4,但是到4的前一个就停止了,我们可以看成是slice[1,4),用数学上的开合闭来理解,因为索引是从0开始的,那么1代表B2,因此,这里得到了一个包含L9的B2,B3,B4,即蓝,绿,红波段的影像,我们看看影像打印信息确认一下。
E.波段添加
波段添加利用addBands可以往影像数据中添加新的波段信息,我们举个例子:
//栅格的波段添加
var L9a = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA");
var L9Imagea1 = ee.Image(L9.filterBounds(ee.Geometry.Point(115.83,28.66)).first());
var Band1 = L9Imagea1.select("QA_PIXEL");
var Band2 = L9Imagea1.select("QA_RADSAT");
var BandImage = Band1.addBands(Band2);
print("BandImage:",BandImage);
此处利用select得到Band1和Band2两张单波段影像,再利用addBands将“QA_RADSAT”波段添加到Bands中,形成一张双波段影像,结果如下:
F.栅格重投影
为了保证栅格影像的投影坐标一致性,投影的使用显得重要。栅格投影选用的是.reproject,注意,矢量数据的重投影是.transform,两个工具不要混用了。
//栅格重投影
var rawL9 = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA");
var rawImageL9 = ee.Image(L9.filterBounds(ee.Geometry.Point(121.65,31.59)).first());
var Reproject = rawImageL9.reproject("EPSG:3857",null,100);
print("Raw:",rawImageL9.projection,"Reproject:",Reproject.projection());
Map.addLayer(rawImageL9,{ min: 0.0, max: 0.4,"bands":["B4","B3","B2"]},"Raw");
Map.addLayer(Reproject,{ min: 0.0, max: 0.4,"bands":["B4","B3","B2"]},"Reproject");
此处利用投影,将栅格影像投影成代号为3857坐标系,并且制定投影的分辨率是100m,投影前和投影后结果对比如下:
从结果上看,影像的分辨率确实发生了改变,放大之后,第二张图的马赛克感来了。
G.影像的颜色转变
最后我们来看一下影像的颜色转换,由于颜色的方案有多种,RGB,HSV等,栅格影像之间如何进行颜色的转换,我们一起来看看:
//栅格的色彩转换
var color = ee.ImageCollection("LANDSAT/LC09/C02/T1_TOA");
var color1 = ee.Image(L9.filterBounds(ee.Geometry.Point(120.34,36.08)).first().slice(1,4).unitScale(0,32468));
var colorHSV = color1.rgbToHsv();
var colorRGB = colorHSV.hsvToRgb();
print("color1:",color1,"colorHSV",colorHSV,"colorRGB",colorRGB);
Map.addLayer(color,{},"Origin");
Map.addLayer(colorHSV,{},"HSV");
Map.addLayer(colorRGB,{},"RAW");
此处我们主要是将原始RGB影像转为HSV影像,而后又转回RGB影像,使用的颜色转换工具为rgbToHSV和hsvToRgb,得到的结果如下:
关于今天的分享到这里就结束了,如果对你的学习有帮助,不要忘记了给小编点赞哦。谢谢支持!