Apparent Reflectance Raster Function

apparent reflectanceThe Apparent Reflectance raster function calibrates image brightness values (DN) for some satellite sensors. The main advantage of apparent reflectance function is to adjust the images to a theoretically common illumination condition, so there should be less variation between scenes from different dates and from different sensors. This can be useful for image classification, color balancing, and mosaicking.

The function performs two calibrations. The first calibration is to convert the DN value to the top of atmosphere (TOA) radiance based on the sensor properties (i.e. gain/bias or LMAX/LMIN). The second calibration is to convert the TOA radiance to apparent reflectance, based on sun elevation and acquisition date. The formulas used in the two conversions can be found in section 11.3.1 and 11.3.2 of the Landsat 7 Science Data User Handbook.

Apparent reflectance is a ratio and its native output range is 0-1. For display purposes, in this function, the ratio is multiplied by 255, and the output is therefore stretched from 0-1 to 0-255. When using default 8-bit unsigned integer output data type, the value is rounded down to integers.

Some scientific research (e.g. serving as input of atmospheric model to achieve surface reflectance) requires the original ratio. This can be achieved by 1) selecting apparent reflectance raster function output type to be 32 Bit float, and 2) adding an arithmetic raster function immediately after this function to divide the value by 255.

Before Apparent Reflectance

Before Apparent Reflectance

After Apparent Reflectance

After Apparent Reflectance

This function can only be used with specific imagery and may be automatically applied when adding data to a mosaic dataset using the appropriate raster type. The applicable sensors are Landsat, IKONOS, and QuickBird. If this function is applied to a dataset that is invalid it will slow the function chain but make no adjustments.

This function modifies the image values, so previous statistics and histograms are no longer valid. This function should be applied early in the function chain, after band extraction (reordering) and prior to any stretching or other radiometric function.

Written by: Hua Wei

This entry was posted in Imagery and tagged , , . Bookmark the permalink.

Leave a Reply

