前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GEE 高阶——geeSharp模块平移锐化(Pan-sharpening)(SFIM、克-施密特、PCA等不同滤波方法)

GEE 高阶——geeSharp模块平移锐化(Pan-sharpening)(SFIM、克-施密特、PCA等不同滤波方法)

作者头像
此星光明
发布2024-02-29 10:11:16
1520
发布2024-02-29 10:11:16
举报

简介

锐化功能应用平移锐化算法,将一幅图像(如大地遥感卫星多波段图像)的光谱细节与另一幅图像(如大地遥感卫星全色波段)的空间细节相结合。全色锐化算法在结合空间和光谱细节的具体方式上各不相同,因此精度也各不相同。如果精度至关重要,用户应查阅已发表的文献,以选择最适合其应用的算法。

遥感影像中的Pan-sharpening(全色增强)是一种用于改善多光谱图像空间分辨率的处理技术。它结合了高空间分辨率的黑白全色图像(通常为Panchromatic Band)和低空间分辨率的彩色多光谱图像(通常为RGB三个波段)。

传统的遥感影像中,全色图像具有较高的空间分辨率但只包含灰度信息,而多光谱图像具有丰富的光谱信息但空间分辨率较低。Pan-sharpening技术的目的就是在不丢失光谱信息的前提下将全色信息与多光谱图像进行融合,从而获得既具有高空间分辨率又保留了光谱特征的图像。

Pan-sharpening技术通常包括以下几个步骤:

1. 准备输入数据:需要一个低空间分辨率的彩色多光谱图像和一个高空间分辨率的全色图像。

2. 预处理:对两幅图像进行预处理,包括去除噪声、减少图像伪迹等。

3. 图像配准:将全色图像和多光谱图像对齐,确保两幅图像的像素对应关系正确。

4. 高频分解:通过滤波器或变换方法对全色图像进行高频分解,得到全色图像的高频信息。

5. 低频融合:将低空间分辨率的多光谱图像进行插值或低通滤波,得到多光谱图像的低频信息。

6. 融合:将全色图像的高频信息与多光谱图像的低频信息进行融合,通常使用加权或变换方法,得到一幅新的图像。

7. 后处理:对融合后的图像进行一些调整,包括增强对比度、颜色校正等。

Pan-sharpening技术的应用广泛,包括农业、城市规划、环境监测等领域。例如,在农业中,利用Pan-sharpening技术可以获得高分辨率的遥感图像,用于监测农作物的生长情况、灾害损失等。在城市规划中,Pan-sharpening技术可以提供高分辨率的遥感图像,用于识别建筑物、道路网络等。在环境监测中,Pan-sharpening技术可以提供高分辨率的遥感图像,用于监测污染源、植被覆盖等。

总的来说,Pan-sharpening技术通过融合全色图像和多光谱图像,提高了遥感图像的空间分辨率,使得图像可以更好地应用于各种领域的研究和应用。

平移锐化包

要对图像进行平移锐化,可将分辨率较低的多光谱波段和分辨率较高的全色波段分成两幅图像,并将其传递给 geeSharp.sharpen 函数。例如

代码

