当前位置: 首页 > news >正文

从历史航拍图像中去除阴影

在光学遥感中,阴影是影响土地覆盖制图精度和分辨率的一个因素,无论是历史影像(黑白影像)还是近期影像(全彩影像)。阴影的产生取决于太阳光照(太阳方位角和天顶角)、相机视点(海拔)以及地形(坡度和坡向)。为了最大限度地减少阴影对土地覆盖制图的影响,需要探索处理阴影区域的方法,以提高植被覆盖制图的精度,并进一步进行变化检测。

在遥感领域,人们通常将此过程称为“地形校正”,但本文中的阴影去除与地形校正略有不同。地形校正旨在减少甚至消除地形对成像的影响。而阴影去除仅考虑阴影区域,并重新计算那些更接近“无”阴影状态的区域像素,因此一些带有较暗像素的丘陵地带仍然会“保留”。

基于计算机视觉方法的阴影去除迭代处理

阴影的来源

正如简介中提到的,阴影的来源如下:

  • 太阳光照(太阳方位角和天顶角)

测量几何:太阳天顶角(SZA)、观测天顶角(VZA)和相对方位角(RAA)

  • 相机视点(海拔)
  • 地形(坡度和坡向剖面)

地形和太阳角度造成的山体阴影

典型的遥感阴影去除方法

遥感影像中的典型方法是利用数字地形模型模拟坡度和坡向,从而确定阴影区域,然后对坡度和坡向进行归一化处理,进行明纳尔特校正。明纳尔特校正后,最后一步是估算与周围像素的系数,从而去除航空影像中的阴影。

使用 ArcGIS Pro 完成的示例

然而,模拟的太阳角度(方位角和天顶角)以及米纳尔特校正等参数可能无法有效地推导出并消除丘陵地形的阴影(如图所示)。因此,另一种方法是使用多源数据组合或熵估计(由谷歌开发)来消除阴影。

谷歌开发的熵估计方法

成像中的光照变化会增加观察到的纹理强度的熵,而成像中的纹理又会增加光照函数的熵。如果我们想要分离图像及其纹理和光照,可以通过最小化每个分量的熵来实现。最小化一个分量可以简单地将整个能量转移到其他分量。对光照熵的约束起到了正则化的作用,并赋予其平滑性。

采用基于非参数核的二次熵公式来估计纹理和光照密度。它可以有效地执行多尺度迭代优化算法,以最小化最终的能量函数。该方法特别适用于包含独特纹理图案(例如建筑物立面)或具有较大漫射区域的软阴影(例如云阴影)的航空图像。

图像分量分离的方法
将观测图像I(x,y)分离为其纹理分量R(x,y)和光照分量L(x,y)。

假设图像 I 可以表示为这两个分量的总和:

I(x,y)= L(x,y)+ R(x,y)。

纹理成分表示图像中的底层纹理图案,而照明成分表示整体照明条件。

熵公式:
熵是衡量随机变量不确定性或随机性的指标。作者观察到,任何光照变化都会增加观察到的纹理强度的多样性(熵),而纹理的存在又会增加光照函数的熵。因此,他们利用熵的概念来公式化图像成分的分离。

随机变量X的熵表示为H(X)。

在这种情况下,作者考虑了观察到的图像 I、纹理分量 R 和照明分量 L 的熵。他们指出,观察到的图像 I 的熵大于或等于其分量的熵:

H(I)≥H(R),H(L)

这个不等式表明,通过最小化纹理和照明成分的熵,可以降低观察到的图像的整体熵。

<此图来自 Kwatra, Vivek & Han, Mei & Dai, Shengyang. (2012)> 从左到右:原始图像、无阴影蒙版、去除阴影后的图像、计算出的阴影图、局部裁剪前后的放大图(红色)和放大图(橙色)。上行使用用户自定义蒙版,下行使用自动蒙版

多源数据融合

通过整合来自多个来源的数据,例如卫星图像和航拍照片,可以获得更多信息来去除阴影。不同的数据源可能捕捉场景的不同方面,而这些数据源的组合可以提供对阴影模式和特征的更全面的理解。多源数据融合可以整合互补信息,从而提高阴影去除的准确性。

<此图来自 Dare, Paul. (2005)> 左边是原始卫星图像,右边是处理后的图像

