Skip to content

Showing wavelengths  #131

Open
Open

Description

@TheEnlightened1

Hi folks
Just gotten started in SPy and getting to know the functionality. Because of my equipment I've been reading data into SPy as a .mat file, and indexing the MxNxC array within it as my image object. It's been working well so far, but for the spectral charts when creating imshow I'd really like to to be able to see the wavelengths along the X axis when I click on the pixel, a lot like the functionality for Aviris file types.

I see a slightly different issue was raised last year for the same object, being the ImageViewMouseHandler. just wondering what do to get the behaviour as above. I'm reading the source, so the second plot graph curves across the spectrum is coming up fine, but I'm unsure of what approach to take to get the associated wavelengths along the X axis. I'm pretty new to Python and even Hyperspectral data, so not sure what I should be doing here.
Thanks in advance

Activity

  1. tboggs commented on Nov 22, 2021

    @tboggs
    Member

    I'm not immediately aware of a solution that is both clean/elegant and simple, particularly if you are new to both python (and Spectral Python) and hyperspectral imaging.

    One solution would is to create your own subclass of ImageArray (e.g., NumpyImage) and overload the __new__ and __init__ methods to take a numpy array and metadata dict as inputs. That's probably the cleanest, most efficient long-term solution but it requires a bit more knowledge and python coding skills.

    If you want something working quickly without creating/modifying code, the easiest way is probably to just save your numpy array to ENVI format using spectral.envi.save_image and pass the band centers in the metadata argument. Then, load the ENVI-formatted image and display it.

  2. TheEnlightened1 commented on Nov 23, 2021

    @TheEnlightened1
    Author

    Thanks for your response @tboggs

    I'm probably selling myself short a bit with Python, I'm upto the basics of OOP and the semantics. Will definitely look at playing with ImageArray in the next few weeks as a more robust solution long term.

    I actually did think about the ENVI save as a possible workaround in the meantime, but looking at envi.save_image it takes a .hdr extension as an argument? Unfortunately I'm only working with .mat files (specifically the metadata dict of that file), and don't know any particular way to get it into hdr file type. There is a MATLAB function to do it, but haven't been able to get that working.

  3. tboggs commented on Nov 23, 2021

    @tboggs
    Member

    The .hdr extension is the name of the file you are creating with the spectral.envi.save_image function. Presumably, you are loading the numpy array and band metadata from the .mat file. You would pass the new .hdr filname and numpy array to the save_image function, along with a "metadata" keyword arg, which is a dict with a "wavelength" key associated with the list of wavelengths.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions