GEE入门篇|图像处理(三):阈值处理、掩膜和重新映射图像

news2025/1/11 10:19:25

阈值处理、掩膜和重新映射图像

        本章前一节讨论了如何使用波段运算来操作图像, 这些方法通过组合图像内的波段来创建新的连续值。 本期内容使用逻辑运算符对波段或索引值进行分类,以创建分类图像。

1.实现阈值

        实现阈值使用数字(阈值)和逻辑运算符来帮助我们将图像的可变性划分为类别。 例如,回想一下我们的 NDVI 地图。 大量植被的 NDVI 值接近 1,而非植被区域接近 0。如果我们想查看地图上哪些区域有植被,我们可以使用阈值将每个像素中的 NDVI 值概括为“无植被” ”或“植被”。 可以肯定的是,这是一个很大的简化,但可以帮助我们更好地理解地球表面的丰富变化。 例如,如果我们想要查看城市植被覆盖的比例,这种类型的分类可能很有用。 让我们创建美国华盛顿州西雅图附近的 Sentinel-2 地图, 在新脚本中输入以下代码(图 1)。

// Create an NDVI image using Sentinel 2.
var seaPoint = ee.Geometry.Point(-122.2040, 47.6221);
var seaImage = ee.ImageCollection('COPERNICUS/S2')
.filterBounds(seaPoint).filterDate('2020-08-15', '2020-10-01').first();
var seaNDVI = seaImage.normalizedDifference(['B8', 'B4']);
// And map it.
Map.centerObject(seaPoint, 10);
var vegPalette = ['red', 'white', 'green'];
Map.addLayer(seaNDVI,
  {
  min: -1,
  max: 1,
  palette: vegPalette
  },
  'NDVI Seattle');

图1 美国华盛顿州西雅图上空 Sentinel-2 图像的 NDVI 图像 

        检查图像, 我们可以看到,植被区域呈深绿色,无植被区域呈白色,水呈粉红色。 如果我们使用 Inspector 查询图像,我们可以看到公园和其他森林地区的 NDVI 大约超过 0.5。 因此,将 NDVI 值大于 0.5 的区域定义为森林覆盖区域,将低于该阈值的区域定义为非森林覆盖区域是有意义的。 现在,让我们将该值定义为阈值,并用它来确定植被区域的阈值。

// Implement a threshold.
var seaVeg = seaNDVI.gt(0.5);
// Map the threshold.
Map.addLayer(seaVeg,
{
  min: 0,
  max: 1,
  palette: ['white', 'green']
},
'Non-forest vs. Forest');

        gt 方法来自布尔运算符系列,也就是说,gt 是一个在每个像素中执行测试的函数,如果测试结果为 true,则返回值 1,否则返回 0。 这里,对于图像中的每个像素,它测试 NDVI 值是否大于 0.5。 当满足此条件时,seaVeg 层将获得值 1。当条件为 false 时,它将获得值 0(图 2)。使用 Inspector 工具探索这个新层。 如果单击绿色位置,则 NDVI 应大于 0.5。 如果单击白色像素,则 NDVI 值应等于或小于 0.5。该布尔族中的其他运算符包括小于 (lt)、小于或等于 (lte)、等于 (eq)、不等于 至 (neq),并且大于或等于 (gte) 及以上。 

图2 美国华盛顿州西雅图基于NDVI的阈值森林和非森林图像

2.使用 .where 构建复杂的分类

        对 NDVI 进行分类的二值图非常有用,但是,在某些情况下,您可能希望将图像拆分为两个以上类别。 Earth Engine 提供了一个工具,即 where 方法,可以根据测试结果有条件地评估每个像素内的 true 或 false。 这类似于其他语言中常见的 if 语句。 然而,为了在 Earth Engine 编程时执行此逻辑,我们避免使用 JavaScript if 语句。 重要的是,JavaScript 如果命令不是在 Google 的服务器上计算的,并且在运行代码时可能会产生严重的问题,实际上,服务器会尝试将所有要执行的信息发送到您自己计算机的浏览器,而浏览器对于如此庞大的数据量来说是非常不足的。 任务。 相反,我们使用 where 子句来实现条件逻辑。
        假设我们不只是将 NDVI 中的森林区域与非森林区域分开,而是希望将图像分为可能的水域、非森林区域和森林区域。 我们可以使用 where 和阈值 -0.1 和 0.5。 我们将首先使用 ee.Image 创建图像。 然后,我们裁剪新图像,使其覆盖与 seaNDVI 图层相同的区域(图 3)。

