Python MetPy匹配GOES16反射亮度

Python MetPy匹配GOES16反射亮度,python,numpy,matplotlib,metpy,Python,Numpy,Matplotlib,Metpy,在使用MetPy创建GOES16图像时,我遇到了在CMI01到CMI06上匹配颜色表/亮度的问题。我尝试过使用股票颜色表,并使用随机vmin/vmax来尝试获得匹配。我也尝试过使用定制的颜色表,甚至尝试过将最小反射率因子和最大反射率因子作为vmin/vmax值进行集成 也许我让这条路变得更难了?有什么我遗漏的吗?下面是帮助我创建当前图像输出的代码摘录: grayscale={“颜色”:[(0,0,0),(0,0,0),(255255),(255255)],“位置”:[0,0.0909,0.742

在使用MetPy创建GOES16图像时,我遇到了在CMI01到CMI06上匹配颜色表/亮度的问题。我尝试过使用股票颜色表,并使用随机vmin/vmax来尝试获得匹配。我也尝试过使用定制的颜色表,甚至尝试过将最小反射率因子和最大反射率因子作为vmin/vmax值进行集成

也许我让这条路变得更难了?有什么我遗漏的吗?下面是帮助我创建当前图像输出的代码摘录:

grayscale={“颜色”:[(0,0,0),(0,0,0),(255255),(255255)],“位置”:[0,0.0909,0.74242,1]}
CMI_C02={“名称”:“C02”,“commonName”:“可见红带”,“灰度”:真,“baseDir”:“可见”,“彩色地图”:灰度}

dat=data.metpy.parse\u cf('CMI\uu'+singleChannel['name'])
项目=dat.metpy.cartopy\U crs

maxConcat=“最大反射率系数”+单通道['name']
vmax=数据[maxConcat]

sat=ax.pcolormesh(x,y,dat,cmap=make_-cmap(单通道['colorMap']['colors'],位置=单通道['colorMap']['position'],位=True),transform=proj,vmin=0,vmax=vmax)

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

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


任何帮助/指导都将不胜感激

在调查了一些气象学家之后,我最终制作了一个介于两幅图像之间的颜色表,因为大家一致认为我的版本太暗,标准太亮

对于
pcolormesh()
,我仍然使用
vmax
vmin
,并将我的
grayscale
对象简化为两种颜色,颜色略深于标准


多亏了所有看过这张照片的人。

在调查了一些气象学家之后,我最终制作了一张介于两张照片之间的颜色表,因为大家一致认为,他们认为我的版本太暗,标准太亮

对于
pcolormesh()
,我仍然使用
vmax
vmin
,并将我的
grayscale
对象简化为两种颜色,颜色略深于标准


感谢所有看过这篇文章的人。

所以我认为你的问题是,因为有一个非线性变换被应用于杜佩奇学院的数据,在这个例子中是平方根(
sqrt
)。这在过去已经被应用到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)
其结果是:


下面的图像,应用了
sqrt
变换,似乎与CoD图像匹配得很好。

所以我认为,你的问题是,因为有一个非线性变换应用于杜佩奇学院的数据,在这种情况下是平方根(
sqrt
)。这在过去已经被应用到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)
其结果是:


下面的图像,应用了
sqrt
变换,似乎与CoD图像非常匹配。

您对数据做了直方图吗?您对数据做了直方图吗?我完全不知道过去应用的
sqrt
。极好的洞察力和极好的解释!我完全不知道过去应用的
sqrt
。极好的洞察力和极好的解释!