Convert radiance to reflectance
converts the pixel values of the hyperspectral data cube from radiance to reflectance
values. The function returns a new
newhcube = radiance2Reflectance(
hypercube object and the pixel values of
the data cube represent the top of atmosphere (TOA) reflectance. For more information, see
The function divides the input image into distinct blocks,
processes each block, and then concatenates the processed output of each block to form the
output matrix. Hyperspectral images are multi-dimensional data sets that can be too large to fit
in system memory in their entirety. This can cause the system to run out of memory while running
radiance2Reflectance function. If you encounter such an issue, perform block
processing by using this syntax.
radiance2Reflectance(hcube,'BlockSize',[50 50]) divides
the input image into non-overlapping blocks of size 50-by-50 and then computes the
reflectance values for pixels in each block.
To perform block processing by specifying the
pair argument, you must have MATLAB R2021a or a later release.
This function requires the Image Processing Toolbox™ Hyperspectral Imaging Library. You can install the Image Processing Toolbox Hyperspectral Imaging Library from Add-On Explorer. For more information about installing add-ons, see Get and Manage Add-Ons.
Read hyperspectral data into the workspace.
input = hypercube('EO1H0440342002212110PY_cropped.hdr');
Determine the bad spectral band numbers using the
BadBands parameter in the metadata.
bandNumber = find(~input.Metadata.BadBands);
Remove the bad spectral bands from the data cube.
input = removeBands(input,'BandNumber',bandNumber);
Convert the digital numbers to radiance values by using the
hcube = dn2radiance(input);
Convert the radiance values to reflectance values by using the
newhcube = radiance2Reflectance(hcube);
Read and display the 80th spectral band in the input radiance and the output reflectance data.
radianceBand = hcube.DataCube; reflectanceBand = newhcube.DataCube; band = 80; figure subplot(1,2,1) imagesc(radianceBand(:,:,band)) axis off title('Radiance Band') subplot(1,2,2) imagesc(reflectanceBand(:,:,band)) title('Reflectance Band') colormap(gray) axis off
hcube— Input hyperspectral data
Input hyperspectral data, specified as a
DataCube property of the
object stores the hyperspectral data cube. The pixels values of the data cube must be
radiance values specifying the amount of radiation from the surface being imaged. You
can convert the pixel values in digital numbers to radiance values by using
blocksize— Size of data blocks
Size of the data blocks, specified as a 2-element vector of positive integers. The elements of the vector correspond to the number of rows and columns in each block, respectively. The size of the data blocks must be less than the size of the input image. Dividing the hyperspectral images into smaller blocks enables you process large data sets without running out of memory.
blocksize value is too small, the memory usage
of the function reduces at the cost of increased execution time.
blocksize value is large or equal to the input
image size, the execution time reduces at the cost of increased memory
'BlockSize',[20 20] specifies the size of each data block
newhcube— Output hyperspectral data
Output hyperspectral data, returned as a
hypercube object. The
pixels values in the output data cube are top of atmosphere (TOA) reflectance
The TOA reflectance values specifies the ratio of radiation reflected by the surface to the radiation incident on the surface.
d is the earth-sun distance in astronomical units, ESUNλ is the mean solar irradiance for each spectral band, and θE is the sun elevation angle.
Lλ is the spectral radiance computed as:
Gain and Bias are the gain and offset values for
each spectral bands respectively. The
Metadata property of
hypercube object contains the gain and offset values.