基于图像处理的阴影去除方法

目前已经有一些阴影去除算法可以用来追踪和去除这些阴影区域,例如“图像阴影去除器”。这个 Python 包使用了 Murali、Saritha 和 VK Govindan 的方法进行阴影检测和去除。

对于阴影检测,他们首先将 RGB 图像(波段)转换到 LAB 颜色空间,阴影像素在 L 和 B 通道中的值都很低。因此,如果 L < T1 且 B < T2(其中 T1 和 T2 为阈值),则将像素分类为阴影,并应用形态学运算来优化阴影蒙版。此后,他们仅保留尺寸 > T3 的阴影区域以消除错误分类。此外,对于阴影去除,每个识别出的阴影区域如下:

  • 计算阴影区域内的平均 R、G、B 值:Rin、Gin、Bin
  • 计算阴影区域外的平均 R、G、B 值:Rout、Gout、Bout
  • 计算每个通道的常数:

KR = Rout/Rin,KG = Gout/Gin,KB = Bout/Bin

  • 将阴影区域中的每个像素乘以相应的常数:

R' = KR * R
G' = KG * G
B' = KB * B

这会缩放阴影区域的颜色通道,使其与阴影外部的光照水平匹配。对于后期处理来说,阴影边缘附近的像素不如阴影内部像素暗。此外,将这些边缘像素乘以常数可能会导致它们过度照明,最终对边缘像素应用中值滤波以消除这种过度照明。

image_shadow_remover,阴影去除算法的实现,下载image_shadow_remover的源码_GitHub_帮酷

阴影去除算法的实现。通过创建…为 YalimD/image_shadow_remover 开发做出贡献。

github.com

上排为原图,下排为去除阴影后的图像(Ma On Shen 样本)

航拍图像(左为原始图像,右为后期处理图像),大帽山样本

航拍图像(左为原始图像,右为后期处理图像),马鞍山样本

总体而言,基于图像处理的方法效果显著,其结果优于基于遥感的方法,例如多源数据融合、C系数校正或Minnaert校正。然而,为了更好地解读历史航拍图像,以便更好地进行植被覆盖制图和长期变化检测,增强和改进阴影去除效果仍有很长的路要走。

http://www.dtcms.com/a/269919.html

相关文章:

  • maven 发布到中央仓库之 Ignore Licence-04
  • RabbitMQ第一章(MQ基础与RocketMQ使用手册)
  • 【踩坑实录】RabbitMQ 高并发异常“爆仓”事故还原与配置优化实战指南
  • Next.js 实战笔记 2.0:深入 App Router 高阶特性与布局解构
  • SQLShift 重磅更新:支持 SQL Server 存储过程转换至 GaussDB!
  • 从深度学习的角度看自动驾驶
  • 半连接海外云策略:混合架构下的全球业务协同方案
  • 香港站群服务器价格怎么样?
  • 保姆级tomcat的页面部署(静态)
  • 【世纪龙科技】汽车零部件检验虚拟实训室-数字赋能职业教育
  • PHP诞生30周年
  • 文件传输安全保障:探索Hash校验的不同方法
  • 使用阿里云/腾讯云安装完成mysql使用不了
  • JavaScript中的Request详解:掌握Fetch API与XMLHttpRequest
  • 单稳态触发器Multisim电路仿真——硬件工程师笔记
  • imx6ull-裸机学习实验11——高精度延时实验
  • 铝板矫平机:精密平整的关键设备
  • AI 在生活中的应用:深度解析与技术洞察
  • [2025CVPR]SGC-Net:开放词汇人机交互检测的分层粒度比较网络解析
  • Java教程:【程序调试技巧】入门
  • Leetcode 3604. Minimum Time to Reach Destination in Directed Graph
  • Windows安装docker+Dify本地部署
  • IB智慧公交系统的设计与实现
  • Python之--列表
  • 【AI大模型】PyTorch Autograd 实战
  • 测量认知革命:Deepoc大模型如何重构示波器的存在形态
  • Cursor配置DeepSeek调用MCP服务实现任务自动化
  • Flutter编译安卓应用时遇到的compileDebugJavaWithJavac和compileDebugKotlin版本不匹配的问题
  • GC4344:高性能音频 DAC 芯片解析
  • 【ASP.NET Core】深入理解Controller的工作机制