MetPy Соответствует GOES16 Яркость отражения - PullRequest
0 голосов
/ 09 января 2019

У меня проблема с сопоставлением таблицы цветов / яркости на CMI01 - CMI06 при создании изображений GOES16 с MetPy. Я пытался использовать стандартные таблицы цветов и использовать случайные 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 голосов
/ 17 января 2019

Итак, я считаю, что ваша проблема в том, что к данным в College of DuPage применяется нелинейное преобразование, в данном случае квадратный корень (sqrt). Это было применено к изображениям GOES в прошлом, как упоминалось в документации GOES ABI. Я думаю, это то, что делает 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.

0 голосов
/ 10 января 2019

После опроса некоторых метеорологов я закончил тем, что составил таблицу цветов, которая была между двумя изображениями, поскольку общее согласие было то, что они думали, что моя версия была слишком темной, а стандарт был слишком светлым.

Я все еще использовал vmax и vmin для pcolormesh() и упростил мой объект grayscale до двух цветов с немного более темным серым цветом, чем у стандартного.

Спасибо всем, кто посмотрел на это.

...