Files
BRDF/Flexbrdf/docs/source/basics.rst
2026-04-10 16:46:45 +08:00

142 lines
3.3 KiB
ReStructuredText

.. _basics:
===========
Basic use
===========
Loading images
==============
HyTools includes options for loading both ENVI formatted binary files, NASA NetCDF files,
and NEON AOP HDF files.
.. code-block:: python
import hytools as ht
#Create a HyTools container object
envi = ht.HyTools()
#Read and load file metadata
envi.read_data('./envi_file.bin',file_type= 'envi')
For reading NEON data the process is the same:
.. code-block:: python
#Load an NEON HDF image
neon = ht.HyTools()
neon.read_data("./neon_file.h5",'neon')
Reading data
============
There are several ways to read data using a :class:`~hytools.base.HyTools` object. One option
is to use one of the 'get' methods:
.. code-block:: python
wave = neon.get_wave(900)
band = neon.get_band(10)
column = neon.get_column(1)
line = neon.get_line(234)
chunk = neon.get_chunk(x1,x2,y1,y2)
pixels = neon.get_pixels([0,1,2],[3,4,5])
We can also retrieve masked data, where a binary mask is used to
return a subset of the data. Currently masking only works using the
:meth:`~hytools.base.HyTools.get_band` or
:meth:`~hytools.base.HyTools.get_wave` methods. First we need to
generate a mask, which can be done using the
:meth:`~hytools.base.HyTools.gen_mask` method.
.. code-block:: python
# NDVI masking function
def masker(hy_obj):
ir = hy_obj.get_wave(900)
red = hy_obj.get_wave(660)
ndvi = (ir-red)/(ir+red)
return ndvi > .5
# Generate mask
neon.gen_mask(masker)
# Retrieve pixels where mask is True
pixels = neon.get_band(100, mask_values = True)
Alternatively an :class:`~hytools.base.Iterator` can be used to cycle along a
specified axis of the dataset either by line, column, band or
chunk. This is useful for cycling through and image, applying
a function/algorithm and then writing to a file.
.. code-block:: python
iterator = hy_obj.iterate(by = 'line')
Next cycle through the image line by line until complete:
.. code-block:: python
while not iterator.complete:
line = iterator.read_next()
Writing data
============
Currently writing is only supported for ENVI files and NetCDF files, however data from
NEON hdf files can be easy written to ENVI format using builtin
functions.
First an ENVI header dictionary needs to be generated to specify the
file size, datatype, interleave and other relevant metadata. This is
done using the :func:`~hytools.io.envi.envi_header_from_hdf` function.
.. code-block:: python
header_dict = envi_header_from_hdf(neon)
In this case we are going to export an RGBI image so we need to update
the number of bands:
.. code-block:: python
head_dict['bands'] = 4
Next we create an :class:`~hytools.io.envi.WriteENVI` object which
generates the header and image file using the specifications in the
header dictionary:
.. code-block:: python
output_name = './neon.bin'
writer = WriteENVI(output_name,header_dict)
Finally we can write the bands to file. First we retrieve the closest
wavelength to each input wavelength using the
:meth:`~hytools.base.HyTools.get_wave` method, next we write the band
to the new file with the :meth:`~hytools.io.envi.WriteENVI.write_band`
method.
.. code-block:: python
for band_num,wavelength enumerate([660,550,440,880]):
wave = neon.get_wave(wavelength)
writer.write_band(wave,band_num)
writer.close()