edzer/spacetime

order of components in mnf

Opened this issue · 2 comments

MNF transforms can be ordered in either increasing or decreasing SNR. The former was used by the original reference [1] although ordering by decreasing SNR (==increased noise) is the most used in practice (hence the name MInimum Noise Fraction instead of the original Maximum Noise Fraction), probably because of the close relationship to PCA [2-4] (or because that's the way popular image processing software pacakges do it...).
In any case, the ordering must follow the same order in which eigenvalues (or sd) are presented to avoid confusion. Note that, as in PCA, eigenvalues are used as a guide to drop or smooth
MNF components before the inverse transform is applied for denoising. In the case of MNF,
SNR=eigenvalue-1 [2,4] (under the assumption of a perfect estimate of noise).

[1] Green, Andrew A., Mark Berman, Paul Switzer, and Maurice D. Craig. 1988. “A Transformation for Ordering Multispectral Data in Terms of Image Quality with Implications for Noise Removal.” Geoscience and Remote Sensing, IEEE Transactions on 26 (1): 65–74.
[2] Lee, James B., A. Stephen Woodyatt, and Mark Berman. 1990. “Enhancement of High Spectral Resolution Remote-Sensing Data by a Noise-Adjusted Principal Components Transform.” IEEE Transactions on Geoscience and Remote Sensing 28 (3): 295–304.
[3] Luo, Guangchun, Guangyi Chen, Ling Tian, Ke Qin, and Shen-En Qian. 2016. “Minimum Noise Fraction versus Principal Component Analysis as a Preprocessing Step for Hyperspectral Imagery Denoising.” Canadian Journal of Remote Sensing 42 (2): 106–16.
[4] Bjorgan, Asgeir, and Lise Lyngsnes Randeberg. 2015. “Real-Time Noise Removal for Line-Scanning Hyperspectral Devices Using a Minimum Noise Fraction-Based Approach.” Sensors 15 (2): 3362–78.

edzer commented

Just for my understanding:

  1. Did you mean to say "SNR=1-eigenvalue" instead of "SNR=eigenvalue-1"?
  2. Is your issue that spacetime::mnf uses the ordering of [1], but that you would like that of [2-4]?
  3. Should, in addition to stdev (sqrt(eigenvalue)), 1-eigenvalue be reported as SNR?
  1. Did you mean to say "SNR=1-eigenvalue" instead of "SNR=eigenvalue-1"?
    No. It is a consequence of the definition of SNR and MNF. See p. 297 in [2] , eq (13) and lines below.

  2. Is your issue that spacetime::mnf uses the ordering of [1], but that you would like that of [2-4]?
    It can be either, but consistent with the ordering of the eigenvalues. I prefer decreasing SNR, it makes more sense having the best components first, it would parallel PCA.

  3. Should, in addition to stdev (sqrt(eigenvalue)), 1-eigenvalue be reported as SNR?
    I personally prefer crude eigenvalues. Then the user can use them to calculate SNR or std dev., perhaps with an indication in the help page.

Have you looked into the eigen() vs. svd() issue?