欢迎光临散文网 会员登陆 & 注册

【附代码】PIE-Engine监督分类 方法分享

2023-08-16 13:15 作者:鸡腿我来了  | 我要投稿

PIE-Engine监督分类 代码:


// 定义研究区域:

var geometry = pie.FeatureCollection("user/3069305918@qq.com/Dandinghe")

                  .first()

                  .geometry();

Map.addLayer(geometry, { color: "ff0000ff", fillColor: "00000000" }, "分析区域");

Map.centerObject(geometry, 10);//把研究区域矢量图放在中心,并使用10级缩放:


// 筛选数据:

var image =  pie.ImageCollection("GF1/L1A/WFV_SR")//选择数据源为高分一号数据

// var image =  pie.ImageCollection("S2/L2A")//选择数据源为高分一号数据

                   .filterBounds(geometry)//以roi边界为位置选择影像

                   .filterDate("2019-5-1","2019-10-31")//选择在2019年的影像

                   .select(["B4","B3","B2"])//选择需要的波段

                   .mosaic()//选择需要的波段并拼接影像

                   .multiply(10000)

                   .clip(geometry);//按照研究区域裁剪影像

// Map.addLayer(image.select(["B4","B3","B2"]),{min:0,max:5000,opacity:0.6},"假彩色影像image",true);

// print(image)


// 导出矢量要素:

// Export.table({

//   collection: geometry0,

//   description: "ExportShp"

// });


// 加载位置点要素(点要素带有位置,以及标注好的landcover字段,用于分类):

var points = pie.FeatureCollection('user/3069305918@qq.com/DDH_points');// DDH_points点集合中:landcover从1~5表示四种不同地物类型

print("roi:", points)

// Map.addLayer(points, { color: 'FF0000', fillColor: '00000000', width: 2 }, "points");


//在点矢量points处对遥感影像image以10m比例尺进行采样,携带字段landcover,得到初始总样本training?

var training = image.sampleRegions(points, ["landcover"], 10, "", "", true);// .sampleRegions():从Image中随机采样,返回FeatureCollection类型

print("training:", training)

Map.addLayer(training, { color: 'FF0000', fillColor: '00000000', width: 2 }, "training");


// // 将获得的总样本按照7:3分成训练样本和验证样本

var withRandom = training.randomColumn('random');//添加"random"字段并赋0~1的伪随机数

var trainPartition = withRandom.filter(pie.Filter.lte("random", 0.7));//取70%为样本点

var testPartition = withRandom.filter(pie.Filter.gt("random", 0.7));//取30%为验证点

Map.addLayer(withRandom, { color: "yellow" }, "withRandom");

Map.addLayer(trainPartition, { color: "red" }, "trainPartition");

Map.addLayer(testPartition, { color: "blue" }, "validation");

print("withRandom", withRandom);

print("trainPartition", trainPartition);

print("validation", testPartition);


// 定义SVM参数

var options = {

    // SVM类型: C_SVC=100,NU_SVC=101,ONE_CLASS=102,EPS_SVR=103,N-U_SVR=104

    "svmType": 100,

    // SVN核类型:LINEAR=0,POLY=1,RBF=2,SIGMOID=3,CHI2=4,INTER=5

    "kernelType": 0,

    // 核函数的γ参数,默认值为1;

    "gamma": 1,

    // 核函数的coef0参数,默认值为0

    "coef0": 0,

    // 多项式核函数的degreee参数(阶数),默认值为0;

    "degree": 0,

    // 用最优参数训练SVM,如果是会相当耗时

    "trainAuto": 0,

    // 迭代终止方式:1表示最大迭代次数 2表示最小收敛阈值 3表示最大迭代次数和最小收敛阈值组合

    "type": 3,

    // 最小收敛的阈值:当点之间的距离小于这个值的时候终止迭代

    "minDistance": 0.1,

    // 最大的迭代次数:计算多少次终止聚类迭代

    "maxIter": 100

};


//分类器进行分类

var classifer = pie.Classifier.svm(options).train(trainPartition, "landcover", ["B4", "B3", "B2"]);

var resultImage = image.classify(classifer, "classify_handa");

print("resultImage:", resultImage);


// 分类后处理:平滑影像,进行开闭运算剔除噪声影响.

var resultImage2 = resultImage.focal_min(2).focal_max(2);

// var kernel= pie.Kernel().mean(3)

// class_image2 = resultImage.convolve(kernel)


var visParam = {

    opacity: 1,

    uniqueValue: '1,2,3,4,5',

    palette: '467EDA,EC632B,CCDC45,55B548,F5AB20'

};


Map.addLayer(resultImage, visParam, '分类结果');

Map.addLayer(resultImage2, visParam, '平滑处理后结果');


//6.精度验证

var matrix = classifer.confusionMatrix();

print("matrix", matrix);

// 评估训练样本的精度.

var checkM = classifer.confusionMatrix();

print("训练矩阵-ACC系数:", checkM.acc());

print("训练矩阵-Kappa系数:", checkM.kappa());

// 评估验证样本的精度.

var predictResult = testPartition.classify(classifer, "classification");

var errorM = predictResult.errorMatrix("landcover", "classification");

print("验证矩阵-ACC系数:", errorM.acc());

print("验证矩阵-Kappa系数:", errorM.kappa());


// 添加图例

var data = {

    title: "分类结果",

    colors: ['467EDA','EC632B','CCDC45','55B548','F5AB20'],

    labels: ["1-水域", "2-水田", "3-草地", "4-林地","5-滩涂"],

    step: 1

};

var style = {

    right: "100px",

    bottom: "10px",

    height: "70px",

    width: "300px"

};

var legend = ui.Legend(data, style);

Map.addUI(legend);


【附代码】PIE-Engine监督分类 方法分享的评论 (共 条)

分享到微博请遵守国家法律