Source code for geoips.plugins.modules.algorithms.visir.Night_Microphys

# # # This source code is subject to the license referenced at
# # # https://github.com/NRLMMD-GEOIPS.

"""Data manipulation steps for "Night_Microphy" EUMETSAT RGB product.

This algorithm expects three Infrared/Visible channels for an RGB image:
* Red SEVIRI B10BT - B09BT
* Green SEVIRI B09Bt - B04BT
* Blue SEVIRI B09BT
"""
import logging

LOG = logging.getLogger(__name__)

interface = "algorithms"
family = "xarray_to_numpy"
name = "Night_Microphys"


[docs]def call(xobj): """Night_Microphys product algorithm data manipulation steps. This algorithm expects TBs from three SEVIRI channels: * Red: B10BT - B09BT * Green: B09Bt - B04BT * Blue: B09BT Parameters ---------- arrays : list of numpy.ndarray * list of numpy.ndarray or numpy.MaskedArray of channel data, in order of sensor "channels" list * Unit in Degrees Kelvin and reflectance Returns ------- numpy.ndarray numpy.ndarray or numpy.MaskedArray of qualitative RGBA image output """ bt04 = xobj["B04BT"].to_masked_array() # 3.9 um TBs, B04 SEVIRI bt09 = xobj["B09BT"].to_masked_array() # 10.8 um reflectance, B09 SEVIRI bt10 = xobj["B10BT"].to_masked_array() # 12.0 um reflectance, B10 SEVIRI # Convert TB from Kevin to Celsius from geoips.data_manipulations.conversions import unit_conversion bt04 = unit_conversion(bt04, input_units="Kelvin", output_units="celsius") bt09 = unit_conversion(bt09, input_units="Kelvin", output_units="celsius") bt10 = unit_conversion(bt10, input_units="Kelvin", output_units="celsius") from geoips.data_manipulations.corrections import apply_data_range, apply_gamma data_range = [-4, 2] red = apply_data_range( bt10 - bt09, min_val=data_range[0], max_val=data_range[1], min_outbounds="crop", max_outbounds="crop", norm=True, inverse=False, ) # need inverse option? red = apply_gamma(red, 1.0) red = apply_gamma(red, 1.0) # Note: may need additional solar correction data_range = [0, 10] grn = apply_data_range( bt09 - bt04, min_val=data_range[0], max_val=data_range[1], min_outbounds="crop", max_outbounds="crop", norm=True, inverse=False, ) grn = apply_gamma(grn, 1.0) grn = apply_gamma(grn, 1.0) # Note: may need additional solar correction data_range = [-30, 20] blu = apply_data_range( bt09, min_val=data_range[0], max_val=data_range[1], min_outbounds="crop", max_outbounds="crop", norm=True, inverse=False, ) # create image of deep clouds in blueish color # norm=True, inverse=False) #create image of deep clouds in yellowish color blu = apply_gamma(blu, 1.0) blu = apply_gamma(blu, 1.0) from geoips.image_utils.mpl_utils import alpha_from_masked_arrays, rgba_from_arrays alp = alpha_from_masked_arrays([red, grn, blu]) rgba = rgba_from_arrays(red, grn, blu, alp) return rgba