예제 #1
0
파일: envi.py 프로젝트: sumesh1/spectral
    def __init__(self, data, header=None, params=None):
        '''Creates a new spectral library array

        Arguments:

            `data` (array-like):

                Array with shape `CxB`, where `C` is the number of spectra in
                the library and `B` is the number of bands for each spectrum.

            `header` (dict):

                Optional dict of ENVI header parameters.

            `params` (Params):

                Optional SpyFile Params object
        '''
        from spectral.spectral import BandInfo

        self.spectra = data
        (n_spectra, n_bands) = data.shape

        if header is None:
            header = {}
        header = header.copy()

        self.bands = BandInfo()
        centers = header.pop('wavelength', None)
        if centers is not None:
            if len(centers) != n_bands:
                raise ValueError('Number of band centers does not match data')
            self.bands.centers = [float(c) for c in centers]
        fwhm = header.pop('fwhm', None)
        if fwhm is not None:
            if len(fwhm) != n_bands:
                raise ValueError('Number of fwhm values does not match data')
            self.bands.bandwidths = [float(f) for f in fwhm]
        names = header.pop('spectra names', None)
        if names is not None:
            if len(names) != n_spectra:
                raise ValueError(
                    'Number of spectrum names does not match data')
            self.names = names
        else:
            self.names = [str(i + 1) for i in range(n_spectra)]
        self.bands.band_unit = header.get('wavelength units', "<unspecified>")
        self.bands.band_quantity = "Wavelength"
        self.params = params
        self.metadata = header.copy()
        self.metadata['data ignore value'] = 'NaN'
예제 #2
0
 def __init__(self, data, header, params):
     from spectral.spectral import BandInfo
     self.spectra = data
     self.bands = BandInfo()
     if 'wavelength' in header:
         try:
             self.bands.centers = [float(b) for b in header['wavelength']]
         except:
             pass
     if 'fwhm' in header:
         try:
             self.bands.bandwidths = [float(f) for f in header['fwhm']]
         except:
             pass
     if 'spectra names' in header:
         self.names = header['spectra names']
     else:
         self.names = [''] * self.bands.shape[0]
     self.bands.band_unit = header.get('wavelength units', "")
     self.bands.band_quantity = "Wavelength"
     self.params = params
     self.metadata = {}
     self.metadata.update(header)
     self.metadata['data ignore value'] = 'NaN'