จะเพิ่มการตีความสีสำหรับแถบแรสเตอร์โดยใช้ GDAL ได้อย่างไร


9

ฉันมีไฟล์ GeoTIFF 1 แบนด์ 3 ไฟล์ การตีความสีของแถบเป็นสีเทา ฉันต้องการไฟล์ RGB 3 แบนด์ ฉันใช้ gdal_merge.py แล้ว

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

แต่การตีความสีสำหรับ 3 แบนด์ของผลลัพธ์ output_file.tif เป็นสีเทาไม่ได้กำหนดไม่ได้กำหนด นอกเหนือจากที่พิกเซลทั้งหมด 0

ถ้าฉันใช้ pct2rgb.py ฉันจะได้ไฟล์ RGB:

pct2rgb.py output_file.tif output_file_rgb.tif

แต่แน่นอนว่าพิกเซลก็เป็น 0 เช่นกัน ดังนั้นฉันมี 3 คำถาม:

  • gdal_merge.py เป็นเครื่องมือที่เหมาะสมในการรวม 3 ไฟล์ 1 แบนด์ในไฟล์ RGB 3 แบนด์เดียวหรือไม่
  • ทำไมฉันถึงได้รับการตีความสีที่ไม่ได้กำหนดสำหรับวงดนตรี?
  • pct2rgb เป็นเครื่องมือที่เหมาะสมในการแปลงไฟล์ 3 แบนด์ด้วยการตีความสีนี้เป็นไฟล์ RGB หรือไม่?

UPDATE : แรสเตอร์ไม่มีตารางสี การตีความสีเพียง: สีเทา

ในทางกลับกันค่าพิกเซลจะอยู่ระหว่าง 0 ถึง 1023 (โดยเจตนา)

ข้อมูลเพิ่มเติม: พวกเขากำลัง rasters หมุน (ไม่มีทิศเหนือขึ้นไป) แต่พวกเขาทั้งหมดมีการเปลี่ยนรูปทางภูมิศาสตร์ที่เหมือนกัน

อัปเดต 2 : ฉันสามารถบิดภาพเพื่อทำให้เหนือขึ้นสร้าง VRT และเพิ่ม ColorInterp สำหรับแต่ละวง แต่ฉันยังคงได้รับการตีความสีเป็นสีเทาไม่ได้กำหนดไม่ได้กำหนดในผลลัพธ์

ปัญหาคือฉันต้องสร้างตารางสีอย่างน้อยก็วงแรก ฉันรู้วิธีในการสร้างแต่ฉันไม่ทราบว่าควรมีรายการกี่รายการ ทำไมมี 13 รายการในตัวอย่างของคำถามที่พบบ่อยของ GDAL Raster พิกเซลทั้งหมดมีค่าระหว่าง 0 ถึง 1,023 ถ้ามีความช่วยเหลือ

อัปเดต 3 : เห็นได้ชัดว่าไม่มีวิธีในรูปแบบ TIFF เพื่อระบุการตีความสีของแต่ละวง วิธี GDAL สร้างการตีความสีเมื่ออ่านไฟล์ TIFF การให้คือการรวมกันของค่าของความเข้มแสงและ EXTRASAMPLES แท็ก

อ่านเกี่ยวกับแท็กเหล่านี้:

  • PHOTOMETRICแสดงพื้นที่สีของข้อมูลภาพ ค่า 2 หมายถึงส่วนประกอบของค่าพิกเซลคือ RGB แต่ถือว่าเป็นพิกเซลไบต์และฉันมีพิกเซล UInt16 (ฉันลอง-co "PHOTOMETRIC=rgb"และมีข้อผิดพลาด) ดังนั้นฉันไม่สามารถระบุแท็ก PHOTOMETRIC สำหรับไฟล์เอาต์พุต

  • EXTRASAMPLESระบุว่าแต่ละพิกเซลมีองค์ประกอบพิเศษ N ตัว ฉันไม่แน่ใจเกี่ยวกับวิธีใช้แท็กนี้เพื่อสร้างไฟล์ที่ผสาน หรือถ้าฉันต้องการมัน

ดังนั้นในการอัพเดต 2 ฉันแนะนำให้สร้าง ColorTable แต่อย่างไร ในอินพุตไฟล์ 3 ไฟล์ค่าพิกเซลเริ่มจาก 0 ถึง 1023 ฉันต้องจับคู่กับสีด้วยหรือไม่ ฉันต้องสร้าง ColorTable ด้วย 1024 อินพุตหรือไม่ อย่างไร?

ในการอัปเดต 3 ดูเหมือนว่าฉันสามารถใช้แท็ก GeoTIFF บางอย่างเมื่อสร้างไฟล์ที่รวม แต่ฉันไม่แน่ใจว่าฉันจะใช้พวกเขาหรือไม่


1
ลองสิ่งนี้: ใช้ gdal_merge ตามที่คุณทำแล้ว gdal_translate -co PHOTOMETRIC = RGB ไม่ว่าด้วยเหตุผลใดก็ตาม gdal_merge ไม่ให้เกียรติ -co สิ่งนี้ดูเหมือนจะใช้ได้สำหรับฉัน แม้ว่าฉันอาจจะเข้าใจผิดเป้าหมายของคุณ

ขอบคุณสำหรับเคล็ดลับของคุณ! ฉันต้องการรวม geotiff สามวงเดี่ยวในหนึ่ง geotiff 3 วง ปัญหาของฉันคือผลลัพธ์ของ gdal_merge ว่างเปล่าจริง ๆ (พิกเซล = 0) ฉันไม่สามารถใช้เอาต์พุตนั้นเพื่ออะไรก็ได้
Jorge Arévalo

เป็นไปได้หรือไม่ที่จะโพสต์ข้อมูลที่ใดที่หนึ่ง

