Chia tỷ lệ 16 bit đến 8 bit trong phạm vi sử dụng GDAL


11

Tôi đang tìm cách chia tỷ lệ hình ảnh không dấu 16 bit thành hình ảnh 8 bit bằng GDAL (OSGeo4W). Tuy nhiên, tôi muốn giới hạn các giá trị pixel để chúng nằm trong phạm vi của hình ảnh 8 bit. Ý tôi là, tôi muốn đảm bảo tỷ lệ hình ảnh trong hình ảnh 16 bit được thể hiện trong hình ảnh 8 bit (0-255). Sử dụng gdal_translate để chuyển đổi từ 16 bit thành 8 bit sẽ cắt các giá trị pixel và không tạo ra hình ảnh RGB. Tôi không chắc về chức năng và cài đặt để gọi từ trong gdal_translate, hoặc nếu có một tùy chọn tốt hơn.


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

1
Bạn có thể vui lòng cung cấp một số chi tiết về loại hình ảnh bạn đang sử dụng không?
Aaron

Ví dụ: bằng cách đính kèm báo cáo gdalinfo của tệp nguồn. Viết cũng chính xác lệnh gdal_translate mà bạn đã sử dụng.
dùng49584

gdalinfo đã được thêm vào câu hỏi dưới dạng CẬP NHẬT. Hình ảnh là hình ảnh âm thanh nổi cấp 3. Lệnh gdal_translate được sử dụng là: gdal_translate -ot Byte input.tif output.tif
Ryan Garnett

1
Có lẽ dữ liệu thực của hình ảnh 16 bit chỉ sử dụng một lát hẹp của phạm vi đầy đủ. Kiểm tra biểu đồ với ví dụ QGIS có thể tiết lộ điều đó. Bạn cũng có thể dùng thử với tham số -scale gdal.org/gdal_translate.html . Ví dụ: nếu bạn di chuyển đầu ra RGB từ 4 băng tần ban đầu, hãy tạo ba trong số chúng với các tham số -b, ví dụ-b 1 -b 2 -b 3
user49584

Câu trả lời:


21

Nếu bạn không muốn cắt giảm các giá trị trên 255, bạn cần thu nhỏ chúng xuống. Với mục đích đó, gdal_translate cung cấp tùy chọn -scale:

Từ sách hướng dẫn :

-scale [src_min src_max [dst_min dst_max]]: Thay đổi giá trị pixel đầu vào từ phạm vi src_min thành src_max sang phạm vi dst_min thành dst_max. Nếu bỏ qua phạm vi đầu ra là 0 đến 255. Nếu bỏ qua, phạm vi đầu vào sẽ tự động được tính từ dữ liệu nguồn.

Vì vậy, những gì bạn có thể sử dụng là như sau:

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

Tại sao 255 và 65535?

Bạn có 2 ^ nbits giá trị. Vì giá trị tối thiểu thường là 0, giá trị tối đa là 2^nbits-1.

  • 8 bit -> 2 ^ 8 = 256 giá trị -> 0-255
  • 16 bit -> 2 ^ 16 = 65536 vau -> 0-65535
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.