Échelle de 16 bits à 8 bits dans la plage à l'aide de GDAL

11

Je cherche à mettre à l'échelle une image tiff 16 bits non signée vers une image 8 bits à l'aide de GDAL (OSGeo4W). Cependant, je veux contraindre les valeurs de pixels afin qu'elles restent dans la plage de l'imagerie 8 bits. Ce que je veux dire, c'est que je veux m'assurer que la proportion visuelle dans l'image 16 bits est représentée dans l'image 8 bits (0-255). L'utilisation de gdal_translate pour convertir de 16 bits à 8 bits réduit les valeurs des pixels et ne produit pas d'image RVB. Je ne sais pas quelle fonction et quel paramètre appeler à partir de gdal_translate, ou s'il existe une meilleure option.


GDALINFO

C:\>gdalinfo C:\Projects\Stormwater\ForPCI\images\1537TORO_6cm_04761_RGBI.tif
Driver: GTiff/GeoTIFF
Files: C:\Projects\Stormwater\ForPCI\images\1537TORO_6cm_04761_RGBI.tif
Size is 17310, 11310
Coordinate System is `'
Metadata:
  TIFFTAG_DATETIME=2015:05:03 12:27:13
  TIFFTAG_IMAGEDESCRIPTION=UltraCam-Lvl03
--------------
CAM_ID: UC-SXp-1-50215465 [3]
IMG_NO: 4761
RECORD_GUID: 8fc3d7a9-d2e5-40e5-babf-939f1f803dcf
IMG_GUID: C850D0A4-39CA-4BC8-ACD7-81A363D78C6E
FILE_GUID: 86C4F8E4-A2FD-43FB-B3B1-4C4ED8DF0E42
LICENSE_ID: 820342819
SOFTWARE: UltraCam Aerial Radiometry Core 12.6.1408.2501
PIXEL_SIZE_WIDTH: 6 [micron]
PIXEL_SIZE_HEIGHT: 6 [micron]
APERTURE: F_8
EXPOSURE_TIME: 0.002000000000 [s]
HIGH_ISO_MODE_CAPTURE: off
HIGH_ISO_MODE_PROCESSING: off

----- Inner Orientation -----
PRINCIPAL_DISTANCE: 100.500000000000 [mm]
PRINCIPAL_POINT_X: -0.000000000000 [mm]
PRINCIPAL_POINT_Y: 0.180000000000 [mm]
SENSOR_AREA_WIDTH: 103.860000000000 [mm]
SENSOR_AREA_HEIGHT: 67.860000000000 [mm]
-----------------------------

----- Exposure Annotation Data -----
MID_EXPOSURE_CORRECTION: 0.000762000000 [s]
FMS_SENSOR_CODE: UCXp
FMS_CAMERA_PORT: 1
FMS_EXPOSURE_NUMBER: 4761
FMS_PROJECT: 1537TORO
FMS_AREA: 1537TORO_6cm_6030
FMS_LINE_NUMBER: 47
FMS_SEGMENT_NUMBER: 1
FMS_WAY_POINT_NUMBER: 0
GPS_DATE: 150412
GPS_TIME: 162517
GPS_LATITUDE: N43.745319 [degree]
GPS_LONGITUDE: W079.358953 [degree]
GPS_ALTITUDE: 1159 [m]
GPS_POSITION_SOLUTION: GPS
GPS_TRACK_OVER_GROUND: 73 [degree]
GPS_ABOVE_GROUND_LEVEL: 1008.7 [m]
GPS_GROUND_SPEED: 80.4 [mps]
------------------------------------

----- Level-3 Parameters -----
IMG_TYPE: High resolution multi channel RGBI
ROTATION: 0 [degree]
------------------------------------
TIFFTAG_RESOLUTIONUNIT=1 (unitless)
TIFFTAG_SOFTWARE=UltraCam Aerial Radiometry Core 12.6.1408.2501
Image Structure Metadata:
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,11310.0)
Upper Right (17310.0,    0.0)
Lower Right (17310.0,11310.0)
Center      ( 8655.0, 5655.0)
Band 1 Block=17310x1 Type=UInt16, ColorInterp=Red
Band 2 Block=17310x1 Type=UInt16, ColorInterp=Green
Band 3 Block=17310x1 Type=UInt16, ColorInterp=Blue
Band 4 Block=17310x1 Type=UInt16, ColorInterp=Undefined
Ryan Garnett
la source
1
Pourriez-vous s'il vous plaît fournir quelques détails sur le type d'images que vous utilisez?
Aaron
Par exemple, en joignant le rapport gdalinfo du fichier source. Écrivez également la commande gdal_translate exacte que vous avez utilisée.
user30184
gdalinfo a été ajouté à la question en tant que MISE À JOUR. L'imagerie est une imagerie stéréo de niveau 3. La commande gdal_translate utilisée était: gdal_translate -ot Byte input.tif output.tif
Ryan Garnett
1
Peut-être que les données réelles de l'imagerie 16 bits utilisent uniquement une tranche étroite de la plage complète. La vérification de l'histogramme avec par exemple QGIS peut révéler cela. Vous pouvez également simplement essayer avec le paramètre -scale gdal.org/gdal_translate.html . Si vous utilisez la sortie RVB de l'original 4 bandes, sélectionnez-en trois avec des paramètres -b, par exemple-b 1 -b 2 -b 3
user30184

Réponses:

21

Si vous ne voulez pas que les valeurs supérieures à 255 soient réduites, vous devez les réduire. À cette fin, gdal_translate fournit l'option -scale:

Du manuel :

-scale [src_min src_max [dst_min dst_max]]: redimensionne les valeurs des pixels d'entrée de la plage src_min à src_max à la plage dst_min à dst_max. En cas d'omission, la plage de sortie est comprise entre 0 et 255. En cas d'omission, la plage d'entrée est automatiquement calculée à partir des données source.

Donc, ce que vous pouvez utiliser est le suivant:

gdal_translate -of GTiff -ot Byte -scale 0 65535 0 255 src_dataset dst_dataset

Pourquoi 255 et 65535?

Vous avez des valeurs de 2 ^ nbits. Comme la valeur min est généralement 0, la valeur max est 2^nbits-1.

  • 8 bits -> 2 ^ 8 = 256 valeurs -> 0-255
  • 16 bits -> 2 ^ 16 = 65536 vaues -> 0-65535
pLumo
la source