// Implement .where.
// Create a starting image with all values = 1.
var seaWhere = ee.Image(1)
// Use clip to constrain the size of the new image..clip(seaNDVI.geometry());
// Make all NDVI values less than -0.1 equal 0.
seaWhere = seaWhere.where(seaNDVI.lte(-0.1), 0);
// Make all NDVI values greater than 0.5 equal 2.
seaWhere = seaWhere.where(seaNDVI.gte(0.5), 2);
// Map our layer that has been divided into three classes.
Map.addLayer(seaWhere,
{
  min: 0,
  max: 2,
  palette: ['blue', 'white', 'green']
},
'Water, Non-forest, Forest');

        关于这段代码,有一些您以前可能没有见过的有趣的事情需要注意。 首先,我们没有为每个 where 调用定义一个新变量。 因此,我们可以执行许多 where 调用,而无需每次都创建新变量并需要跟踪它们。 其次,当我们创建起始图像时,我们将值设置为 1。这意味着我们可以轻松地分别使用一个 where 子句设置底部和顶部值。 最后,虽然我们在这里没有这样做,但我们可以使用 and 和 or 组合多个 where 子句。 例如,我们可以使用seaNDVI.gte(−0.1).and(seaNDVI.lt(0.5))来识别具有中等水平的NDVI的像素。 

图3 美国华盛顿州西雅图基于NDVI阈值的水、森林和非森林图像

3.屏蔽图像中的特定值

        屏蔽图像是一种将图像的特定区域(被掩膜覆盖的区域)从显示或分析中删除的技术。Earth Engine允许您查看当前掩码和更新掩膜(图4)。        

// Implement masking.
// View the seaVeg layer's current mask.
Map.centerObject(seaPoint, 9);
Map.addLayer(seaVeg.mask(), {}, 'seaVeg Mask');

        您可以使用Inspector来查看黑色区域被遮盖,而白色区域的常量值为 1。这意味着数据值仅在白色区域内被映射并可用于分析。 现在假设我们只想在森林中显示和进行分析地区。 让我们从图像中屏蔽掉非森林区域,首先,我们使用 equals (eq) 方法创建一个二进制掩膜。

