Source code for polsartools.sensors.nisar


import numpy as np
from osgeo import gdal,osr
gdal.UseExceptions()
import os,tempfile
import tables
from skimage.util.shape import view_as_blocks
from polsartools.utils.utils import time_it, mlook_arr
from polsartools.utils.io_utils import write_s2_bin_ref, write_s2_ct_ref
from polsartools.utils.h5_utils import h5_polsar, get_ml_chunk
from netCDF4 import Dataset
#%%

# def get_ml_chunk(multiplier, default_size):
#     # Rounds up to the next multiple of `multiplier`
#     return ((default_size + multiplier - 1) // multiplier) * multiplier

def rslc_meta(inFile):
    band_table = [
        ('/science/LSAR', 'L'),
        ('/science/SSAR', 'S')
    ]

    # Step 1: Identify frequency band and root path
    try:
        with tables.open_file(inFile, mode="r") as h5:
            for path, band in band_table:
                if path in h5:
                    freq_band = band
                    freq_path = path
                    break
            else:
                print("Neither LSAR nor SSAR data found in the file.")
                return None

            # Step 2: Read polarization list
            listOfPolarizations = None
            for base in ['RSLC', 'SLC']:
                pol_path = f'{freq_path}/{base}/swaths/frequencyA/listOfPolarizations'
                try:
                    listOfPolarizations = np.array(h5.get_node(pol_path).read()).astype(str)
                except tables.NoSuchNodeError:
                    # print(f"Polarization node missing: {pol_path}")
                    continue
                
            # pol_path = f'{freq_path}/RSLC/swaths/frequencyA/listOfPolarizations'
            # try:
            #     listOfPolarizations = np.array(h5.get_node(pol_path).read()).astype(str)
            # except tables.NoSuchNodeError:
            #     print(f"Polarization node missing: {pol_path}")
            #     listOfPolarizations = None

    except Exception:
        raise RuntimeError("Invalid .h5 file !!")

    return freq_band,listOfPolarizations
def get_rslc_path(h5, freq_band):
    for product_type in ['RSLC', 'SLC']:
        base_path = f'/science/{freq_band}SAR/{product_type}/swaths/frequencyA'
        if h5.__contains__(base_path):
            return base_path
        else:
            print(f"Base path not found: {base_path}")
    return None


def gslc_meta(inFile):
    band_table = [
        ('/science/LSAR', 'L'),
        ('/science/SSAR', 'S')
    ]

    # Step 1: Identify frequency band and root path
    try:
        with tables.open_file(inFile, mode="r") as h5:
            for path, band in band_table:
                if path in h5:
                    freq_band = band
                    freq_path = path
                    break
            else:
                print("Neither LSAR nor SSAR data found in the file.")
                return None

            # Step 2: Read polarization list
            pol_path = f'{freq_path}/GSLC/grids/frequencyA/listOfPolarizations'
            try:
                listOfPolarizations = np.array(h5.get_node(pol_path).read()).astype(str)
            except tables.NoSuchNodeError:
                print(f"Polarization node missing: {pol_path}")
                listOfPolarizations = None

    except Exception:
        raise RuntimeError("Invalid .h5 file !!")

    # Step 3: Reopen to read raster metadata
    with tables.open_file(inFile, "r") as h5:
        base_grid = f'{freq_path}/GSLC/grids/frequencyA'
        projection_path = f'{freq_path}/GSLC/metadata/radarGrid/projection'

        try:
            projection = np.array(h5.get_node(projection_path).read())
            xSpacing = np.array(h5.get_node(base_grid + '/xCoordinateSpacing').read())
            ySpacing = np.array(h5.get_node(base_grid + '/yCoordinateSpacing').read())
        except tables.NoSuchNodeError as e:
            print(f"⚠️ Missing expected metadata node: {e}")
            return None

    return freq_band,listOfPolarizations, xSpacing, ySpacing, int(projection)

