You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python技术实现:将卫星HDF数据中的坏像素改为白色

解决HDF卫星数据绘图中坏像素颜色替换问题

核心方案

利用数据集自带的Flags字段(Bit4置位标记坏数据),将坏数据位置的温度值设为NaN,再通过自定义colormap把NaN对应的显示颜色设为白色,即可实现需求。

修改后的完整代码

import h5py
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs

filename = 'NmHRIR1H.19660626_14-57-45_564_005.hdf'

with h5py.File(filename) as f:  
    temp = f['HRIR-Temp'][:] - 273.15  # 转摄氏度
    lat = f['latitude'][:]
    lon = f['longitude'][:]
    flags = f['Flags'][:]  # 读取Flags字段

# 提取Bit4置位的坏数据掩码
bit4_mask = (flags & (1 << 4)) != 0
# 将坏数据位置设为NaN
temp[bit4_mask] = np.nan

fig = plt.figure(figsize=(8,8))
ax = plt.axes(projection=ccrs.Mercator())

extent = [124,139,12,27]
ax.set_extent(extent, crs=ccrs.PlateCarree())

ax.coastlines(resolution='10m', color='gold', linewidth=0.5)

# 自定义colormap,设置NaN对应的颜色为白色
cmap = plt.get_cmap('binary')
cmap.set_bad('white')

ax.pcolormesh(lon, lat, temp, cmap=cmap, vmin=-60, vmax=40, transform=ccrs.PlateCarree())

plt.show()

关键细节说明

  • 读取Flags字段后,通过位运算(flags & (1 << 4)) != 0精准筛选出Bit4置位的坏数据位置
  • 将坏数据设为NaN是因为matplotlib会对NaN值单独使用colormap的bad配色规则
  • 用cmap.set_bad('white')直接把坏值的显示颜色改成白色,替换默认的黑色
  • 注意:with语句会自动关闭HDF文件,原代码里的f.close()属于冗余操作,可直接省略

内容的提问来源于stack exchange,提问作者doomhaMwx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:35:21