导言
地球观测(EO)数据以相对较低的成本提供高分辨率、大规模和频繁的空间数据,在环境科学中发挥着至关重要的作用。这些数据为全面的环境研究、持续监测和有效管理提供了支持。通过不同的光谱波段和指数,地球观测数据提供了对地球表面特征的宝贵见解,是研究物理过程、预测未来情景和为决策提供信息的模型的重要输入。
地球观测(EO)技术的进步正在扩大环境分析的能力,包括更广泛的光谱指数和更高的空间和时间分辨率,这使得详细的长期环境研究成为可能。然而,挑战依然存在,特别是对高精细 EO 数据的需求与大多数用户所面临的处理限制之间的差距。有效利用 EO 数据往往需要专业技能和昂贵的处理资源,包括数据清理和整合。虽然有一些预处理数据,但它们分散在不同的门户网站上,而且往往是针对特定主题的,需要领域专业知识才能访问和使用。要最大限度地发挥地球观测数据在解决环境和经济问题方面的潜力,就必须为地球观测数据整合提供标准化、可访问的解决方案。
地球观测数据处理的一大挑战是填补云层造成的空白。许多研究已经开发了一些方法(通常使用人工智能)来解决这些空白问题;然而,这些技术通常需要大量的计算资源,因此成本高昂且耗时。幸运的是,图像处理技术也能有效解决这一问题。在本文的其余部分,我将探讨可用的图像处理方法及其在 Python 中的实现。
填补空白的方法
本实验下载了英国南部一个小区域的陆地卫星陆地表面温度(LST)数据,时间跨度为 2010 年 1 月 1 日至 2023 年 12 月 31 日。应用质量掩码过滤掉了栅格数据中受扩张云、卷云、云和云影影响的区域。之后,我创建了一个季节集合,生成了一个代表冬季的栅格图像,如下所示:
上图显示,即使对卫星图像进行了时间聚合处理,数据中仍存在未填补的空白。要使该数据集可用,就必须填补这些空白。在接下来的章节中,我将讨论实现这一目标的各种可用技术。
卷积法
基于卷积的方法是在需要填充的区域直接应用卷积滤波器。通过调整内核(滤波器)大小和应用的操作,卷积可以帮助 "平滑 "或 "扩散 "邻近像素的信息到缺失区域。
def conv_mapping(x):
"""
When the 60th value (x[60]) of the filter array (the center of the window)
is null, replace it with the mean of the surrounding values.
"""
if np.isnan(x[60]) and not np.isnan(np.delete(x, 60)).all():
return np.nanmean(np.delete(x, 60))
else:
return x[60]
grid_smooth = ndimage.generic_filter(lst.values[0, ...],
function=conv_mapping,
footprint=np.ones((11,11)), mode='constant', cval=np.nan)
较小的滤波器不足以填补较大的缝隙,因此需要较大的滤波器--在这种情况下,需要 51 x 51 的滤波器来填补所有缝隙。然而,使用这么大的滤波器可能会影响结果的可靠性,因为它涉及到更大的填隙半径,可能会带来误差。
嵌套法
Telea 油画法:这种方法使用快速行进算法,将信息从受损区域的边界传播到填充区域。一般来说,这种方法速度更快,而且通常能为局部的小区域提供视觉上吸引人的效果。
def inpainting(data):
"""
Fills in missing values in the input data using inpainting techniques.
Parameters:
data (numpy.ndarray): Input array with potential NaN values.
Returns:
numpy.ndarray: Array with NaN values filled using inpainting,
or the original array if no NaNs are present.
"""
# Mask for NaN values
data_copy = np.copy(data)
na_data_mask = np.isnan(data_copy)
# If no NaN values, return data as is
if not na_data_mask.any():
return data
# Replace NaNs with the initial median value
initial_value = np.nanmedian(data_copy)
data_copy = data_copy.astype('float32')
data_copy[na_data_mask] = initial_value
# Inpainting to fill missing data
filled_data = cv.inpaint(data_copy, na_data_mask.astype('uint8'), 10, cv.INPAINT_TELEA)
return filled_data
纳维-斯托克斯涂色法:这种方法以流体动力学纳维-斯托克斯方程为基础,通过将线条和结构扩展到缺失区域来引导内绘。对于具有较强方向性结构的区域,这种方法通常能产生更加连贯的结果。
def inpainting(data):
"""
Fills in missing values in the input data using inpainting techniques.
Parameters:
data (numpy.ndarray): Input array with potential NaN values.
Returns:
numpy.ndarray: Array with NaN values filled using inpainting,
or the original array if no NaNs are present.
"""
# Mask for NaN values
data_copy = np.copy(data)
na_data_mask = np.isnan(data_copy)
# If no NaN values, return data as is
if not na_data_mask.any():
return data
# Replace NaNs with the initial median value
initial_value = np.nanmedian(data_copy)
data_copy = data_copy.astype('float32')
data_copy[na_data_mask] = initial_value
# Inpainting to fill missing data
filled_data = cv.inpaint(data_copy, na_data_mask.astype('uint8'), 10, cv.INPAINT_NS)
return filled_data
结论
栅格间隙填充是一种用于修复栅格图像中缺失或损坏数据的过程,尤其是那些来自卫星或航空图像的数据。栅格数据集中的缺口或 "无数据 "区域可能是由传感器故障、云层覆盖或数据传输错误等问题造成的,这可能会妨碍精确分析和可视化。填补空白技术旨在使用插值、机器学习或多时态图像融合等各种方法来估计和重建这些缺失值,从而生成连续可靠的数据。在环境监测、土地利用制图和气候研究等应用中,这一过程对于提高数据质量和确保更精确的分析至关重要。在当前的实验中,我应用了不同的图像处理技术,并将结果可视化。