基于AIE平台的决策树算法下的贵州省黔东南州水稻提取

简介: 依据作物在不同物候期内卫星影像的光谱存在差异的特征和地形因子,可建立水稻提取算法,进行水稻提取。

决策树模型实现黔东南州水稻提取

依据作物在不同物候期内卫星影像的光谱存在差异的特征和地形因子,可建立水稻提取算法,进行水稻提取。

初始化环境

import aie

aie.Authenticate()
aie.Initialize()

指定需要检索的区域

feature_collection = aie.FeatureCollection('China_City') \
                        .filter(aie.Filter.eq('city', '黔东南苗族侗族自治州'))
region = feature_collection.geometry()

DEM处理


# 指定检索数据集,可设置检索的空间范围
elevation = aie.ImageCollection('JAXA_ALOS_AW3D30_V3_2') \
             .filterBounds(region)\
             .select(['DSM'])\
             .mosaic()\
             .clip(region)



map = aie.Map(
    center=feature_collection.getCenter(),
    height=800,
    zoom=7
)
vis_params = {
    'bands': 'DSM',
    'min': 100,
    'max': 2200,
    'palette': [
        '#0000ff', '#00ffff', '#ffff00', '#ff0000', '#ffffff'
    ]
}
map.addLayer(
    elevation,
    vis_params,
    'Elevation',
    bounds=elevation.getBounds()
)
map

黔东南州高程分布图

task = aie.Export.image.toAsset(elevation,'dem_qdn',30)
task.start()
## 坡度,下载aie还不能计算,我这里使用ArcGIS运算

slope = aie.Image('user/c7ec068793e54fccb9ba8692ed9d0b91').clip(region)


vis_params = {
    'min': 0,
    'max': 80,
    'palette': [
        '#0000ff', '#00ffff', '#ffff00', '#ff0000', '#ffffff'
    ]
}
map.addLayer(
    slope,
    vis_params,
    'slope',
    bounds=slope.getBounds()
)
map

黔东南州坡度分布图

这里说一下,我的谷歌浏览器上传影像数据,不知道为什么失败,我是用edge浏览器上传的,我把我的谷歌浏览器版本上传给了官方。

Landsat 8 数据处理

# 插秧期影像

# 指定检索数据集,可设置检索的空间和时间范围,以及属性过滤条件(如云量过滤等)
img1 = aie.ImageCollection('LANDSAT_LC08_C02_T1_L2') \
             .filterBounds(region) \
             .filterDate('2021-4-01', '2021-6-10') \
             .filter(aie.Filter.lte('eo:cloud_cover', 20.0))\
             .median()\
             .clip(region)
# print(img1.size().getInfo())

vis_params = {
    'bands': ['SR_B4', 'SR_B3', 'SR_B2'],
    'min': 8000,
    'max': 13000,
}
map.addLayer(
    img1,
    vis_params,
    'img1',
    bounds=img1.getBounds()
)
map
# 生长期影像


img2 = aie.ImageCollection('LANDSAT_LC08_C02_T1_L2') \
             .filterBounds(region) \
             .filterDate('2021-6-20', '2021-8-30') \
             .filter(aie.Filter.lte('eo:cloud_cover', 45.0))\


print(img2.size().getInfo())

img2 = img2.median().clip(region)


vis_params = {
    'bands': ['SR_B4', 'SR_B3', 'SR_B2'],
    'min': 8000,
    'max': 13000,
}
map.addLayer(
    img2,
    vis_params,
    'img2',
    bounds=img2.getBounds()
)
map

NDVI 计算

# NDVI扩大10,好比较
NDVI1 = img1.normalizedDifference(['SR_B5', 'SR_B4'])\
            .multiply(aie.Image.constant(10)).rename(['NDVI'])
NDVI2 = img2.normalizedDifference(['SR_B5', 'SR_B4'])\
            .multiply(aie.Image.constant(10)).rename(['NDVI'])
NDVI_diff = NDVI2.subtract(NDVI1).rename(['Diff'])
import numpy as np

scale = 1000

histogram = NDVI1.reduceRegion(aie.Reducer.histogram(2000), None, scale)
histogram_info = histogram.getInfo()
# print(histogram_info)


bucketKey = histogram_info['NDVI_range']
bucketValue = histogram_info['NDVI_counts']

key = np.array(bucketValue)
accSum = np.cumsum(key)
# print(accSum[20])
# print(accSum[-1])
accPercent = accSum / accSum[-1]
    
p2 = np.searchsorted(accPercent, 0.2)

min_ndvi = bucketKey[p2 + 1]
print('min_ndvi1:%f' % min_ndvi)

p98 = np.searchsorted(accPercent, 0.98)
max_ndvi = bucketKey[p98]
print('max_ndvi1:%f' % max_ndvi)

分析ndvi分布

提取规则

# 水稻提取规则集

## 水稻一般生长在海拔900m以下,坡度在20度以下
mask1 = elevation.lt(aie.Image.constant(900)).clip(region) 
mask2 = slope.lt(aie.Image.constant(20)).clip(region) 

## 水稻播种期NDVI一般在0.32至0.38,每个地方可能有差异
mask3 = NDVI1.gt(aie.Image.constant(3.2)).And(NDVI1.lt(aie.Image.constant(3.8)))

## 水稻生长期NDVI和播种期NDVI一般在-0.9至0.6,每个地方可能有差异
mask4 = NDVI_diff.gt(aie.Image.constant(-0.9)).And(NDVI_diff.lt(aie.Image.constant(0.6)))
rice = mask1.And(mask2).And(mask3).And(mask4)
mask_vis  = {
    'min': 0,
    'max': 1,
    'palette': ['#ffffff', '#008000']    # 0:白色, 1:绿色
}



map.addLayer(rice,mask_vis, 'wheat', bounds=region.getBounds())    # 绿色区域为水稻

水稻提取结果

task = aie.Export.image.toAsset(rice,'rice_extract',30)
task.start()

精度评价

这一部分在ArcGIS和Excel里面完成,查找统计年鉴可知黔东南州水稻种植面积S~1~=233 万亩,提取出来的面积S~2~= 252万亩,提取下来结果如表所示,总的来说还是比较粗糙,希望大家有更好的算法。
$$总体误差= \frac{\left | S2-S1 \right |}{S1} = \frac{\left | 252-233 \right |}{233}=8.1\%$$

模型构建器
提取面积

相关文章
|
13天前
|
算法
树的遍历算法有哪些?
不同的遍历算法适用于不同的应用场景。深度优先搜索常用于搜索、路径查找等问题;广度优先搜索则在图的最短路径、层次相关的问题中较为常用;而二叉搜索树的遍历在数据排序、查找等方面有重要应用。
22 2
|
1月前
|
机器学习/深度学习 算法 Python
探索机器学习中的决策树算法:从理论到实践
【10月更文挑战第5天】本文旨在通过浅显易懂的语言,带领读者了解并实现一个基础的决策树模型。我们将从决策树的基本概念出发,逐步深入其构建过程,包括特征选择、树的生成与剪枝等关键技术点,并以一个简单的例子演示如何用Python代码实现一个决策树分类器。文章不仅注重理论阐述,更侧重于实际操作,以期帮助初学者快速入门并在真实数据上应用这一算法。
|
18天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
2月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
93 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
1月前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
22 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
2月前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
56 2
|
2月前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
56 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
1月前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
25 0
|
1月前
|
存储 算法 Java
数据结构和算法--分段树
数据结构和算法--分段树
16 0
下一篇
无影云桌面