S3TBX - Forel–Ule color classification


I am trying to apply ForelUle classification to S3 OLCI images (S3_OL_1_EFR), after subsetting and atmospherically correcting with c2rcc.olci. Applying to EUMETSAT WFR L2 image works as expected, while to C2RCC rhow_* results in near homogeous FU 2 class.
I am attaching band 6 reflectances from L2 (left) vs. C2RCC (right) to show that AC is roughly in agreement (using the same color scale limits).

Below are also the FU images (using FU palette) from L2 (left) and C2RCC (right).

Is there any reason why C2RCC reflectances shouldn’t allow the application of ForeUle.OLCI?

This is the L1 image: S3A_OL_1_EFR____20200506T104005_20200506T104305_20200507T143731_0179_058_051_1980_LN1_O_NT_002.SEN3

Thanks for your help

Hi Tiago,

We haven’t tested the FU with the results of C2RCC and officially C2RCC is not supported.
However, there should be some meaningful result.
The only idea I have, is that the difference is higher for another wavelength, and this influences the result in the direction you see.
Can you compare some of the spectra of the L2 and the C2RCC?

Many thanks for the suggestion. Bands 1-4 from C2RCC have much higher reflectances than from Baseline atmospheric correction.

I wonder if this is informative for someone more familiar with the FU conversion algorithm: the hue angle has an almost constant value of around 230 degrees when derived from C2RCC (right image).

Thanks for the information.

I’ll contact the developer of the FU. Maybe he can comment on this.

Many thanks @marpet.

Still on the topic of running FU Classification on OLCI, I have used HYGEOS’s Polymer AC and tried to run ForelUle on this. Polymer outputs reflectances named Rw(frequency) so I renamed the bands in the netcdf to Rw_<2 digit band number> and used the snap parameter: Reflectance band name pattern: Rw_* but still I get the error “Could not find all necessary wavelengths…”

Does FU require some of the missing bands, or is this a matter of understanding the input file format?

Many thanks!

For OLCI the following wavelengths are required:
400.0, 412.5, 442.5, 490.0, 510.0, 560.0, 620.0, 665.0, 673.75, 681.25, 708.75
The problem with the polymer output is that the bands have no wavelengths set.
You could add them in the properties dialog (right-click) of a band.

Thanks again @marpet. I have tried this:

  • manually modifying all the “Spectral Wavelength” Raster Band properties in the polymer nc file to the nominal values
  • saving it to BEAM dim format (required by snap)
  • rerunning FU.
    Unfortunately I am still getting the same error. I have noticed that unlike before, the band name does’t show the wavelength in parenthesis in the Product Explorer.

The text in the product explorer is not regenerated when the wavelength is set.
You need to save the product and open it. Then the wavelength should be displayed.
Why the FU Classification is still not working with the saved dimap, I don’t know.
You could provide me this via e.g., WeTransfer
Would be best if you send me a direct message.

1 Like

Thanks for the data.
The band 9 (wvl=673.75) is missing in the polymer output.
So, I think polymer can’t be used.

Many thanks Marco, I will have to look at implementing FU separately for use with Polymer.

I am still very interested in finding out why I am getting incorrect results when applying FU classification to C2RCC output.

I’ve talked to Hans Van Der Woerd. He said that the atmospheric correction is too small by C2RCC. So here the C2RCC should improve.
In the Ocean optics conference paper True color analysis of natural waters with SeaWiFS, MODIS, MERIS and OLCI by SNAP (researchgate.net) on page 4, the blue signal is already discussed as an indication of problems with the AC.

… the estuaries and parts of the Wadden Sea have a very blue color instead of the typical CDOM and silt dominated brown water color, which points to error in the atmospheric correction due to sand banks and nearby land; part of the blue atmospheric radiation is not taken out sufficiently.

Regarding the missing 673 band in polymer.

  • Is there an option to enable it as output.
  • You could ask Hygeos to make it an output of polymer in there forum Polymer - HYGEOS support forum.
  • As a quick fix you could generate a new band by interpolating between band 8 (665) and band 10 (681). Yes, this is scientifically questionable but as a test it might be okay.

Thanks again @marpet.That agrees with the Baseline AC vs. C2RCC spectrum that I posted above.

I have made that request in the HYGEOS forum, so that in the future we can process Polymer output with SNAP’s FU module. Until that happens, and this might be useful to others, I have contributed to a standalone python tool to calculate FU. It now works with Polymer and the Eumetsat L2 product and there is a Jupyter notebook with example images.

1 Like


I am computing Forel-Ule using an attached GPT graph in 2017, however, some of the dates fail to create Forel-Ule with an error saying ‘Error: Could not find all necessary wavelengths for processing the instrument OLCI.’ The attached are the input S3 OLCI level 2 data downloaded from EUMETSAT, which do not differ from other dates, where the Forel-Ule is computed successfully. I also define OLCI as the input sensor in the GPT. Do you have any idea as to why there is a problem with S3 OLCI data?
Around 41 files fail out of 1358 in the Bay of Bengal region.

fuGraph_nc_India_paper.xml (3.2 KB)
63725807.err (3.7 KB)
Thank you Lenka

The culprit is the subset operator.
The error log you’ve sent says “No intersection with source product”

WARNING: org.esa.snap.core.gpf.common.SubsetOp: No intersection with source product boundary S3A_OL_2_WFR____20170123T034917_20170123T035117_20210711T111359_0119_013_275______MAR_R_NT_003.SEN3
java.lang.IllegalStateException: Could not find all necessary wavelengths for processing the instrument OLCI.
	at org.esa.s3tbx.fu.Instrument.getReflectanceBandNames(Instrument.java:116)

This behaviour has been introduced some years ago.
[SNAP-459] SubsetOp throws exception if no intersection with region - JIRA (atlassian.net)

1 Like