วิธีที่ง่ายที่สุดสำหรับผมที่จะจัดการกับปัญหานี้คือการใช้GDAL รูปแบบเสมือนจริง รูปแบบนี้ทำให้ฉันสามารถใช้รูปภาพทั้งหมดเป็นวัตถุภาพเดียวและแปลงเป็นสามขั้นตอนง่ายๆ
การสร้างชุดข้อมูลเสมือน
GDAL (รวมTamas Szekeres' GISInternals ไบนารีของ Windowsและรุ่นล่าสุดของOSGeo4W ) รวมถึงสาธารณูปโภคที่เรียกว่าgdalbuildvrtซึ่งสามารถนำมาใช้ในการสร้างชุดข้อมูลเสมือนการเริ่มต้น
วิธีง่ายๆในการใช้สิ่งนี้คือการเพิ่มรูปภาพของคุณทั้งหมดลงในไฟล์ข้อความจากนั้นใช้ไฟล์ข้อความนั้นเป็นอินพุตไปยัง gdalbuildvrt นี่คือตัวอย่าง (คุณจะต้องใส่คำสั่งที่สองกลับมาที่หนึ่งบรรทัด):
dir /b *.tif > my_images.txt
gdalbuildvrt
-hidenodata
-vrtnodata "255 255 255"
-resolution highest
-input_file_list my_images.txt
my_image.vrt
สิ่งนี้จะทำให้คุณมีไฟล์ XML ซึ่งคุณสามารถใช้เป็นภาพเดียวสำหรับการทำงานของ GDAL ทั้งหมด นอกจากนี้ยังแสดงถึง nodata ภายในเป็นสีขาว แต่ซ่อนนิยาม nodata จากเครื่องมือที่อ่านจากมัน
การสร้างภาพรวม Resampled
ถัดไปคุณจะทำการ resampling และ output ของภาพรวม คุณสามารถทำเช่นนี้กับทั้งgdal_translateหรือgdalwarp สำหรับสิ่งเหล่านี้โปรดจำไว้ว่าขนาดผลลัพธ์จะเป็นwidth * height * 3
(จำนวน 8 แบนด์) ไบต์ หากสิ่งนี้มีขนาดใหญ่กว่า 4GB คุณจะต้องดูที่ตัวเลือก GeoTIFFสำหรับไวยากรณ์เพื่อระบุ BigTIFF เป็นเอาต์พุตของคุณ (-co "BIGTIFF = YES")
สำหรับ gdal_translate คุณจะต้องกำหนดขนาดของภาพเสมือนโดยใช้คำสั่งgdalinfo ใช้ส่วนข้อมูลเหล่านี้และหารแต่ละส่วนด้วยปัจจัยที่สอดคล้องกันเพื่อกำหนดความกว้างและความสูงของไฟล์ในหน่วยพิกเซล
คำสั่งจะมีลักษณะคล้าย (ในหนึ่งบรรทัด):
gdal_translate
-outsize 53120 14000
-co "TILED=YES"
-co "PROFILE=GEOTIFF"
-co "BLOCKXSIZE=256"
-co "BLOCKYSIZE=256"
my_image.vrt
my_image.tif
สำหรับ gdalwarp คุณจะต้องรู้ขนาดของพิกเซลที่ได้ ในกรณีนี้ฉันใช้. 5 เมตร คุณจะต้องโทรหาวิธีการสุ่มตัวอย่างอีกครั้ง ฉันชอบ cubicspline เพื่อดูภาพรวม มันเบากว่า แต่คุณจะไม่ใช้ความละเอียดเหล่านี้ลงไปจนเต็มและในประสบการณ์ของฉันมันจะสร้างภาพที่สามารถบีบอัดได้มากกว่าถ้าคุณใช้ JPEG หรือ ECW
gdalwarp
-r cubicspline
-of GTiff
-dstnodata "255 255 255"
-tr 0.5 0.5
-co "PROFILE=GEOTIFF"
-co "BIGTIFF=YES"
-co "TILED=YES"
-co "BLOCKXSIZE=256"
-co "BLOCKYSIZE=256"
my_image.vrt
my_image.tif
คุณอาจต้องการใช้ตัวเลือกการบีบอัด JPEG สำหรับภาพรวม GeoTIFF ที่ถูกสุ่มใหม่เหล่านี้ มันลดขนาดไฟล์ที่ส่งออกด้วย ( ตามที่ Frank ) เท่านั้นโทษประสิทธิภาพเล็กน้อย
-co "COMPRESS=JPEG"
-co "JPEG_QUALITY=80"
-co "PHOTOMETRIC=YCBCR"
ภาพรวม
คุณจะต้องเรียกใช้คำสั่งgdaladdo ที่มีประโยชน์บนอิมเมจผลลัพธ์เพื่อสร้าง "ปิรามิด" ภายในเพื่อให้การร้องขอความละเอียดต่ำกว่าขนาดภาพเต็มสามารถพบกับชุดย่อยของข้อมูล การเพิ่มประสิทธิภาพนั้นมีค่ามากกว่าพื้นที่ดิสก์ในกรณีส่วนใหญ่ คุณจะต้องการเล่นกับระดับที่คุณใช้ที่นี่ สำหรับภาพที่มีขนาดใหญ่มากคุณอาจจะวางบางส่วน คำสั่ง gdaladdo มีลักษณะดังนี้:
gdaladdo
-r average
my_image.tif
2 4 8 16 32 64 128 256
ฉันขอแนะนำให้ทดสอบกับระดับเหล่านี้เพื่อประสิทธิภาพที่ดีที่สุด คุณอาจพบว่าช่วงเวลาการสุ่มใหม่แตกต่างกันจะดีกว่าสำหรับการสมัครของคุณหรือตามขนาดภาพของคุณคุณสามารถวางตัวเลขที่สูงขึ้นบางส่วน (หรือจำเป็นต้องมากกว่านั้น)
นอกจากนี้หากคุณกำลังสร้างภาพรวมภายนอก (โดยใช้ตัวเลือก -ro) ให้พิจารณาเพิ่มบรรทัดการกำหนดค่าการบีบอัด JPEG:
--config COMPRESS_OVERVIEW JPEG
--config PHOTOMETRIC_OVERVIEW YCBCR
--config INTERLEAVE_OVERVIEW BAND
(ฉันเชื่อว่าสิ่งเหล่านี้สืบทอดมาจาก GeoTIFF หลักสำหรับภาพรวมที่ฝังตัว)
หมายเหตุ
เมื่อประสบกับปัญหานี้ฉันถามช่อง #gdal บน freenode.irc.net นี่เป็นแหล่งข้อมูลที่น่าอัศจรรย์และฉันเป็นหนี้บุญคุณของ Howard Butler, Frank Warmerdam และแม้แต่ Rouault ที่ช่วยเหลือฉันในเรื่องนี้