早些时候,我们发布了马里兰大学制作完成的中国10米分辨率玉米和大豆产品(见马里兰大学发布的中国10米分辨率玉米和大豆产品数据暨如何在GEE中调用),那篇文章是用Random Forest完成的。虽然公开了宝贵的数据,但是没有公开代码,所以我们就想复现一下,不过使用的是gee深度学习技术。
Li, H., Song, X. P., Hansen, M. C., Becker-Reshef, I., Adusei, B., Pickering, J., ... & Justice, C. (2023). Development of a 10-m resolution maize and soybean map over China: Matching satellite-based crop classification with sample-based area estimation. Remote Sensing of Environment, 294, 113623.

首先是影像数据的调用和处理,这里我们和原文保持了一致,都是使用2019年5月到9月的影像数据,然后使用CNN模型来进行分类,代码如下所示:
var imgSoy_Maize = ee.Image('projects/ee-openscidataset/assets/China_maize_soy_10m_2019');
var visParam = {'palette':['white','green','yellow'],'min':0,'max':2};
var imgLabel = imgSoy_Maize.clip(roi);
Map.addLayer(imgLabel,visParam,'imgLabel',false);
// Sentinel-2 image
var yearStart = 2019;
var yearEnd = 2019;
var monthStart = 5;
var monthEnd = 9;
var imgS2 = imgS2Composite(roi,yearStart,yearEnd,monthStart,monthEnd);
print("imgS2",imgS2);
var rgbVis = {
min: 0,
max: 0.3,
bands: ['Band_03_red', 'Band_02_green', 'Band_01_blue']};
Map.addLayer(imgS2,rgbVis,'imgMedian');
// remove cloud from Sentinel-2
function rmS2cloud(image) {
var qa = image.select('QA60');
// Bits 10 and 11 are clouds and cirrus, respectively.
var cloudBitMask = 1 <10;
var cirrusBitMask = 1 <11;
// Both flags should be set to zero, indicating clear conditions.
var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
.and(qa.bitwiseAnd(cirrusBitMask).eq(0));
return image.updateMask(mask).divide(10000)
.copyProperties(image)
.copyProperties(image, ["system:time_start", "system:time_end"]);
}
function imgS2Composite(roiRegion,yearStart,yearEnd,monthStart,monthEnd){
// ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED"); //S2_SR or S2
var S2_BANDS = ['B2', 'B3', 'B4', 'B8', 'B11', 'B12', ];
var Band_Std = ['Band_01_blue','Band_02_green','Band_03_red','Band_04_NIR','Band_05_swir1','Band_06_swir2'];
// load S2 images
var imgS2SR = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")//.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',20))
.filter(ee.Filter.calendarRange(yearStart,yearEnd,'year'))
.filter(ee.Filter.calendarRange(monthStart,monthEnd,'month'))
.filterBounds(roiRegion)
.map(rmS2cloud)
.select(S2_BANDS,Band_Std)
.median().clip(roiRegion);
return imgS2SR;
}
最后,我们来看下运行的效果,依次是Sentinel-2影像、CNN分类结果和马里兰大学分类结果。再来看一下局部细节,可以发现原来的分类结果存在明显的椒盐噪声点,而我们的初步试验结果就会好很多。