Нашел алгоритм, но он работает как-то криво...
Ссылка на статью: remotesensing-08-00666.pdf

Вот я сначала перевожу *_BN.jp2 в tif:
gdal_translate -of GTiff
потом меняю размер:
gdalwarp -tr 10 10 -r cubic
Потом, вот на 1 этапе (цифра 9) мы проверяем что
пиксель *_B03 < 0.319*65535: если да -> переходим на этап 10, а если нет на этап 16... и т.д.
проверил на нескольких снимках... выходит бред. Неправильно показует... Вместо воды - тень, вместо clear облако и т.д. В статье написано, что данный алгоритм должен квалифицировать с точностью 91%. Может, я ошибаюсь по поводу 0.319*65535? Не понял как сравнить значение пикселя с < 0.319... И других.
Можете подсказать рабочий алгоритм