// Create a binary mask of non-forest.
var vegMask = seaVeg.eq(1);

        在制作掩膜时,您将想要查看和分析的值设置为大于 0 的数字。其想法是设置不需要的值以获得 0 的值。具有 0 值的像素被遮盖掉(实际上,它们 一旦我们使用 updateMask 方法将这些值添加到现有掩膜中,就根本不会出现在屏幕上。 

图 4 我们之前创建的 seaVeg 层的现有掩模

// Update the seaVeg mask with the non-forest mask.
var maskedVeg = seaVeg.updateMask(vegMask);
// Map the updated Veg layer
Map.addLayer(maskedVeg,
{
    min: 0,
    max: 1,
    palette: ['green']
},
'Masked Forest Layer');

        关闭所有其他层,您可以看到 maskedVeg 图层现在如何遮盖所有非森林区域(图 5)。映射该图层的更新蒙版,您可以看到这是为什么(图 6)。 

图 5 更新后的掩膜现在仅显示森林区域, 非森林地区是被遮蔽和透明的

图 6 更新后的掩模,非森林区域现在也被遮盖(图像的黑色区域)

// Map the updated mask
Map.addLayer(maskedVeg.mask(), {}, 'maskedVeg Mask');

3.重新映射图像中的值

        重新映射采用图像中的特定值并为它们分配不同的值。这对于分类数据集特别有用,让我们使用 remap 方法来更改 seaWhere 图层的值。请注意,由于我们将中间值更改为最大,因此我们还需要调整调色板。

// Remap the values from the seaWhere layer.
var seaRemap = seaWhere.remap([0, 1, 2], // Existing values.
[9, 11, 10]); // Remapped values.
Map.addLayer(seaRemap,
{
  min: 9,
  max: 11,
  palette: ['blue', 'green', 'white']
},
'Remapped Values');

        使用检查器比较我们原始的seaWhere(显示为Water、Non-Forest、Forest)和seaRemap(标记为“Remapped Values”)之间的值。 单击森林区域,您应该看到重新映射值应为 10,而不是 2(图 7)。 

 图 7  对于森林区域,重新映射的图层的值为 10,而原始图层的值为 2,您的Inspector中可能有更多图层

【代码链接】https://code.earthengine.google.com/496370d6752d56e39dbfe6ea10ac718b

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1493623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java实现读取转码写入ES构建检索PDF等文档全栈流程

背景 之前已简单使用ES及Kibana和在线转Base64工具实现了检索文档的demo,并已实现WebHook的搭建和触发流程接口。 实现读取本地文件入库ES 总体思路:基于前面已经搭建的WebHook触发流程,接收到push更新消息之后,使用本地的git工…

【QT】布局介绍

布局 水平布局垂直布局网格布局 widget的应用 将对应的按钮,label放入到widget中 水平弹簧和垂直弹簧 使用弹簧来对他们布局 设置弹簧属性: 最后结果——页面中的内容和随页面的缩小和方法自适应。 水平布局和垂直布局只能针对一行一列 将用户密码放入…

第七篇 - 人工智能与机器学习技术VS量测(Measurement)- 我为什么要翻译介绍美国人工智能科技巨头IAB公司 - 它是如何赋能数字化营销生态的?

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先后为700多家媒…

2024年字节跳动+京东+美团面试总结,程序员经验分享

现在的IT行业竞争压力越来越大,尤其是Android开发行业。而很多Android程序员却每天都在重复CRUD,原地徘徊! 今年年初,你就想改变现状,于是在网上刷了大量面试题,强行记下之后,开始参加面试!但是…

AI日报:这种病毒从生成式AI工具中窃取您的数据

文章目录 人工智能计算机病毒蠕虫像细菌一样传播病毒测试 人工智能计算机病毒 一组研究人员创造了一种能够利用生成人工智能系统的计算机病毒,包括Gemini Pro和GPT-4驱动的ChatGPT版本。 Morris II是一种蠕虫,它操纵生成的人工智能模型来执行恶意任务&…

AndroidStudio连不上adb报错ADB Connection Error

之前笔者一直通过AndroidStudio来看日志,也一直用的一套自己的SDK,用了好几年了。 但是突然有一天,AndroidStudio启动后就弹出警告窗:ADB Connection Error,如下: 在Event Log面板还持续性的输出&#x…

前端工具网站合集(持续更新)

综合类网站 那些免费的砖 统计推荐免费工具网站 那些免费的砖 - 优雅地白嫖各种免费资源 (thosefree.com)https://www.thosefree.com/ CSS样式网站 毒蘑菇-配色 CSS 配色,阴影网站 一个好用的配色网站! 毒蘑菇 - 配色 (dumogu.top)https://color.dumogu.top/ …

工艺美术设计VR仿真教学软件为教师提供更丰富的教学资源

随着科技的飞速发展,我们的生活正在经历着前所未有的变革。其中,虚拟现实(VR)技术的出现,不仅改变了我们的娱乐方式,更在教育领域中开辟出一片新的天地。今天,我们就来探讨一下VR美术绘画教学平台带来的价值。 首先&am…

day14_用户前台项目环境搭建(首页接口开发,分类接口开发,网关服务搭建,Redis缓存,Spring Cache)

文章目录 1 尚品甄选H5介绍1.1 业务功能介绍1.2 系统架构1.3 前端H5开发说明 2 搭建项目环境2.1 项目结构说明2.2 模块依赖说明2.3 环境说明2.4 项目模块创建2.4.1 spzx-parent2.4.2 spzx-service2.4.43 service-product 2.5 导入接口文档 3 首页接口开发3.1 需求分析3.3 接口开…

[最佳实践] Windows上构建一个和Linux类似的Terminal

感谢大佬批评指正,现已更新 preview Target:致力打造最赏心悦目Window下的终端,同时能够很接近Linux的使用习惯 key word:windows终端美化 windows terminal windows powershell 类似Linux下的Window终端 Window也能用ll windows…

让Excel 365 Excel 2021快速转化为生产力,创造价值!

文章目录 每日一句正能量前言关键点内容简介作者简介读者赞誉后记购买链接赠书活动 每日一句正能量 人的一生,好不好只有自己知道,乐不乐只有自己明白。快乐是一种心情,一种自然、积极向上的心态。在平凡之中寻求快乐,在磨难之中寻…

AI智能伪原创工具:原创文章自动生成的革新

随着人工智能技术的迅猛发展,AI智能伪原创工具正逐渐改变着我们的日常生活和工作方式。其中,原创文章自动生成技术的出现,为内容创作者、企业和学术界带来了全新的可能性和便利。这项技术的引入不仅提高了内容创作的效率,还为用户…

【查找算法】插值查找

一:插值查找 代码公式:int mid left (right - left) * (findVal - arr[left]) / (arr[right] - arr[left]); 1.1 基本概念 插值查找,有序表的一种查找方式。插值查找是根据查找关键字与查找表中最大最小记录关键字比较后的查找方法。插值…

什么样的跨网数据交换产品 能实现数据摆渡和数据同步?

首先,为什么会产生跨网数据摆渡的需求和场景呢?那是因为做了网络隔离,企业进行网络隔离的原因主要包括以下几点: 1、提高安全性:网络隔离是防止未授权访问和网络攻击的有效手段。通过将网络划分为多个独立的子网&…

Docker 快速入门实操教程(完结)

Docker 快速入门实操教程(完结) Docker,启动! 如果安装好Docker不知道怎么使用,不理解各个名词的概念,不太了解各个功能的用途,这篇文章应该会对你有帮助。 前置条件:已经安装Doc…

flutter 使用webview

背景: 一般都有使用webview加载网页的需求,比如加载隐私协议、用户协议等。 如何做: 当然,我们自己不用封装轮子,在pub.dev上有成熟的轮子:webview_flutter 首先,将依赖导入,在pub…

Appium系列(1)安装启动Appium

Appium环境准备 Mac电脑jdk环境AndroidSDK环境node>8.1.0(最好用最新版本) 安装命令 npm i -g appium安装不成功请检查node 版本是否正确 安装成功命令行输入appium回车查看 安装驱动程序 1、先检查当前驱动情况 通过 appium driver list 进行…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:PinchGesture)

用于触发捏合手势,触发捏合手势的最少手指为2指,最大为5指,最小识别距离为5vp。 说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 接口 PinchGesture(value?: { finge…

刷题笔记day27-回溯算法3

39. 组合总和 var path []int var tmp []int var result [][]int// 还是需要去重复,题目中要求的是至少一个数字备选的数量不同。 // 所以需要剪枝操作,右边的要比左边的> func combinationSum(candidates []int, target int) [][]int {// 组合问题pa…

淘宝下单接口的解析|跨境电商中淘宝代购功能实现的API接口接入详解【附代码实例】

淘宝接口解析是指通过淘宝提供的API(Application Programming Interface)来实现程序与淘宝平台的数据交互和功能调用。通过淘宝接口,用户可以实现商品信息获取、订单管理、物流跟踪等功能。 在使用淘宝接口前,首先需要注册成为阿…