• PIE-engine 教程 ——新疆石河子市棉花种植面积提取(阈值法)案例分析


    我们之前有有一个案例用来提取大蒜的种植面积,这里我们首先来解释一下阈值法

    阈值法,关于阈值法的介绍很多人还不知道,现在让我们一起来看看吧!

    1、阈值分割法是一种基于区域的图像分割技术,原理是把图像象素点分为若干类。

    2、图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。

    3、它特别适用于目标和背景占据不同灰度级范围的图像。

    4、它不仅可以极大的压缩数据量,而且也大大简化了分析和处理步骤,因此在很多情况下,是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。

    5、图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域不具有这种一致属性。

    6、这样的划分可以通过从灰度级出发选取一个或多个阈值来实现。

    以上阈值法的介绍来自:阈值法(关于阈值法的介绍)_华夏报道网 (lhyzedu.com)

    本文同样是利用NDVI的计算(使用的sentinel2影像用来计算),同时我们利用全球30米分辨率的土地分类数据进行,我们首先看一下使用的结果:

    全球地表覆盖数据(GlobeLand30)是中国研制的30米空间分辨率全球地表覆盖数据,2014年已发布2000和2010版,自然资源部于2017年对该数据进行了更新,形成了2020版。
    GlobeLand30中包括10个种类,分别为耕地、林地、草地、灌木地、湿地、水体、苔原、人造地表、裸地、冰川和永久积雪。GlobeLand30研制所用的分类影像主要为30米多光谱影像,包括Landsat系列的TM5、ETM+、OLI多光谱影像和中国环境减灾卫星HJ-1多光谱影像,2020版数据还使用了16米的GF1多光谱影像。在影像无云(少云)前提下,优先选择生产基准年或更新年度±2年内植被生长季的多光谱影像,影像获取困难地区则放宽获取时间,从而保证影像的全球覆盖度。

    GlobeLand30 V2010数据精度评价由同济大学牵头完成。从全球853幅数据中抽取80个图幅,布设超过15万个检验样本,得出GlobeLand30 V2010数据的总体精度为83.50%,Kappa系数0.78。GlobeLand30 V2020数据精度评价由中国科学院空天信息创新研究院牵头完成。基于景观形状指数抽样模型进行全套数据布点,共布设样本超过23万个。得出GlobeLand30 V2020数据的总体精度为85.72%,Kappa系数0.82。

    数据集ID: 

    NGCC/GLOBELAND30

    时间范围: 2000年-2020年

    范围: 全国

    来源: NGCC

    复制代码段: 

    var images = pie.ImageCollection("NGCC/GLOBELAND30")

    名称类型无效值空间分辨率时间分辨率描述信息
    B1Byte030m时间范围不连续,分别为2000年,2010年,2020年共三年的地表覆盖产品

    土地分类的分类状况:

    名称内容代码
    耕地用于种植农作物的土地,包括水田、灌溉旱地、雨养旱地、菜地、牧草种植地、大棚用地、以种植农作物为主间有果树及其他经济乔木的土地,以及茶园、咖啡园等灌木类经济作物种植地。10
    林地乔木覆盖且树冠盖度超过30%的土地,包括落叶阔叶林、常绿阔叶林、落叶针叶林、常绿针叶林、混交林,以及树冠盖度为10-30%的疏林地。20
    草地天然草本植被覆盖,且盖度大于10%的土地,包括草原、草甸、稀树草原、荒漠草原,以及城市人工草地等。30
    灌木地灌木覆盖且灌丛覆盖度高于30%的土地,包括山地灌丛、落叶和常绿灌丛,以及荒漠地区覆盖度高于10%的荒漠灌丛。40
    湿地位于陆地和水域的交界带,有浅层积水或土壤过湿的土地,多生长有沼生或湿生植物。包括内陆沼泽、湖泊沼泽、河流洪泛湿地、森林/灌木湿地、泥炭沼泽、红树林、盐沼等。50
    水体陆地范围液态水覆盖的区域,包括江河、湖泊、水库、坑塘等。60
    苔原寒带及高山环境下由地衣、苔藓、多年生耐寒草本和灌木植被覆盖的土地,包括灌丛苔原、禾本苔原、湿苔原、高寒苔原、裸地苔原等。70
    人造地表由人工建造活动形成的地表,包括城镇等各类居民地、工矿、交通设施等,不包括建设用地内部连片绿地和水体。80
    裸地植被覆盖度低于10%的自然覆盖土地,包括荒漠、沙地、砾石地、裸岩、盐碱地等。90
    冰川和永久积雪由永久积雪、冰川和冰盖覆盖的土地,包括高山地区永久积雪、冰川,以及极地冰盖等。100

    date

    string

    影像时间

    代码:

    1. //加载显示石河子市矢量边界数据
    2. var shz = pie.FeatureCollection("NGCC/CHINA_COUNTY_BOUNDARY")
    3. .filter(pie.Filter.eq("name", "石河子市"))
    4. .first()
    5. .geometry();
    6. Map.centerObject(shz, 9);
    7. Map.addLayer(shz, { color: "ff0000ff", fillColor: "00000000", width: 1 }, "石河子市");
    8. //加载显示全球地表覆盖GlobeLand30数据集并筛选耕地
    9. var lc = pie.ImageCollection('NGCC/GLOBELAND30')
    10. .filterDate("2019", "2021")
    11. .select("B1")
    12. .first()
    13. .eq(10)
    14. .clip(shz);
    15. Map.addLayer(lc, { uniqueValue: ["0", "1"], palette: ["f5fffa", "9acd32"] }, "耕地", false);
    16. //加载显示2020年7月石河子市Sentinel-2 L2A合成影像
    17. var img = pie.Image("user/15321576968/SHZ_S2_L2A");
    18. Map.addLayer(img.select(["B4", "B3", "B2"]), { min: 0, max: 3000 }, "石河子市S2_L2A合成影像", false);
    19. //计算影像NDVI、NDWI以及SPAD
    20. var green = img.select("B3");
    21. var red = img.select("B4");
    22. var re2 = img.select("B6");
    23. var re3 = img.select("B7");
    24. var nir = img.select("B8");
    25. var NDVI = (nir.subtract(red)).divide(nir.add(red)).rename("NDVI");
    26. var NDWI = (green.subtract(nir)).divide(green.add(nir)).rename("NDWI");
    27. var SPAD = (re3.divide(re2)).multiply(25.34).subtract(28.06).rename("SPAD");
    28. //根据敏感特征提取棉花并显示
    29. var cot_RGB = img.select(["B4", "B3", "B2"])
    30. .updateMask(lc.eq(1).and(nir.gt(4500)).and(NDVI.gt(0.5)));
    31. Map.addLayer(cot_RGB, { min: 0, max: 3000 }, "棉花_RGB")
    32. //掩膜获取棉花NDVI
    33. var cot = NDVI.updateMask(lc.eq(1).and(nir.gt(4500)).and(NDVI.gt(0.5)));
    34. //按不同阈值显示NDVI
    35. var cot_NDVI = cot.where(cot.gt(0.50).and(cot.lte(0.75)), 1)
    36. .where(cot.gt(0.75).and(cot.lte(0.80)), 2)
    37. .where(cot.gt(0.80).and(cot.lte(0.85)), 3)
    38. .where(cot.gt(0.85).and(cot.lte(0.90)), 4)
    39. .where(cot.gt(0.90).and(cot.lte(1.00)), 5);
    40. Map.addLayer(cot_NDVI, { min: 1, max: 5, palette: ["E64C00", "E6E600", "55FF00", "33C2FF", "0000FF"] }, "棉花-NDVI");
    41. //计算棉花NDVI最大值、最小值以及均值
    42. var NDVI_max = cot.reduceRegion(pie.Reducer.max(), shz, 30).get("NDVI").getInfo();
    43. print("NDVI最大值", NDVI_max);
    44. var NDVI_min = cot.reduceRegion(pie.Reducer.min(), shz, 30).get("NDVI").getInfo();
    45. print("NDVI最小值", NDVI_min);
    46. var NDVI_mean = cot.reduceRegion(pie.Reducer.mean(), shz, 30).get("NDVI").getInfo();
    47. print("NDVI平均值", NDVI_mean);
    48. //计算棉花耕地的面积,单位:平方千米
    49. var area = cot.pixelArea()
    50. .multiply(cot)
    51. .reduceRegion(pie.Reducer.sum(), shz, 30)
    52. .getInfo()
    53. .constant / 1000000;
    54. print("棉花种植面积", area);
    55. //掩膜获取棉花NDWI
    56. var wat = NDWI.updateMask(lc.eq(1).and(nir.gt(4500)).and(NDVI.gt(0.5)));
    57. //按不同阈值显示NDWI
    58. var water = wat.where(wat.gt(-1.00).and(wat.lte(-0.90)), 1)
    59. .where(wat.gt(-0.90).and(wat.lte(-0.85)), 2)
    60. .where(wat.gt(-0.85).and(wat.lte(-0.80)), 3)
    61. .where(wat.gt(-0.80).and(wat.lte(-0.70)), 4)
    62. .where(wat.gt(-0.70), 5);
    63. Map.addLayer(water, { min: 1, max: 5, palette: ["FF0000", "FFC800", "B6FF8F", "33C2FF", "0000FF"] }, "棉花-NDWI");
    64. //计算棉花NDWI最大值、最小值以及均值
    65. var NDWI_max = wat.reduceRegion(pie.Reducer.max(), shz, 30).get("NDWI").getInfo();
    66. print("NDWI最大值", NDWI_max);
    67. var NDWI_min = wat.reduceRegion(pie.Reducer.min(), shz, 30).get("NDWI").getInfo();
    68. print("NDWI最小值", NDWI_min);
    69. var NDWI_mean = wat.reduceRegion(pie.Reducer.mean(), shz, 30).get("NDWI").getInfo();
    70. print("NDWI平均值", NDWI_mean);
    71. //掩膜获取棉花SPAD
    72. var crp = SPAD.updateMask(lc.eq(1).and(nir.gt(4500)).and(NDVI.gt(0.5)));
    73. //按不同阈值显示SPAD
    74. var chlorophyll = crp.where(crp.gt(0.0).and(crp.lte(1.5)), 1)
    75. .where(crp.gt(1.5).and(crp.lte(2.5)), 2)
    76. .where(crp.gt(2.5).and(crp.lte(3.5)), 3)
    77. .where(crp.gt(3.5).and(crp.lte(4.5)), 4)
    78. .where(crp.gt(4.5), 5);
    79. Map.addLayer(crp, { min: 1, max: 5, palette: ["FFFF80", "71EB2F", "55FF00", "216E9E", "0C1078"] }, "叶绿素");
    80. //计算棉花SPAD最大值、最小值以及均值
    81. var SPAD_max = crp.reduceRegion(pie.Reducer.max(), shz, 30).get("SPAD").getInfo();
    82. print("叶绿素最大值", SPAD_max);
    83. var SPAD_min = crp.reduceRegion(pie.Reducer.min(), shz, 30).get("SPAD").getInfo();
    84. print("叶绿素最小值", SPAD_min);
    85. var SPAD_mean = crp.reduceRegion(pie.Reducer.mean(), shz, 30).get("SPAD").getInfo();
    86. print("叶绿素平均值", SPAD_mean);

    结果:

    NDVI最大值

    0.9621863183224476

    NDVI最小值

    0.5003236245954693

    NDVI平均值

    0.8635523634730466

    棉花种植面积

    56.16408868367092

    NDWI最大值

    -0.4891443167305236

    NDWI最小值

    -0.9020195960807839

    NDWI平均值

    -0.766581956295227

    叶绿素最大值

    17.378812949640288

    叶绿素最小值

    -4.081157757496737

    叶绿素平均值

    3.5509758941190572

     同样大家可以用画图工具进行自己所选定区域的分析,但是我们得先进行自己进行sentinel2的NDVI计算

     

  • 相关阅读:
    七、运算符
    uniapp插件自定义
    【东软实训Day2】用Java实现客户端与服务器交互
    ubuntu20.04桌面蓝屏问题解决
    (四)Redis 缓存应用、淘汰机制
    【TCP】粘包问题 以及 异常处理
    openGemini 社区人才培养计划:助力成长,培养新一代云原生数据库人才
    【C语言趣味教程】(5) 常量:字面常量 | 类型常量 | const 关键字 | const 的声明 | 程序中的只读概念 | const 保护机制 | 如何巧妙区分 “指针常量“ 和 “常量指针“
    【数据物语系列】 漫谈数据分布可视化分析
    基于PHP+MySQL毕业设计选题管理系统(含论文)
  • 原文地址:https://blog.csdn.net/qq_31988139/article/details/127029537