spectralpython / spectral

Python module for hyperspectral image processing
MIT License
573 stars 139 forks source link

wrong assignment of bands.band_quantity in envi.open #46

Closed kidpixo closed 8 years ago

kidpixo commented 8 years ago

The function /io/envi.open assigns :

img.bands.band_quantity = "Wavelength"

but this is not always the case.

I'm working with some envi cube only providing geometrical information to other data cubes, thus not having band_quantity in the header. I get all the img.bands. empty , but img.bands.band_quantity is Wavelength even if isn't defined.

I suggest to add this metadata1 to the output spectral.SpyFile olny if they are effectively present in the header, or it is bad when we are going to write a new file?

Any way, the assumption for img.bands.band_quantity is in general wrong, in my opinion.


1. Metadata list I found:

img.bands.band_quantity
img.bands.bandwidth_stdevs
img.bands.centers
img.bands.band_unit       
img.bands.bandwidths      
img.bands.centers_stdevs 

tboggs commented 8 years ago

I agree, the band_quantity attribute shouldn't be defaulted. This appears to be happening on this line: https://github.com/spectralpython/spectral/blob/master/spectral/io/envi.py#L355.

None of the other members of the bands object are being defaulted. It's probably just as simple as removing that line but we need to make sure that none of the plotting functions fail when that attribute is not set. It's probably also worth considering whether band_quantity and band_unit should be defaulted to None or an empty string (currently the case for band_unit).

kidpixo commented 8 years ago

None seems a pretty good solution to me, easy to check.