MetPy匹配GOES16反射亮度

时间:2019-01-09 12:39:21

标签: python numpy matplotlib metpy

在用MetPy创建GOES16图像时,我在通过CMI06匹配CMI01到CMI01上的颜色表/亮度时遇到问题。我尝试使用股票颜色表并使用随机vmin / vmax尝试获得匹配。我还尝试过使用定制的颜色表,甚至尝试将min_reflectance_factor和&max_reflectance_factor之类的内容集成为vmin / vmax值。

也许我正在使这种方式变得更加困难?有什么我想念的吗?以下是有助于创建当前图像输出的代码摘录:

grayscale = {"colors": [(0,0,0),(0,0,0),(255,255,255),(255,255,255)], "position": [0, 0.0909, 0.74242, 1]} CMI_C02 = {"name": "C02", "commonName": "Visible Red Band", "grayscale": True, "baseDir": "visRed", "colorMap": grayscale}

dat = data.metpy.parse_cf('CMI_'+singleChannel['name']) proj = dat.metpy.cartopy_crs

maxConcat = "max_reflectance_factor_"+singleChannel['name'] vmax = data[maxConcat]

sat = ax.pcolormesh(x, y, dat, cmap=make_cmap(singleChannel['colorMap']['colors'], position=singleChannel['colorMap']['position'], bit=True), transform=proj, vmin=0, vmax=vmax)

make_cmap是我发现的一种方便的花花公子方法,有助于创建自定义颜色表。该代码是多处理过程的一部分,因此singleChannel实际上是CMI_C02

作为参考,第一张图片来自DuPage学院,第二张图片是我的输出...

enter image description here enter image description here 任何帮助/指导将不胜感激!

2 个答案:

答案 0 :(得分:1)

我相信您的问题是,因为对DuPage学院上的数据进行了非线性转换,在本例中为平方根(sqrt)。正如GOES ABI documentation.中提到的那样,过去已将其应用于GOES图像,我认为这就是CoD要做的。

这是一个可以与是否使用sqrt进行比较的脚本:

import cartopy.feature as cfeature
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
import metpy
import numpy as np
from siphon.catalog import TDSCatalog

# Trying to find the most recent image from around ~18Z
cat = TDSCatalog('http://thredds.ucar.edu/thredds/catalog/satellite/goes16'
                 '/GOES16/CONUS/Channel02/current/catalog.xml')
best_time = datetime.utcnow().replace(hour=18, minute=0, second=0, microsecond=0)
if best_time > datetime.utcnow():
    best_time -= timedelta(days=1)
ds = cat.datasets.filter_time_nearest(best_time)

# Open with xarray and pull apart with some help using MetPy
data = ds.remote_access(use_xarray=True)
img_data = data.metpy.parse_cf('Sectorized_CMI')
x = img_data.metpy.x
y = img_data.metpy.y

# Create a two panel figure: one with no enhancement, one using sqrt()
fig = plt.figure(figsize=(10, 15))
for panel, func in enumerate([None, np.sqrt]):
    if func is not None:
        plot_data = func(img_data)
        title = 'Sqrt Enhancement'
    else:
        plot_data = img_data
        title = 'No Enhancement'

    ax = fig.add_subplot(2, 1, panel + 1, projection=img_data.metpy.cartopy_crs)
    ax.imshow(plot_data, extent=(x[0], x[-1], y[-1], y[0]),
              cmap='Greys_r', origin='upper')
    ax.add_feature(cfeature.COASTLINE, edgecolor='cyan')
    ax.add_feature(cfeature.BORDERS, edgecolor='cyan')
    ax.add_feature(cfeature.STATES, edgecolor='cyan')
    ax.set_title(title)

这将导致:

Enhancement Comparison Image

应用sqrt转换的下部图像似乎与CoD图像非常匹配。

答案 1 :(得分:0)

在对一些气象学家进行投票之后,我最终制作了一张介于两幅图像之间的色表,因为人们普遍认为他们认为我的版本太暗而标准太浅。

我仍然将vmaxvmin用于pcolormesh(),并将grayscale对象简化为只有两种颜色,其灰色比标准颜色略深。

感谢所有看过这个的人。