GOOGLE|google earth engine(GEE)进行非监督分类

在GEE非监督分类中,需要考虑的步骤:
1.筛选数据; 2.数据预处理(去云,镶嵌,裁剪等); 3.选择方法进行非监督分类; 4.结果导出; 5.使用arcgis进行分类结果的合并与重分类。 我先提供一个完整的代码,大家都可先看看效果:
gee 非监督分类共享链接:https://code.earthengine.google.com/c644c08bf6611a00d5123bccaf5ee871
下面是每一步具体的代码:
1.筛选数据;
选择landsat8作为数据源,并且制定研究区(我上传的是江苏某市的行政图),筛选研究时间,影像云量:

var startDate = ee.Date('2018-04-01'); var endDate = ee.Date('2018-9-30'); var collection = l8 .filterDate(startDate, endDate)//时间过滤 .filterBounds(roi)//位置过滤 .filter(ee.Filter.lte('CLOUD_COVER',10))//云量过滤 ;

2.数据预处理(去云,镶嵌,裁剪等);
首先,使用一个去云函数,读取该像素在影像集合的云量,如果超过阈值,则直接去掉该像素值。去云函数要封装好,需要的时候直接调用,这可以保证你在任意的项目中都可以使用:
//去云函数 var remove_cloud=function(collection) //************select purified pixes************/ { // 计算每个像元的云分量,定义函数fun_calCloudScore var fun_calCloudScore = function(image) { return ee.Algorithms.Landsat.simpleCloudScore(ee.Image(image)); //simpleCloudScore计算TOA数据每一个像元的云指数 }; //确定要进行函数运算的数据集以及函数 var calCloudScore = ee.ImageCollection(collection) .map(fun_calCloudScore) ; //屏蔽阈值超过10的像素 var fun_maskCloud = function(image) { // Create a mask from the cloud score and combine it with the image mask. var mask = image.select(['cloud']).lte(10); //TOA数据经simpleCloudScore计算产生“cloud”属性,“cloud”小于10的像元保留 // Apply the mask to the image and display the result.显示云显示云掩膜 return image.updateMask(mask); //更新 }; //确定要进行函数运算的数据集以及函数 var maskCloud = ee.ImageCollection(calCloudScore) .map(fun_maskCloud) ; var maskCloud2=maskCloud.mean() print('maskCloud2',maskCloud2 ) Map.addLayer(maskCloud,visualParam, 'maskCloud', false); //显示干净像元筛选过的maskCloud Map.addLayer(maskCloud2,visualParam, 'maskCloud2', false); //显示干净像元筛选过的maskCloud return maskCloud; }

之后直接对研究区进行去云、镶嵌与裁剪,这个一句话就行了:
var image=remove_cloud(collection).mosaic().clip(roi);


3.选择方法进行非监督分类:
目前gee提供非常多的非监督分类方法,可以根据自己的需求来,在这里我推荐大家使用:非监督分类方法wekaCobweb,wekaKMeans,wekaLVQ。需要注意的是每个方法,设置的必要参数是不一样的,这个一定要在使用前看看gee关于方法的说明,弄清楚哪些是必填项。clusters就是非监督分类结果。
//分类区域边界线 Map.addLayer(ee.Image().paint(roi, 0, 2), {}, 'roi'); //分类区域的选择 var training = image.sample({ region: roi, scale: 30, numPixels: 5000 }); //非监督分类方法选择wekaCobweb,wekaKMeans,wekaLVQ var clusterer = ee.Clusterer.wekaCobweb( { cutoff:0.004} ).train(training); var result = image.cluster(clusterer); //加载影像 Map.addLayer(result.randomVisualizer(), {}, 'clusters');

非监督分类结果:
GOOGLE|google earth engine(GEE)进行非监督分类
文章图片

4.结果导出;
导出到google drive里面,再进行下载,进行本地化处理。
//导出 Export.image.toDrive({ image:result ,//分类结果 description: 'unsupervised_kmeans',//文件名 folder: 'unsupervised_kmeans', scale: 30,//分辨率 region: roi,//区域 maxPixels:34e10//此处值设置大一些,防止溢出 });

5.使用arcgis进行分类结果的合并与重分类。
由于我使用的是wekaCobweb分类方法,最后导出了大概100个类别,但是我只需要4个类别,这个时候就对分类结果进行重分类。如果你想减少工作量,可以使用KMeans方法,只导出10类左右。
GOOGLE|google earth engine(GEE)进行非监督分类
文章图片

最后经过重分类,得到我需要的4类结果:
GOOGLE|google earth engine(GEE)进行非监督分类
文章图片

到此,利用GEE进行非监督分类就结束了。需要注意两个问题:1.非监督分类的方法与参数选择,可改变输出数量;
2.得到的结果,最好就行导出,在本地进行后续处理。
【GOOGLE|google earth engine(GEE)进行非监督分类】希望同行多多交流,谢谢

    推荐阅读