GEE:Sobel算子卷积

作者:CSDN @ _养乐多_

本文将深入探讨边缘检测中的一个经典算法,即Sobel算子卷积。我们将介绍该算法的基本原理,并演示如何在Google Earth Engine中应用Sobel算子进行图像卷积操作。并以试验区NDVI为例子,研究区真彩色影像、NDVI图像以及Sobel卷积结果如下所示,

在这里插入图片描述


文章目录

      • 一、Sobel算子卷积
      • 二、完整代码
      • 三、代码链接


一、Sobel算子卷积

Sobel算子卷积的卷积核如下所示,详细介绍介绍参考《遥感数字图像处理教程(第三版),韦玉春,汤国安…》。

            [0, 0, 24, 24, 0, 0, 0],[0, 0, 24, 24, 0, 0, 0],[0, 0, 24, 24, 0, 0, 0],[0, 0, 24, 24, 24, 24, 24],[0, 0, 24, 24, 24, 24, 24],[0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0]

函数详解请看博客《GEE:梯度卷积》。

二、完整代码

// 设置感兴趣区域(ROI)并可视化
var roi = geometry; // 定义感兴趣区域
var roiImage = ee.Image().toByte().paint({ featureCollection: roi, color: 'red', width: 1 });
Map.addLayer(roiImage, { palette: 'red' }, '感兴趣区域'); // 在地图上添加感兴趣区域图层
Map.centerObject(roi, 11); // 将地图中心设置为感兴趣区域的中心位置// 获取LANDSAT遥感影像数据集
var dataset = ee.ImageCollection('LANDSAT/LC09/C02/T1_L2').filterDate('2022-01-01', '2022-12-31'); // 筛选日期范围// 应用缩放因子
function applyScaleFactors(image) {var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2); // 光学波段缩放var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0); // 热红外波段缩放return image.addBands(opticalBands, null, true).addBands(thermalBands, null, true);
}dataset = dataset.map(applyScaleFactors);// 从数据集中选择波段创建影像
var imageYLD = dataset.select(['SR_B5', 'SR_B4', 'SR_B3', 'SR_B2']).filterBounds(roi).median().clip(roi);// 可视化真彩色影像
var visualization = {bands: ['SR_B4', 'SR_B3', 'SR_B2'],min: 0.0,max: 0.3,
};Map.addLayer(imageYLD, visualization, '真彩色 (432)');// 计算归一化植被指数(NDVI)
var ndvi = imageYLD.normalizedDifference(['SR_B5', 'SR_B4']);
var visParam = {palette:'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,' +'3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'
};
Map.addLayer(ndvi, visParam, 'NDVI');// 定义滤波窗口大小
var windowSize = 3;// Roberts算子卷积函数
function RobertsConvolve(image) {var Roberts_Kernel = ee.Kernel.fixed(7, 7,[[0, 0, 12, 0, 0, 0, 0],[0, 0, 12, 0, 0, 0, 0],[0, 0, 12, 0, 0, 0, 0],[0, 0, 12, 12, 12, 12, 12],[0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0]]); // 定义Roberts算子卷积核return image.convolve(Roberts_Kernel);
};// 应用Roberts算子卷积
var convolvedRobertsImage = RobertsConvolve(ndvi);// 定义自适应可视化函数
function adaptiveVisualization(image, layerName, roi, visualSwitch, scale, palette) {// 计算影像的最小值和最大值var imageMin = image.reduceRegion({reducer: ee.Reducer.min(),geometry: roi,scale: scale,crs: "EPSG:4326",bestEffort: true,tileScale: 5});var imageMax = image.reduceRegion({reducer: ee.Reducer.max(),geometry: roi,scale: scale,crs: "EPSG:4326",bestEffort: true,tileScale: 5});// 打印最小值和最大值// print(imageMin, imageMax);// 影像可视化var viz = {palette: palette,min: imageMin.getNumber('nd').getInfo(),max: imageMax.getNumber('nd').getInfo()};Map.addLayer(image, viz, layerName, visualSwitch);
}// 使用自适应可视化函数
adaptiveVisualization(convolvedRobertsImage, 'Roberts', roi, false, 30, ['black', 'blue', 'purple', 'cyan', 'green', 'yellow', 'red']);// Sobel算子卷积函数
function SobelConvolve(image) {var Sobel_Kernel = ee.Kernel.fixed(7, 7,[[0, 0, 24, 24, 0, 0, 0],[0, 0, 24, 24, 0, 0, 0],[0, 0, 24, 24, 0, 0, 0],[0, 0, 24, 24, 24, 24, 24],[0, 0, 24, 24, 24, 24, 24],[0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0, 0]]); // 定义Sobel算子卷积核return image.convolve(Sobel_Kernel);
};// 应用Roberts算子卷积
var convolvedSobelImage = SobelConvolve(ndvi);// 使用自适应可视化函数
adaptiveVisualization(convolvedSobelImage, 'Sobel', roi, true, 30, ['black', 'blue', 'purple', 'cyan', 'green', 'yellow', 'red']);

三、代码链接

https://code.earthengine.google.com/eabd1fa0a43348b17f47fbcc11f4ff1a?noload=true

声明:
本人作为一名作者,非常重视自己的作品和知识产权。在此声明,本人的所有原创文章均受版权法保护,未经本人授权,任何人不得擅自公开发布。
本人的文章已经在一些知名平台进行了付费发布,希望各位读者能够尊重知识产权,不要进行侵权行为。任何未经本人授权而将付费文章免费或者付费(包含商用)发布在互联网上的行为,都将视为侵犯本人的版权,本人保留追究法律责任的权利。
谢谢各位读者对本人文章的关注和支持!

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

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

相关文章

【GIT】.gitignore 在忽略目录中放开某目录

示例:忽略build下面的所有目录,只放开build/ast2500-default/workspace/recipes-phosphor/ 目录 .gitignore 实现文件代码 # 忽略 build 目录下的所有目录 # 并放开build/ast2500-default/workspace/recipes-phosphor/ build/* !build/ast2500-defaul…

轮询分区的设置

终于可以写MPI了,没想到,刚开始就当头一棒,我按照之前的配置MPI环境,配置完成就报错 好家伙,仔细检查了每一个步骤都没找到问题,上网搜索了一些解决方案,也没有解决。所幸,在配置MPI…

关于前端学习的思考-vertical-align的用法

先摆结论:vertical-align这里的top线,bottom线,middle线,baseline线是由最大宽度和最大高度的行内元素或行内块元素决定的。 按照惯例,先摆三个行内元素。 1、改变第一个盒子,vertical-align:to…

主机装ubuntu双系统,无线网络问题

微星主板开机按del进入bios,setting里设置启动优先级 启动盘制作 350G 三个分区: 1.EFI系统分区,2G,逻辑分区,空间起始位置 2.Ext4,/,根目录,120G,主分区&#xff0c…

Java异常详解大全(2023版)

Java异常详解 异常分类1.Throwable2. Error(错误)3. Exception(异常)3.1 运行时异常 RuntimeException3.2 编译时异常(受检查异常)ClassNotFoundException + IOException4.常见的运行时异常5.异常如何处理Java 的异常处理是通过 5 个关键词来实现的:try、catch、throw、…

Uber Go 语言编码规范

uber-go/guide 的中文翻译 English 文档链接 Uber Go 语言编码规范 Uber 是一家美国硅谷的科技公司,也是 Go 语言的早期 adopter。其开源了很多 golang 项目,诸如被 Gopher 圈熟知的 zap、jaeger 等。2018 年年末 Uber 将内部的 Go 风格规范 开源到 G…

人工智能学习6(贝叶斯实现简单的评论情感分析)

