Las imágenes de Sentinel 2 L1C comenzaron como 12 bits, pero eso se cambió a principios de 2016 cuando ESA cambió QUANTIFICATION_VALUE de 1000 a 10000. Ahora L1C está codificado como un UINT16
archivo jp2 con (¿al menos?) 15 bits significativos. Esto es de gdalinfo
un B02.jp2
archivo reciente :
Band 1 Block=1024x1024 Type=UInt16, ColorInterp=Gray
Overviews: 5490x5490, 2745x2745, 1372x1372, 686x686
Overviews: arbitrary
Image Structure Metadata:
COMPRESSION=JPEG2000
NBITS=15
Teniendo esto en cuenta, el límite parece ser 32767 en lugar de 65535. Cualquier lector JPEG2000 devolverá el valor de muestra como dos bytes, por lo que cualquier código que espere una imagen de 16 bits es seguro incluso si NBITS cambia a 16 en el futuro.
Otra nota: el producto metadata.xml que viene con todos los mosaicos L1C contiene información sobre los valores especiales NO_DATA y SATURATED, que en productos recientes se ve así:
<Special_Values>
<SPECIAL_VALUE_TEXT>NODATA</SPECIAL_VALUE_TEXT
<SPECIAL_VALUE_INDEX>0</SPECIAL_VALUE_INDEX>
</Special_Values>
<Special_Values>
<SPECIAL_VALUE_TEXT>SATURATED</SPECIAL_VALUE_TEXT
<SPECIAL_VALUE_INDEX>65535</SPECIAL_VALUE_INDEX>
</Special_Values>
El valor SATURADO de 65535 indica que la intención era usar el rango completo de uint16.
En cuanto a L2A, si el algoritmo corrige idealmente todas las reflexiones especulares, el registro incorrecto de DEM, la radiación emitida y otras causas de reflectancia superior al 100%, debe obtener una salida en el rango 0..10000. Debido a que ninguna corrección atmosférica es ideal, puede esperar que algunos valores estén fuera de este rango, probablemente hasta 65534, con 65535 nuevamente reservado para píxeles SATURADOS.