[docs] @time_it def nisar_gslc(inFile, matrixType='C3', azlks=2, rglks=2, outType='tif',max_workers=None): """ Extracts the C2 matrix elements (C11, C22, and C12) from a NISAR GSLC HDF5 file and saves them into respective binary files. Example: -------- >>> nisar_gslc("path_to_file.h5", azlks=30, rglks=15) This will extract the C2 matrix elements from the specified NISAR GSLC file and save them in the 'C2' folder. Parameters: ----------- inFile : str The path to the NISAR GSLC HDF5 file containing the radar data. azlks : int, optional (default=20) The number of azimuth looks for multi-looking. rglks : int, optional (default=10) The number of range looks for multi-looking. Returns: -------- None The function does not return any value. Instead, it creates a folder named `C2` (if not already present) and saves the following binary files: - `C11.bin`: Contains the C11 matrix elements. - `C22.bin`: Contains the C22 matrix elements. - `C12_real.bin`: Contains the real part of the C12 matrix. - `C12_imag.bin`: Contains the imaginary part of the C12 matrix. - `config.txt`: A text file containing grid dimensions and polarimetric configuration. Raises: ------- Exception If the GSLC HDF5 file is invalid or cannot be read. """ freq_band,listOfPolarizations, xres, yres, projection = gslc_meta(inFile) nchannels = len(listOfPolarizations) print(f"Detected {freq_band}-band polarization channels: {listOfPolarizations}") ds = Dataset(inFile, "r") xcoords = ds.groups["science"].groups[f"{freq_band}SAR"].groups["GSLC"] \ .groups["grids"].groups["frequencyA"] \ .variables["xCoordinates"][:] ycoords = ds.groups["science"].groups[f"{freq_band}SAR"].groups["GSLC"] \ .groups["grids"].groups["frequencyA"] \ .variables["yCoordinates"][:] ds=None inshape = [len(xcoords),len(ycoords)] outshape = [len(xcoords)//rglks,len(ycoords)//azlks] start_x = min(xcoords) start_y = max(ycoords) # print(projection,start_x,start_y,xres,yres,inshape,outshape) # print(min(ycoords),max(ycoords), min(ycoords)+np.abs(yres)*(inshape[1]-1)) inFolder = os.path.dirname(inFile) if not inFolder: inFolder = "." base_path = f'/science/{freq_band}SAR/GSLC/grids/frequencyA' if nchannels==2: out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2','temp') print("Extracting C2 matrix elements...") if 'HH' in listOfPolarizations and 'HV' in listOfPolarizations: h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "HV": f"{base_path}/HV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C2HX', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres, yres=yres, epsg=projection, outType=outType, dtype = np.float32, inshape=inshape, outshape=outshape ) elif 'VV' in listOfPolarizations and 'VH' in listOfPolarizations: h5_polsar( h5_file=inFile, dataset_paths={ "VV": f"{base_path}/VV", "VH": f"{base_path}/VH", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C2VX', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres, yres=yres, epsg=projection, outType=outType, dtype = np.float32, inshape=inshape, outshape=outshape ) elif 'HH' in listOfPolarizations and 'VV' in listOfPolarizations: h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C2HV', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres, yres=yres, epsg=projection, outType=outType, dtype = np.float32, inshape=inshape, outshape=outshape ) else: print("No HH, HV, VV, or VH polarizations found in the file.") return elif nchannels==4: if matrixType=='S2': print("Extracting S2 matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'S2') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'S2','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "HV": f"{base_path}/HV", "VH": f"{base_path}/VH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'S2', apply_multilook=False, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres, yres=yres, epsg=projection, outType=outType, dtype = np.complex64, inshape=inshape, outshape=outshape ) elif matrixType=='T4': print("Extracting T4 matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'T4') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'T4','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "HV": f"{base_path}/HV", "VH": f"{base_path}/VH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'T4', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres, yres=yres, epsg=projection, outType=outType, dtype = np.float32, inshape=inshape, outshape=outshape ) elif matrixType=='T3': print("Extracting T3 matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'T3') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'T3','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "HV": f"{base_path}/HV", "VH": f"{base_path}/VH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'T3', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres, yres=yres, epsg=int(projection), outType=outType, dtype = np.float32, inshape=inshape, outshape=outshape ) elif matrixType=='C4': print("Extracting C4 matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C4') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C4','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "HV": f"{base_path}/HV", "VH": f"{base_path}/VH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C4', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres, yres=yres, epsg=int(projection), outType=outType, dtype = np.float32, inshape=inshape, outshape=outshape ) elif matrixType=='C3': print("Extracting C3 matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C3') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C3','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "HV": f"{base_path}/HV", "VH": f"{base_path}/VH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C3', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres, yres=yres, epsg=int(projection), outType=outType, dtype = np.float32, inshape=inshape, outshape=outshape ) elif matrixType=='C2HV': print("Extracting C2HV matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2HV') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2HV','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C2HV', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres, yres=yres, epsg=projection, outType=outType, dtype = np.float32, inshape=inshape,outshape=outshape ) elif matrixType=='C2HX': print("Extracting C2HX matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2HX') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2HX','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "HV": f"{base_path}/HV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C2HX', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres, yres=yres, epsg=projection, outType=outType, dtype = np.float32, inshape=inshape,outshape=outshape ) elif matrixType=='C2VX': print("Extracting C2VX matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2VX') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2VX','temp') h5_polsar( h5_file=inFile, dataset_paths={ "VV": f"{base_path}/VV", "VH": f"{base_path}/VH", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C2VX', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres, yres=yres, epsg=projection, outType=outType, dtype = np.float32, inshape=inshape,outshape=outshape ) elif matrixType=='T2HV': print("Extracting T2HV matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'T2HV') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'T2HV','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'T2HV', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres, yres=yres, epsg=projection, outType=outType, dtype = np.float32, inshape=inshape,outshape=outshape ) else: raise ValueError(f"Unsupported matrix type: {matrixType} please choose from S2, C4, C3, T3, T4, T2HV, C2HV, C2HX, C2VX")
[docs] @time_it def nisar_rslc(inFile, matrixType='C3', azlks=22,rglks=10, outType='tif',max_workers=None ): """ Extracts the C2 (for dual-pol), S2/C3/T3 (for full-pol) matrix elements from a NISAR RSLC HDF5 file and saves them into respective binary files. Example: -------- >>> nisar_rslc("path_to_file.h5", azlks=30, rglks=15) This will extract the C2 (for dual-pol), S2/C3/T3 (for full-pol) matrix elements from the specified NISAR RSLC file and save them in the respective folders. Parameters: ----------- inFile : str The path to the NISAR RSLC HDF5 file containing the radar data. azlks : int, optional (default=22) The number of azimuth looks for multi-looking. rglks : int, optional (default=10) The number of range looks for multi-looking. matrixType : str, optional (default = C2 for dual-pol, C3 for full-pol) Type of matrix to extract. Valid options are 'C2', 'S2', 'C3', and 'T3'. Returns: -------- None The function does not return any value. Instead, it creates a folder named `C2/S2/C3/T3` (if not already present) and saves the following binary files: Raises: ------- Exception If the RSLC HDF5 file is invalid or cannot be read. """ freq_band,listOfPolarizations = rslc_meta(inFile) nchannels = len(listOfPolarizations) print(f"Detected {freq_band}-band {listOfPolarizations} ") inFolder = os.path.dirname(inFile) if not inFolder: inFolder = "." with tables.open_file(inFile, mode="r") as h5: base_path = get_rslc_path(h5, freq_band) h5.close() start_x = 0 start_y = 0 xres = 1 yres = 1 projection = 4326 if nchannels==2: if 'HH' in listOfPolarizations and 'HV' in listOfPolarizations: print("Extracting C2HX matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2HX') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2HX','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "HV": f"{base_path}/HV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C2HX', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres/rglks, yres=yres/azlks, epsg=projection, outType=outType, dtype = np.float32, # inshape=inshape, # outshape=outshape ) elif 'VV' in listOfPolarizations and 'VH' in listOfPolarizations: print("Extracting C2VX matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2VX') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2VX','temp') h5_polsar( h5_file=inFile, dataset_paths={ "VV": f"{base_path}/VV", "VH": f"{base_path}/VH", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C2VX', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres/rglks, yres=yres/azlks, epsg=projection, outType=outType, dtype = np.float32, # inshape=inshape, # outshape=outshape ) elif 'HH' in listOfPolarizations and 'VV' in listOfPolarizations: print("Extracting C2HV matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2HV') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2HV','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C2HV', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres/rglks, yres=yres/azlks, epsg=projection, outType=outType, dtype = np.float32, # inshape=inshape, # outshape=outshape ) else: print("No HH, HV, VV, or VH polarizations found in the file.") return elif nchannels==4: if matrixType=='S2': print("Extracting S2 matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'S2') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'S2','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "HV": f"{base_path}/HV", "VH": f"{base_path}/VH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'S2', apply_multilook=False, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres, yres=yres, epsg=projection, outType=outType, dtype = np.complex64, # inshape=inshape, # outshape=outshape ) elif matrixType=='T4': print("Extracting T4 matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'T4') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'T4','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "HV": f"{base_path}/HV", "VH": f"{base_path}/VH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'T4', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres/rglks, yres=yres/azlks, epsg=projection, outType=outType, dtype = np.float32, # inshape=inshape, # outshape=outshape ) elif matrixType=='T3': print("Extracting T3 matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'T3') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'T3','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "HV": f"{base_path}/HV", "VH": f"{base_path}/VH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'T3', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres/rglks, yres=yres/azlks, epsg=projection, outType=outType, dtype = np.float32, # inshape=inshape, # outshape=outshape ) elif matrixType=='C4': print("Extracting C4 matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C4') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C4','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "HV": f"{base_path}/HV", "VH": f"{base_path}/VH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C4', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres/rglks, yres=yres/azlks, epsg=projection, outType=outType, dtype = np.float32, # inshape=inshape, # outshape=outshape ) elif matrixType=='C3': print("Extracting C3 matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C3') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C3','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "HV": f"{base_path}/HV", "VH": f"{base_path}/VH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C3', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres/rglks, yres=yres/azlks, epsg=projection, outType=outType, dtype = np.float32, # inshape=inshape, # outshape=outshape ) elif matrixType=='C2HV': print("Extracting C2HV matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2HV') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2HV','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C2HV', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres/rglks, yres=yres/azlks, epsg=projection, outType=outType, dtype = np.float32, # inshape=inshape,outshape=outshape ) elif matrixType=='C2HX': print("Extracting C2HX matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2HX') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2HX','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "HV": f"{base_path}/HV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C2HX', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres/rglks, yres=yres/azlks, epsg=projection, outType=outType, dtype = np.float32, # inshape=inshape,outshape=outshape ) elif matrixType=='C2VX': print("Extracting C2VX matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2VX') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'C2VX','temp') h5_polsar( h5_file=inFile, dataset_paths={ "VV": f"{base_path}/VV", "VH": f"{base_path}/VH", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'C2VX', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres/rglks, yres=yres/azlks, epsg=projection, outType=outType, dtype = np.float32, # inshape=inshape,outshape=outshape ) elif matrixType=='T2HV': print("Extracting T2HV matrix elements...") out_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'T2HV') temp_dir = os.path.join(inFolder,os.path.basename(inFile).split('.h5')[0],'T2HV','temp') h5_polsar( h5_file=inFile, dataset_paths={ "HH": f"{base_path}/HH", "VV": f"{base_path}/VV", }, output_dir=out_dir, temp_dir=temp_dir, azlks=azlks, rglks=rglks, matrix_type = 'T2HV', apply_multilook=True, chunk_size_x=get_ml_chunk(rglks, 512), chunk_size_y=get_ml_chunk(azlks, 512), max_workers=max_workers, start_x=start_x, start_y=start_y, xres=xres/rglks, yres=yres/azlks, epsg=projection, outType=outType, dtype = np.float32, # inshape=inshape,outshape=outshape ) else: raise ValueError(f"Unsupported matrix type: {matrixType} please choose from S2, C4, C3, T3, T4, T2HV, C2HV, C2HX, C2VX")