Làm cách nào để thêm giải thích màu cho các dải raster bằng GDAL?


9

Tôi có 3 tệp GeoTIFF 1 băng tần riêng biệt. Giải thích màu cho ban nhạc là màu xám. Tôi muốn một tệp RGB 3 băng tần. Tôi đã sử dụng gdal_merge.py

gdal_merge.py -separate file1.tif file2.tif file3.tif -o output_file.tif

Nhưng giải thích màu cho 3 dải của kết quả output_file.tif là màu xám, không xác định, không xác định. Ngoài ra, tất cả các pixel là 0 .

Nếu tôi thực thi pct2rgb.py, tôi nhận được tệp RGB:

pct2rgb.py output_file.tif output_file_rgb.tif

Nhưng tất nhiên, các pixel là 0 quá. Vì vậy, tôi có 3 câu hỏi:

  • Có phải gdal_merge.py là công cụ phù hợp để kết hợp 3 tệp 1 băng tần trong một tệp RGB 3 băng tần?
  • Tại sao tôi nhận được giải thích màu sắc không xác định cho các ban nhạc?
  • PCt2rgb có phải là công cụ phù hợp để chuyển đổi các tệp 3 băng tần với cách hiểu màu này thành các tệp RGB không?

CẬP NHẬT : Các raster không có bảng màu. Chỉ cần giải thích màu sắc: Xám.

Mặt khác, các giá trị pixel đi từ 0 đến 1023 (đây là cố ý)

Thêm dữ liệu: chúng là các raster xoay (không có hướng bắc lên), nhưng tất cả chúng đều có cùng một dạng địa lý.

CẬP NHẬT 2 : Tôi có thể làm cong các hình ảnh để đưa chúng lên phía bắc, xây dựng VRT và thêm ColorInterp cho mỗi băng tần, nhưng tôi vẫn nhận được giải thích màu là màu xám, không xác định, không xác định trong kết quả đầu ra.

Vấn đề là tôi cần tạo một bảng màu, ít nhất là, dải đầu tiên. Tôi biết cách tạo ra chúng , nhưng tôi không biết bảng của mình nên có bao nhiêu mục. Tại sao có 13 mục trong ví dụ về Câu hỏi thường gặp về GDAL Raster? Tất cả các pixel có giá trị từ 0 đến 1023, nếu được giúp đỡ.

CẬP NHẬT 3 : Rõ ràng, không có cách nào trong định dạng TIFF để thực sự chỉ định cách giải thích màu sắc của từng dải. Cách GDAL xây dựng giải thích màu sắc khi đọc tệp TIFF là sự kết hợp giữa giá trị của thẻ PHOTOMETRIC và EXTRASAMPLES .

Đọc về các thẻ này:

  • PHOTOMETRIC đại diện cho không gian màu của dữ liệu hình ảnh. Giá trị là 2 có nghĩa là các thành phần của giá trị pixel là RGB, nhưng nó giả sử pixel Byte và tôi có pixel UInt16 (tôi đã thử -co "PHOTOMETRIC=rgb"và gặp lỗi). Vì vậy, tôi không thể chỉ định thẻ PHOTOMETRIC cho tệp đầu ra.

  • EXTRASAMPLES chỉ định rằng mỗi pixel có N thành phần phụ. Tôi không chắc chắn về cách sử dụng thẻ này để tạo tệp hợp nhất của mình. Hoặc nếu tôi cần nó.

Vì vậy, trong bản cập nhật 2 tôi đề nghị tạo ColorTable, nhưng bằng cách nào? Trong 3 tệp đầu vào của tôi, các giá trị pixel đi từ 0 đến 1023. Tôi có phải khớp chúng với màu không? Tôi có phải tạo ColorTable với 1024 đầu vào không? Làm sao?

Trong bản cập nhật 3, dường như tôi có thể sử dụng một số thẻ GeoTIFF khi tạo tệp được hợp nhất, nhưng tôi không chắc liệu tôi có thực sự có thể sử dụng chúng hay không.


1
Hãy thử điều này: Sử dụng gdal_merge như bạn đã làm, sau đó gdal_translate -co PHOTOMETRIC = RGB, vì bất kỳ lý do gì gdal_merge không tôn vinh -co. Điều này xuất hiện để làm việc cho tôi. Mặc dù tôi có thể hiểu nhầm mục tiêu của bạn.

Cảm ơn lời khuyên của bạn! Tôi muốn hợp nhất 3 geotiff band trong một geotiff 3 band. Vấn đề của tôi là đầu ra của gdal_merge thực sự trống (pixel = 0). Tôi không thể sử dụng đầu ra đó cho bất cứ điều gì.
Jorge Arévalo

Có thể gửi dữ liệu ở đâu đó, một cái gì đó có vẻ không ổn.