11 Comments

  1. uriel80 says:

    Thank you ??, ^_^

  2. cheetospuffs4 says:

    Hello, I am trying to use this function but I have no idea where to find this function and how to enter the pre-requisite meta data information? It is not included in any of the documentation. Please help!

    Thanks

    • Simon Woo says:

      The function can be added to a mosaic dataset item or a function rater, via the Function Editor Window. The metadata from several sensors will automatically populate the gains\bias and sun elevation. The sensors that currently read the metadata automatically are: Landsat(MSS & TM), Quickbird and Ikonos. In future releases we will try to support more sensors where we can read the metadata automatically.

  3. dcazar says:

    I am attempting to atmospherically correct a Quickbird image downloaded in NITF format. I would like to use the apparent reflectance function. The .imd information is buried inside an xml document that download with the ntf file, however the nft file has some header information store that ArcGIS is able to read.

    ArcGIS is able to calculate the Sun Elevation, which shows up automatically. I assume the Earth-Sun distance is also being used by the function behind the scenes. The problem is that gain and bias values are not in the imd file, even though the help says that they are. The imd file only provides an absolute calibration factor. Converting to radiance is easy enough but I need to process this quickly and don’t have time to repeat the programming steps of the Julian day to get accurate solar geometry.

    Can you please provide guidance on the relationship of the calibration factor to the gain and offset entries?

    • Simon Woo says:

      Here is a response from one of the developers that worked on the apparent reflectance function:

      The information in this post comes from the DigitalGlobe document “Radiometric Use of QuickBird Imagery”, Technical Note, prepared by Keith Krause, released 11/7/2005. This is the definitive document on the subject and the one we used during development.

      The function does two things: convert DN to radiance based on gain and bias, then convert radiance to reflectance using sun illumination.

      As noted, QuickBird metadata does not store gain and bias, but rather an absolute calibration factor for each band, referred to as “Kband” in the document. It is related to the gain by the effective band width for that band. Bias (or Offset) is applied during product generation is ignored for apparent reflectance.

      On page 8 of that document, the following equation is given (with terms rearranged):

      Radiance = DN * (Kband / bandwidth)

      Where DN is the image value
      Kband is the absolute calibration factor
      And bandwidth is the effective bandwidth in microns.

      The term (kBand/bandwidth) is the inverse gain used to convert the image values to radiance, since DN was previously defined as
      DN = Radiance * radiance_to_DN_Gain + Bias (and we are ignoring Bias)

      So, the gain we calculate for the apparent reflectance function (DN_to_radiance_gain) is the absolute calibration factor divided by the effective band width for each band. Does this answer the question?

      The absolution calibration factors for each band should be stored in the .imd file, but the effective band widths are not. However, they are constants that are listed on page 3 of the document and reprinted here:

      Band Effective Band Width
      Pan 0.398
      Blue 0.068
      Green 0.099
      Red 0.071
      Near Infrared 0.114

      The conversion from radiance to reflectance accounts for differences in illumination based on sun elevation and the solar irradiance constants for each band. As observed, ArcMap calculates the sun elevation and hard-codes the irradiance constants into the function.

      This table is listed in the document on page 4 and is reprinted here:

      Band Spectral Irradiance
      Pan 1381.79
      Blue 1924.59
      Green 1843.08
      Red 1574.77
      Near Infrared 1113.71

      All of this is handled by the QuickBird Builder when an image is loaded into a mosaic dataset. For a raster dataset the dn_to_radiance_gains can be calculated as above and set into the function arguments. The bias values can be set to 0.

      Note: Since QuickBird uses only one gain setting for multispectral bands, the largest improvement from Apparent Reflectance will be as a result of the sun elevation. As observed, the function handles the sun distance behind the scenes.

      Note: These calibration factors apply only to 11-bit imagery. For 8-bit imagery, the values must be scaled. Page 11 of the document addresses this issue.

      Hope this helps.

  4. insyzygy says:

    Hi,
    I have some Landsat 5 data (L1G) that I viewing with Image Analysis module within ArcMap.
    I am having issues applying the Apparent Radiance Function. I insert the function after the composite function but before the stretch function but when I click on the “Key Metadata” tab within the Apparent Radiance Function dialog all the requisite variables such as Radiance_Gain and Radiance_Bias are all zero even though I can see the values in the TXT metadata file.
    A copy of the metadata is below.
    I would appreciate any advice.

    GROUP = L1_METADATA_FILE
    GROUP = METADATA_FILE_INFO
    ORIGIN = “Image courtesy of the U.S. Geological Survey”
    REQUEST_ID = “0101309279847_00009″
    LANDSAT_SCENE_ID = “LT52070231984161XXX03″
    FILE_DATE = 2013-09-27T20:26:39Z
    STATION_ID = “XXX”
    PROCESSING_SOFTWARE_VERSION = “LPGS_12.2.1″
    DATA_CATEGORY = “NOMINAL”
    END_GROUP = METADATA_FILE_INFO
    GROUP = PRODUCT_METADATA
    DATA_TYPE = “L1G”
    DATA_TYPE_L0RP = “TMR_L0RP”
    OUTPUT_FORMAT = “GEOTIFF”
    EPHEMERIS_TYPE = “PREDICTIVE”
    SPACECRAFT_ID = “LANDSAT_5″
    SENSOR_ID = “TM”
    SENSOR_MODE = “SAM”
    WRS_PATH = 207
    WRS_ROW = 023
    DATE_ACQUIRED = 1984-06-09
    SCENE_CENTER_TIME = 10:57:17.0770560Z
    CORNER_UL_LAT_PRODUCT = 54.08711
    CORNER_UL_LON_PRODUCT = -10.02581
    CORNER_UR_LAT_PRODUCT = 54.06216
    CORNER_UR_LON_PRODUCT = -6.34432
    CORNER_LL_LAT_PRODUCT = 52.11067
    CORNER_LL_LON_PRODUCT = -9.97984
    CORNER_LR_LAT_PRODUCT = 52.08744
    CORNER_LR_LON_PRODUCT = -6.46319
    CORNER_UL_PROJECTION_X_PRODUCT = 432900.000
    CORNER_UL_PROJECTION_Y_PRODUCT = 5993700.000
    CORNER_UR_PROJECTION_X_PRODUCT = 673800.000
    CORNER_UR_PROJECTION_Y_PRODUCT = 5993700.000
    CORNER_LL_PROJECTION_X_PRODUCT = 432900.000
    CORNER_LL_PROJECTION_Y_PRODUCT = 5773800.000
    CORNER_LR_PROJECTION_X_PRODUCT = 673800.000
    CORNER_LR_PROJECTION_Y_PRODUCT = 5773800.000
    REFLECTIVE_LINES = 7331
    REFLECTIVE_SAMPLES = 8031
    THERMAL_LINES = 7331
    THERMAL_SAMPLES = 8031
    FILE_NAME_BAND_1 = “LT52070231984161XXX03_B1.TIF”
    FILE_NAME_BAND_2 = “LT52070231984161XXX03_B2.TIF”
    FILE_NAME_BAND_3 = “LT52070231984161XXX03_B3.TIF”
    FILE_NAME_BAND_4 = “LT52070231984161XXX03_B4.TIF”
    FILE_NAME_BAND_5 = “LT52070231984161XXX03_B5.TIF”
    FILE_NAME_BAND_6 = “LT52070231984161XXX03_B6.TIF”
    FILE_NAME_BAND_7 = “LT52070231984161XXX03_B7.TIF”
    METADATA_FILE_NAME = “LT52070231984161XXX03_MTL.txt”
    CPF_NAME = “L5CPF19840401_19840630.09″
    END_GROUP = PRODUCT_METADATA
    GROUP = IMAGE_ATTRIBUTES
    CLOUD_COVER = 80.00
    IMAGE_QUALITY = 9
    SUN_AZIMUTH = 139.98757277
    SUN_ELEVATION = 54.92794410
    END_GROUP = IMAGE_ATTRIBUTES
    GROUP = MIN_MAX_RADIANCE
    RADIANCE_MAXIMUM_BAND_1 = 169.000
    RADIANCE_MINIMUM_BAND_1 = -1.520
    RADIANCE_MAXIMUM_BAND_2 = 333.000
    RADIANCE_MINIMUM_BAND_2 = -2.840
    RADIANCE_MAXIMUM_BAND_3 = 264.000
    RADIANCE_MINIMUM_BAND_3 = -1.170
    RADIANCE_MAXIMUM_BAND_4 = 221.000
    RADIANCE_MINIMUM_BAND_4 = -1.510
    RADIANCE_MAXIMUM_BAND_5 = 30.200
    RADIANCE_MINIMUM_BAND_5 = -0.370
    RADIANCE_MAXIMUM_BAND_6 = 15.303
    RADIANCE_MINIMUM_BAND_6 = 1.238
    RADIANCE_MAXIMUM_BAND_7 = 16.500
    RADIANCE_MINIMUM_BAND_7 = -0.150
    END_GROUP = MIN_MAX_RADIANCE
    GROUP = MIN_MAX_PIXEL_VALUE
    QUANTIZE_CAL_MAX_BAND_1 = 255
    QUANTIZE_CAL_MIN_BAND_1 = 1
    QUANTIZE_CAL_MAX_BAND_2 = 255
    QUANTIZE_CAL_MIN_BAND_2 = 1
    QUANTIZE_CAL_MAX_BAND_3 = 255
    QUANTIZE_CAL_MIN_BAND_3 = 1
    QUANTIZE_CAL_MAX_BAND_4 = 255
    QUANTIZE_CAL_MIN_BAND_4 = 1
    QUANTIZE_CAL_MAX_BAND_5 = 255
    QUANTIZE_CAL_MIN_BAND_5 = 1
    QUANTIZE_CAL_MAX_BAND_6 = 255
    QUANTIZE_CAL_MIN_BAND_6 = 1
    QUANTIZE_CAL_MAX_BAND_7 = 255
    QUANTIZE_CAL_MIN_BAND_7 = 1
    END_GROUP = MIN_MAX_PIXEL_VALUE
    GROUP = PRODUCT_PARAMETERS
    CORRECTION_GAIN_BAND_1 = “CPF”
    CORRECTION_GAIN_BAND_2 = “CPF”
    CORRECTION_GAIN_BAND_3 = “CPF”
    CORRECTION_GAIN_BAND_4 = “CPF”
    CORRECTION_GAIN_BAND_5 = “CPF”
    CORRECTION_GAIN_BAND_6 = “INTERNAL_CALIBRATION”
    CORRECTION_GAIN_BAND_7 = “CPF”
    CORRECTION_BIAS_BAND_1 = “CPF”
    CORRECTION_BIAS_BAND_2 = “CPF”
    CORRECTION_BIAS_BAND_3 = “CPF”
    CORRECTION_BIAS_BAND_4 = “CPF”
    CORRECTION_BIAS_BAND_5 = “CPF”
    CORRECTION_BIAS_BAND_6 = “CPF”
    CORRECTION_BIAS_BAND_7 = “CPF”
    END_GROUP = PRODUCT_PARAMETERS
    GROUP = RADIOMETRIC_RESCALING
    RADIANCE_MULT_BAND_1 = 0.671
    RADIANCE_MULT_BAND_2 = 1.322
    RADIANCE_MULT_BAND_3 = 1.044
    RADIANCE_MULT_BAND_4 = 0.876
    RADIANCE_MULT_BAND_5 = 0.120
    RADIANCE_MULT_BAND_6 = 0.055
    RADIANCE_MULT_BAND_7 = 0.066
    RADIANCE_ADD_BAND_1 = -2.19134
    RADIANCE_ADD_BAND_2 = -4.16220
    RADIANCE_ADD_BAND_3 = -2.21398
    RADIANCE_ADD_BAND_4 = -2.38602
    RADIANCE_ADD_BAND_5 = -0.49035
    RADIANCE_ADD_BAND_6 = 1.18243
    RADIANCE_ADD_BAND_7 = -0.21555
    END_GROUP = RADIOMETRIC_RESCALING
    GROUP = PROJECTION_PARAMETERS
    MAP_PROJECTION = “UTM”
    DATUM = “WGS84″
    ELLIPSOID = “WGS84″
    UTM_ZONE = 29
    GRID_CELL_SIZE_REFLECTIVE = 30.00
    GRID_CELL_SIZE_THERMAL = 30.00
    ORIENTATION = “NORTH_UP”
    RESAMPLING_OPTION = “CUBIC_CONVOLUTION”
    MAP_PROJECTION_L0RA = “NA”
    END_GROUP = PROJECTION_PARAMETERS
    END_GROUP = L1_METADATA_FILE
    END

  5. Simon Woo says:

    Your Landsat 5 metadata file looks much different than those in our collection.
    Where is your Landsat 5 data coming from? Has the meta data been altered in any way?

    Your metadata looks like this:
    RADIANCE_MAXIMUM_BAND_7 = 16.500
    RADIANCE_MINIMUM_BAND_7 = -0.150
    QUANTIZE_CAL_MAX_BAND_1 = 255
    QUANTIZE_CAL_MIN_BAND_1 = 1

    USGS data that we have looks like this:
    LMAX_BAND1 = 191.600
    LMIN_BAND1 = -6.200
    QCALMAX_BAND1 = 255.0
    QCALMIN_BAND1 = 1.0

  6. mcj6fd says:

    Hi, I am trying to use this function on a 2011 Ikonos image. I have found the published radiometric calibration coefficients and the gain coefficients in Pagnutti et al. and Dial et al. 2003 and . I am not sure what are the bias values, are these the standard errors (or deviation, not specified) of the gain provided by NASA? Or are we supposed to ignore the bias?
    In short should I enter: 64.1 for Blue, 65.4 for Green, 87.7 for Red, 75.8 for NIR in gains and leave bias empty? or enter the SE/SD provided in bias?
    Many thanks,
    Mari

    • Simon Woo says:

      I am not an expert on apparent reflectance, so I deferred this question to one of my colleagues. Unfortunately he was a bit confused by your numbers. Can you help clear up the confusion. I will post his response (below):
      ————————-
      I was preparing a response (see below), but then looked more closely at the values they were going to add (I presume as gain values) and they are not correct gain values. Do you think they are referring to bias values in which case they seem way too high (e.g., 64.1)? Or they referring to gain values in which case they have not properly converted to watts/m2/micron? FYI, typical gain values are in the range of:
      0.192654470354
      0.155250092374
      0.160142975649
      0.124343775724
      For b, g, r, nir respectively.
      ————————-
      If you can please help answers his questions, we will do our best to help you with your issue.

      Thanks!

  7. clara_i says:

    Hello! I am working with Landsat 8 scenes, and I cannot seem to make this function work. When I select the band, the bias and gain values are no data/empty field. I can’t seem to find any other documentation than this. Do you have any suggestions for why this is happening or on how to make this function work? Would appreciate an answer. Best, Clara

    • Simon Woo says:

      Landsat 8 metadata does not use gain/bias, but it instead uses similar concepts under name REFLECTANCE_MULT and REFLECTANCE_ADD. So for Landsat 8, the gains/bias are all set to the fixed number of 2.0000E-05 and -0.1 .

      For all sensors that we can calculate Apparent Reflectance, gain/bias (REFLECTANCE_MULT/REFLECTANCE_ADD for Landsat 8), sun elevation and acquisition date will be used together to convert DN to reflectance.

      Under our definition, albedo is the actual ratio (a floating point number range from 0 to 1), while apparent reflectance is a more general term that is scaled to output type.