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
相关产品推荐
相关产品推荐