Tôi đã hỏi ông chủ của mình và tôi không thể xuất bản dữ liệu :-(. Tôi thực sự có thể trộn các tệp với một mã độc lập, sao chép băng bằng cách băng các tệp đầu vào trong đầu ra. Tôi muốn làm điều đó với gdal_merge Poblem của tôi là tôi không thể đặt giải thích màu RGB cho tệp đầu ra với gdal_merge.
Jorge Arévalo

Có lẽ, tôi đã có một vấn đề tương tự. Làm việc này với rgb2pct.py. Tại sao?, Tôi không biết. Mô tả lệnh: Tiện ích này sẽ tính toán bảng màu giả tối ưu cho hình ảnh RGB nhất định bằng thuật toán cắt trung bình trên biểu đồ RGB được ghép xuống. Sau đó, tôi chạy gdal_translate với mở rộng rgb.

Câu trả lời:


6

gdal_merge.py là công cụ chính xác để 'xếp chồng' hình ảnh đầu vào của bạn.

Giả sử rằng ban nhạc đầu tiên của bạn có bảng màu hợp lệ bạn có thể sử dụng:

gdal_merge.py -separate -pct -o output_file.tif file1.tif file2.tif file3.tif

Lưu ý: Lệnh đã được định dạng lại -o output_file.tiftrước danh sách đầu vào.

Từ các tài liệu:

-pct: Lấy bảng màu giả từ hình ảnh đầu vào đầu tiên và sử dụng nó cho đầu ra. Hợp nhất các hình ảnh giả màu theo cách này giả định rằng tất cả các tệp đầu vào sử dụng cùng một bảng màu.

Tôi sẽ kiểm tra đầu ra của bạn với gdalinfo -statsđể đảm bảo nó được xếp chồng đúng cách.

Đã cập nhật cho OP

Từ danh sách osgeo , có vẻ như bạn có thể thử một định dạng khác để kiểm tra kết quả:

Không có cách nào trong định dạng TIFF để thực sự chỉ định cách giải thích màu sắc của từng dải. Cách GDAL xây dựng giải thích màu sắc khi đọc tệp TIFF là sự kết hợp giữa giá trị của thẻ PHOTOMETRIC và EXTRASAMPLES.

-Evan (người đăng) biết GDAL từ trong ra ngoài.


Tôi thực sự đã làm điều đó, nhưng tôi nhận được "LRI 6: SetColorTable () không được hỗ trợ cho các tệp TIFF nhiều mẫu.". Và tôi nhận được 0 cho tất cả các pixel. Tôi không chắc về ý nghĩa của lỗi này.
Jorge Arévalo

Ok, câu hỏi cập nhật. Tôi cần một bảng màu cho ban nhạc đầu tiên.
Jorge Arévalo

Mmm ... cảm ơn vì đã phản hồi. Tôi đang thử những lựa chọn đó. Có vẻ như tôi không thể sử dụng PHOTOMETRIC = rgb vì kiểu dữ liệu của tôi không phải là int. Nhưng tôi đang ở trên đó ...
Jorge Arévalo

3

Cách đầu tiên tôi có thể nghĩ đến là xây dựng một vrt, chỉnh sửa và dịch:

gdalbuildvrt -separate output.vrt file1.tif file2.tif file3.tif

thêm thẻ interp màu khi cần thiết:

...
<VRTRasterBand dataType="Byte" band="1">
<ColorInterp>Red</ColorInterp>
<NoDataValue>255</NoDataValue>
<ComplexSource>
  <SourceFilename relativeToVRT="1">test.tif</SourceFilename>
  <SourceBand>1</SourceBand>
  <SourceProperties RasterXSize="42" RasterYSize="22" DataType="Byte" BlockXSize="42" BlockYSize="22" />
  <SrcRect xOff="0" yOff="0" xSize="42" ySize="22" />
  <DstRect xOff="0" yOff="0" xSize="42" ySize="22" />
  <NODATA>-32768</NODATA>
</ComplexSource>

và sau đó:

gdal_translate output.vrt output.tif

Tôi đã thử, nhưng các tệp raster của tôi được xoay vòng ...
Jorge Arévalo

Có nghĩa là họ không có cùng SRS / geotransforms?

Không, tất cả chúng đều có cùng một dạng địa lý, nhưng chúng không có trình quét hướng bắc (thông số xoay không phải là 0). Và gdalbuildvrt không hỗ trợ chuyển đổi địa lý xoay. Tôi không muốn làm cong chúng.
Jorge Arévalo

Ừm, ok. Nếu tôi bảo vệ chúng để tạo các trình quét lên phía bắc, tôi có thể xây dựng VRT và thêm ColorInterp khi cần, mua tôi vẫn nhận được màu xám, không xác định, không xác định. Tôi cần tạo một bảng màu cho ban nhạc đầu tiên, nhưng tôi không biết làm thế nào. Tôi sẽ cập nhật câu hỏi.
Jorge Arévalo

1

Dải màu xám đầu vào của bạn có các giá trị từ 0 đến 1024, nhưng RGB chỉ cho phép các giá trị từ 0 đến 255 cho mỗi băng tần.

Bạn có thể sử dụng gdal_translate -scale [src_min src_max [dst_min dst_max]]để hủy tập tin nguồn của bạn.

Trong lần chạy thứ hai, bạn có thể xếp chồng ba băng tần của mình với gdal_merge.py và áp dụng -co "PHOTOMETRIC=rgb".

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.