I was looking at the source code of the full constraint spectral unmixing because I experimented a bit with self implemented unmixing. Now I wonder what is the algorithm that solves the constraint equation for the endmembers ?
I do not know Java but from a first look, it seems like Nelder-Mead to me ?
Best wishes
The algorithm is custom code originally developed by Helmut Schiller (deceased, unpublished work). If you are interested in solving constrained linear least squares problems, you may consult the general reference below, which might be Helmut Schiller’s original source.
Charles L. Lawson and Richard J. Hanson (1995). “Solving Least Squares Problems.” https://doi.org/10.1137/1.9781611971217.
In fact I do not quite understand why the spectral unmixing in SNAP includes particularly these constrained and fully constrained algorithms. In my opinion non-negative least squares (NNLS) is most appropriate. You may Google NNLS or simply have a look at this code
https://github.com/octoflar/amber/blob/main/src/main/fortran/nnls_mod.F90
which uses and refers to the original NNLS Fortran code.
3 Likes
Thank you very much, these are great resources!