编译工具PyCharm 文章目录 编译工具PyCharm 文本分析与表示实现方式:文本表示方法文本相似度计算LDA主题模型 朴素贝叶斯算法应用:评论情感分析,工具评论分析是好评还是差评获取数据加载停用词内容标准化(将每一句话划分成一个个的…

四通道轨-轨运算芯片 D8054,外围应用简便,低功耗2.3mA (典型值)运放供电电流

D8054是一款四通道轨-轨运算放大器,外围应用简便,价格低廉。封装形式为SOP14,TSSOP14, SOP16, TSSOP16。 主要特点: ● 轨-轨输出,输出失调2mV (典型值) ● 高速250MHz,-3dB带…

HNU-电路与电子学-2018期末A卷(含标准解析)

【写在前面】 电路与电子学好像是从2020级开设的课程,故实际上目前只有2020与2021两个年级考过期末考试。 这门课程主要由所谓的“数电”与“模电”组成。而且先学的“模电”后学的“”数电,故期中考试主要以“模电”为主,期末考试主要以“数…

“上云”还是“下云”?探云计算的下一站未来!

引言 10 月 27 日,X(原Twitter)工程技术发布帖子称,在过去的一年里,技术团队优化了 X 的云服务使用方式,着手将更多工作负载迁往本地基础设施。这一转变使 X 每月的云成本降低了 60%。所有媒体、Blob 存储均…

[全志]更新bootlogo分区数据从而更新bootlogo

一、需求 在不进行镜像烧录的情况下,通过启动项或脚本将已存在于主板的bootlogo文件更新到bootlogo分区中,从而实现bootlogo的更新 二、操作 1、在主板上查找bootlogo文件路径 find -name bootlogo* 实机效果: 2、进入文件夹路径 cd ./d…

视频剪辑方法:AI智剪高效稳定,视频批量处理有技巧

随着社交媒体的兴起和视频制作工具的普及,视频剪辑已经成为一项重要的工作。然而对于许多非专业创作者来说,视频剪辑可能是一项困难的任务。所幸AI智剪提供了一种高效稳定的视频剪辑方法,使得视频批量处理变得更加简单。使用AI智剪可以大大节…

派对的最大快乐值

与其明天开始,不如现在行动! 文章目录 派对的最大快乐值 💎总结 派对的最大快乐值 题目 员工信息的定义如下: 公司的每个员工都符合 Employee 类的描述。整个公司的人员结构可以看作是一棵标准的、没有环的多叉树。树的头节点是公…

蓝桥杯物联网竞赛_STM32L071_10_温度传感器扩展模块

原理图: 温度传感器原理图: 其中芯片可以通过SCL和SDA引脚通过I2C通信向温度传感器指定地址获取温度的模拟量 再利用公式将模拟量转换成相应温度即可 实验板接口原理图: 模拟量转相应温度公式: CubMx配置: Keil配置&…

Ribbon 负载均衡

1、负载均衡整体流程 2、负载均衡流程逐级跟踪运行 (1) LoadBlanced 注解可以使LoadBalancerInterceptor拦截到; (2)LoadBalancerInterceptor 实现了ClientHttpRequestInterceptor接口; (3)ClientHttpRequestInterceptor接口释义如下; (4)int…

金和OA saveAsOtherFormatServlet接口任意文件上传漏洞复现 [附POC]

文章目录 金和OA saveAsOtherFormatServlet接口任意文件上传漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 金和OA saveAsOtherFormatServlet接口任意文件上传漏洞复现 [附POC] 0x01 前言 免责…

TIA博途中快速修改变量值的方法和技巧

TIA博途中快速修改变量值的方法和技巧 如下图所示,正常情况下选中该变量,然后右击选择“修改”—然后选择修改为0或1, 快速调试技巧: 如下图所示,鼠标选中该变量上方的“FALSE”,直接双击,系统会提示是否进行切换该变量的值, 点击“是”即可切换变量的值, 如下图所示,…

第三期丨酷雷曼无人机技能培训

第3期无人机技能提升培训 2023年9月15日,第三期酷雷曼合作商无人机技能提升培训圆满举办,数十位来自各地的合作商齐聚北京,在酷雷曼总部的帮助下学习无人机理论及实操知识,并成功取得权威认可的无人机飞行执照。本届培训会的新晋…

发明无止境:简单的螺丝钉也有复杂悠久的专利故事?

今天跟大家分享一个螺丝钉专利的故事。 我们从人类开始就有了连接和固定的需求。 最早期的时候,人类就想到了连接和固定最简单的办法就是用钉子把两个物体连接在一起,最早的时候用的是木钉或者楔子。用木钉和楔子的方式简单粗暴,成本也非常的…

【Linux】more命令使用

more 是linux的一个命令,类似cat命令,会以一页一页的显示,方便使用者逐页阅读。 More是一个过滤器,用于一次一屏地对文本进行分页。这个版本特别原始。用户应该意识到,less(1)提供了更多的模拟…