ฉันถามหัวหน้าของฉันและฉันไม่สามารถเผยแพร่ข้อมูล :-( จริง ๆ แล้วฉันสามารถผสมไฟล์กับรหัสแบบสแตนด์อโลนที่คัดลอกแบนด์วิดท์ของไฟล์ที่ป้อนเข้าโดยใช้แบนด์แบนด์ฉันต้องการทำกับ gdal_merge poblem ของฉันคือฉันไม่สามารถตั้งการตีความสี RGB สำหรับไฟล์ที่ส่งออกด้วย gdal_merge
Jorge Arévalo

บางทีฉันมีปัญหาที่คล้ายกัน ใช้งานได้กับ rgb2pct.py ทำไม? ฉันไม่รู้ คำอธิบายของคำสั่ง: ยูทิลิตี้นี้จะคำนวณตารางสีหลอกที่ดีที่สุดสำหรับภาพ RGB ที่กำหนดโดยใช้อัลกอริทึมตัดค่ามัธยฐานบนกราฟฮิสโตแกรม RGB ที่ลดลง จากนั้นฉันเรียกใช้ gdal_translate เมื่อขยาย rgb

คำตอบ:


6

gdal_merge.py เป็นเครื่องมือที่ถูกต้องในการ 'สแต็ค' ภาพที่คุณป้อน

สมมติว่าวงแรกของคุณมีตารางสีที่ถูกต้องคุณสามารถใช้:

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

หมายเหตุ: คำสั่งถูกฟอร์แมตใหม่-o output_file.tifก่อนรายการอินพุต

จากเอกสาร:

-pct: คว้าตาราง pseudocolor จากอิมเมจอินพุตแรกและใช้สำหรับเอาต์พุต การผสานภาพ pseudocolored ด้วยวิธีนี้ถือว่าไฟล์อินพุตทั้งหมดใช้ตารางสีเดียวกัน

ฉันจะทดสอบผลลัพธ์ของคุณด้วยgdalinfo -statsเพื่อให้แน่ใจว่าถูกจัดเรียงอย่างเหมาะสม

อัปเดตสำหรับ OP

จากรายการ osgeoดูเหมือนว่าคุณอาจลองใช้รูปแบบอื่นเพื่อตรวจสอบผลลัพธ์:

ไม่มีวิธีในรูปแบบ TIFF เพื่อระบุการตีความสีของแต่ละแบนด์ วิธีที่ GDAL สร้างการตีความสีเมื่ออ่านไฟล์ TIFF เป็นการรวมกันของค่าของแท็ก PHOTOMETRIC และ EXTRASAMPLES

- กำจัด (ผู้โพสต์) รู้ GDAL ทั้งภายในและภายนอก


ที่จริงฉันทำอย่างนั้น แต่ฉันได้รับ "ข้อผิดพลาด 6: SetColorTable () ไม่รองรับไฟล์ TIFF หลายตัวอย่าง" และฉันได้ 0 เป็นพิกเซลทั้งหมด ฉันไม่แน่ใจเกี่ยวกับความหมายของข้อผิดพลาดนี้
Jorge Arévalo

ตกลงคำถามที่อัปเดต ฉันต้องการโต๊ะสีสำหรับวงแรก
Jorge Arévalo

อืม ... ขอบคุณสำหรับการตอบกลับ ฉันกำลังลองตัวเลือกเหล่านั้น ดูเหมือนว่าฉันจะไม่สามารถใช้ PHOTOMETRIC = rgb ได้เนื่องจากประเภทข้อมูลของฉันไม่ได้เป็น int แต่ฉันอยู่กับมัน ...
Jorge Arévalo

3

วิธีแรกที่ฉันคิดได้ก็คือการสร้าง vrt แก้ไขและแปล:

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

เพิ่มแท็ก interp สีตามที่ต้องการ:

...
<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>

แล้ว:

gdal_translate output.vrt output.tif

ฉันพยายามแล้ว แต่ไฟล์แรสเตอร์ของฉันหมุนไปแล้ว ...
Jorge Arévalo

หมายความว่าพวกเขาไม่มี SRS / geotransforms เดียวกันหรือไม่

ไม่พวกมันล้วนมีรูปแบบการแปลงทางภูมิศาสตร์ที่เหมือนกัน แต่พวกมันไม่มี rasters แบบทิศเหนือขึ้นไป (พารามิเตอร์การหมุนไม่ใช่ 0) และ gdalbuildvrt ไม่รองรับการแปลงสภาพทางภูมิศาสตร์แบบหมุน ฉันไม่ต้องการที่จะแปรปรวนพวกเขา
Jorge Arévalo

อืมมมโอเค ถ้าฉันแปรปรวนให้สร้างแรสเตอร์ขึ้นเหนือฉันสามารถสร้าง VRT และเพิ่ม ColorInterp ตามที่ต้องการซื้อฉันยังคงเป็นสีเทาไม่ได้กำหนดไม่ได้กำหนด ฉันต้องสร้างตารางสีสำหรับวงดนตรีวงแรก แต่ไม่รู้ว่าจะทำอย่างไร ฉันจะอัปเดตคำถาม
Jorge Arévalo

1

แถบสีเทาอินพุตของคุณมีค่าตั้งแต่ 0 ถึง 1024 แต่ RGB อนุญาตเฉพาะค่าจาก 0 ถึง 255 สำหรับแต่ละแบนด์

คุณสามารถใช้gdal_translate -scale [src_min src_max [dst_min dst_max]]เพื่อขายไฟล์ต้นฉบับของคุณอีกครั้ง

ในการทำงานครั้งที่สองคุณสามารถสแต็คสามแบนด์ด้วย gdal_merge.py และใช้งาน-co "PHOTOMETRIC=rgb"ได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.