Skala 16 bit hingga 8 bit dalam jangkauan menggunakan GDAL

11

Saya ingin skala gambar tiff unsigned 16bit ke gambar 8bit menggunakan GDAL (OSGeo4W). Namun saya ingin membatasi nilai piksel agar tetap berada dalam kisaran citra 8bit. Yang saya maksud adalah, saya ingin memastikan proporsi visual dalam gambar 16bit terwakili dalam gambar 8bit (0-255). Menggunakan gdal_translate untuk mengkonversi dari 16bit ke 8bit memotong nilai piksel dan tidak menghasilkan gambar RGB. Saya tidak yakin apa fungsi dan pengaturan untuk memanggil dari dalam gdal_translate, atau jika ada opsi yang lebih baik.


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
sumber
1
Bisakah Anda memberikan beberapa detail tentang jenis pencitraan yang Anda gunakan?
Aaron
Misalnya dengan melampirkan laporan gdalinfo dari file sumber. Tulis juga perintah gdal_translate persis yang Anda gunakan.
user30184
gdalinfo telah ditambahkan ke pertanyaan sebagai PEMBARUAN. Citra adalah citra stereo level 3. Perintah gdal_translate yang digunakan adalah: gdal_translate -ot Byte input.tif output.tif
Ryan Garnett
1
Mungkin data nyata dari citra 16 bit hanya menggunakan irisan sempit dari jangkauan penuh. Memeriksa histogram dengan QGIS misalnya dapat mengungkapkan hal itu. Anda juga dapat mencoba dengan parameter skala-gdal.org/gdal_translate.html . Jika Anda menggunakan output RGB dari 4 band asli, pilih tiga dari mereka dengan parameter -b, misalnya-b 1 -b 2 -b 3
user30184

Jawaban:

21

Jika Anda tidak ingin nilai di atas 255 dipotong, Anda perlu menurunkannya. Untuk itu gdal_translate menyediakan opsi -scale:

Dari Manual :

skala [src_min src_max [dst_min dst_max]]: Ubah skala nilai piksel input dari rentang src_min ke src_max ke rentang dst_min ke dst_max. Jika dihilangkan rentang output adalah 0 hingga 255. Jika dihilangkan kisaran input secara otomatis dihitung dari data sumber.

Jadi yang bisa Anda gunakan adalah sebagai berikut:

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

Mengapa 255 dan 65535?

Anda memiliki nilai 2 ^ nbits. Karena nilai min biasanya 0, nilai maks adalah 2^nbits-1.

  • 8 bit -> 2 ^ 8 = 256 nilai -> 0-255
  • 16 bit -> 2 ^ 16 = 65536 vaues -> 0-65535
pLumo
sumber