Py学习  »  机器学习算法

RSE论文复现|使用gee深度学习快速复现RSE期刊上的中国玉米和大豆分类产品

走天涯徐小洋地理数据科学 • 2 周前 • 69 次点击  

早些时候,我们发布了马里兰大学制作完成的中国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 = {
min0,
max0.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分类结果和马里兰大学分类结果。

再来看一下局部细节,可以发现原来的分类结果存在明显的椒盐噪声点,而我们的初步试验结果就会好很多。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/200702