代码语言:javascript
复制
var sharp = geeSharp.sharpen(img.select(["B4", "B3", "B2"]), img.select("B8");

Map.addLayer(sharp)

锐化前

锐化后

代码语言:javascript
复制
// 导入 geeSharp 模块
var geeSharp = require("users/aazuspan/geeSharp:geeSharp");

// 加载要锐化的大地遥感卫星 8 TOA 图像示例
var img = ee.Image("LANDSAT/LC08/C01/T1_TOA/LC08_047027_20160819");

// 选择要锐化的 30 m 光谱带
var ms = img.select(["B4", "B3", "B2"]);

// 选择 15 米全色波段
var pan = img.select(["B8"]);

// Pan-sharpen!转化
var sharpened = geeSharp.sharpen(ms, pan);

默认情况下,geeSharp 中的平锐化使用基于平滑滤波的强度调制 (SFIM) 算法,因为该算法速度快,且能产生一致的高质量效果。不过,您也可以尝试使用其他方法。您可以通过向锐化函数传递算法名称来实现这一点。

代码语言:javascript
复制
var method = "brovey";
var sharpened = geeSharp.sharpen(ms, pan, method);

大多数锐化函数只需要将未锐化的多光谱波段和高分辨率的全色波段作为输入,但有些算法(如 Gram-Schmidt)可能会接受其他参数。您可以在调用 sharpen 时在方法名称后添加这些参数。

代码语言:javascript
复制
//格兰-施密特算法可能需要额外的参数,具体取决于图像的大小
var method = "GS";
var geom = ee.Geometry.Point([-122.41676185101713, 47.26851080476613]).buffer(1000);
var scale = 30;
var maxPixels = 1e13;

var sharpened = geeSharp.sharpen(ms, pan, method, geom, scale, maxPixels);

请打印 geeSharp.methods,查看支持算法的完整列表,并参阅文档了解相关说明。

图像质量评估

图像质量指标测量参考图像与经过修改的图像(如平移锐化图像)之间的失真。

代码语言:javascript
复制
// 选择度量标准
var metric = "RMSE";
// 将未锐化的图像重新投影到锐化后的分辨率上
var reproj = unsharpened.resample("bicubic").reproject(sharpened.projection());
// 计算度量
var quality = geeSharp.quality(reproj, sharpened, metric);

警告

指标受空间分辨率的影响,因此在比较未锐化图像和平移锐化图像时,一定要先将未锐化图像重采样并重新投影到高分辨率,以确保比较的准确性!

大多数质量度量只需要一张未修改图像和一张已修改图像,并返回一个将波段名称映射到度量值的字典,但有些度量需要其他参数(如 ERGAS 需要高分辨率和低分辨率光谱),还有些度量返回单一图像值(如 RASE 和 ERGAS)。请打印 geeSharp.metrics,查看所支持度量的完整列表,并参阅文档说明

函数

SFIM geeSharp.sharpen(input, pan, "SFIM")

基于平滑滤波的强度调制(SFIM)是一种简单有效的平移锐化算法,可将高分辨率全色波段的空间细节直接注入低分辨率多光谱波段。然后使用全色波段的低通滤波副本,将融合产生的光谱失真降至最低。

SFIM 比更复杂的算法(GS 和 PCA)更简单、更快速,通常比其他简单算法(Brovey、IHS、HPFA 和 simpleMean)产生更好的结果,因此是 geeSharp 中推荐使用的算法(尽管我们鼓励进行实验)。

参数 输入(ee.Image): 要锐化的图像,通常是多波段图像。输入图像中不应包含平移波段。 pan(ee.图像): 要从中提取空间细节的单波段全色图像。 返回(ee.图像) 平移锐化后的图像。

克-施密特 geeSharp.sharpen(input, pan, "GS", geometry, scale, maxPixels)

革兰氏-施密特(GS)锐化使用革兰氏-施密特正交化过程创建线性独立的图像带。高分辨率的平移波段与第一个经过 GS 转换的波段对调,然后将过程反转,将各组成部分转换成高分辨率的多波段图像。

参数 输入(ee.Image): 要锐化的图像,通常是多波段图像。输入图像中不应包含平移波段。 pan(ee.图像): 用于提取空间细节的单波段全色图像。 geometry(ee.几何图形,默认值:空) 要计算图像统计数据的区域。锐化只能在此区域内精确进行。 比例(数值,默认值:空) 要计算图像统计数据的比例(以投影单位表示)。 maxPixels(数字,默认值:1000000000000) 计算图像统计时采样的最大像素数。 返回 (ee.Image) 平移锐化后的图像。

PCA geeSharp.sharpen(input, pan, "PCA", substitutePC, geometry, scale, maxPixels)

主成分分析 (PCA) 使用特征分解将相关的图像波段转换为不相关的主成分 (PC)。高分辨率的全色波段被替换为其中一个 PC(通常为 PC1),然后进行反变换,将各分量转换为高分辨率的多波段图像。

PCA 并不适用于所有场景,可能会产生不一致的结果。

参数 输入(ee.Image): 要锐化的图像,通常为多波段图像。输入图像中不应包含平移波段。 pan(ee.图像): 用于提取空间细节的单波段全色图像。 substitutePC(数字,默认值:1) 将与 pan 波段交换的主成分。除非有充分的理由,否则请使用 1。 geometry(ee.几何图形,默认值:空) 要计算图像统计数据的区域。锐化只会在此区域内精确进行。 比例(数值,默认值:空) 要计算图像统计信息的比例(以投影单位表示)。 maxPixels(数字,默认值:1000000000000) 计算图像统计时采样的最大像素数。 返回 (ee.Image) 平移锐化后的图像。

布罗维 geeSharp.sharpen(input, pan, "brovey", weights)

Brovey 锐化使用输入波段计算加权强度,并根据强度和全色波段变换输入图像以注入空间细节,从而生成高分辨率的多波段图像。

参数 输入(ee.Image): 要锐化的图像,通常是多波段图像。输入图像中不应包含平移波段。 pan(ee.图像): 用于提取空间细节的单波段全色图像。 权重(ee.列表,默认值:空) 计算图像强度时每个波段使用的相对权重。权重应以数字列表的形式提供,其中每个数字代表相应波段的权重(例如,三波段 Landsat 图像的权重可以是 ee.List([0.5,0.2,0.3]))。最佳权重取决于传感器。如果没有提供权重,则每个波段的权重相同。 返回 (ee.Image) 平移锐化后的图像。

IHS geeSharp.sharpen(input, pan, "IHS")

强度-色调-饱和度(IHS)锐化将红绿蓝图像分成强度、色调和饱和度三个部分。强度分量用高分辨率全色图像代替,各分量再转换回红绿蓝空间。请注意,由于 IHS 的工作原理,它仅限于 3 波段可见光图像。

参数 输入(ee.Image): 要锐化的 3 波段图像。为精确起见,这些波段必须代表红、绿、蓝三色。输入图像中不应包含平移波段。 pan(ee.图像): 提取空间细节的单波段全色图像。 返回(ee.图像) 平移锐化后的图像。

HPFA geeSharp.sharpen(input, pan, "HPFA", kernelWidth)

高通滤波器加法(HPFA)从高分辨率平移波段中提取空间细节,并将其线性添加到输入波段中,生成高分辨率多波段图像。

参数 输入(ee.Image): 要锐化的图像。输入图像中不应包含平移带。 pan(ee.图像): 用于提取空间细节的单波段全色图像。 kernelWidth(ee.数值,默认值:空) 用于提取泛色波段细节的方形高通滤波器内核宽度。除非有充分的理由,否则请留空。如果没有提供 kernelWidth,则将按照 Gangofner 等人 2008 年的方法计算,以获得最佳性能。 返回 (ee.Image) 平移锐化后的图像。

简单平均值 geeSharp.sharpen(input, pan, "simpleMean")

简单平均值锐化将每个波段计算为未锐化波段和平移波段的平均值,从而生成高分辨率的多波段图像。

参数 输入(ee.Image): 要锐化的图像,通常是多波段图像。输入图像中不应包含平移波段。 pan(ee.图像): 要从中提取空间细节的单波段全色图像。 返回(ee.图像) 平移锐化后的图像。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 平移锐化包
    • 代码
      • 锐化前
        • 锐化后
        • 图像质量评估
          • 警告
          • 函数
            • SFIM geeSharp.sharpen(input, pan, "SFIM")
              • 克-施密特 geeSharp.sharpen(input, pan, "GS", geometry, scale, maxPixels)
                • PCA geeSharp.sharpen(input, pan, "PCA", substitutePC, geometry, scale, maxPixels)
                  • 布罗维 geeSharp.sharpen(input, pan, "brovey", weights)
                    • IHS geeSharp.sharpen(input, pan, "IHS")
                      • HPFA geeSharp.sharpen(input, pan, "HPFA", kernelWidth)
                        • 简单平均值 geeSharp.sharpen(input, pan, "simpleMean")
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档