ปัญหามี 2 ส่วน อย่างแรกคือคุณต้องการแปลงจาก 16 บิตเป็น 8 บิตและตัวเลือก -scale ของ gdal_translate ทำตามที่กล่าวไว้ในคำตอบก่อนหน้า
-scale minOriginal maxOriginal minOutput maxOutput
ปัญหาที่สองคือปัญหาการปรับปรุงความคมชัด: เมื่อคุณ rescale คุณต้องการมีความคมชัดสูงสำหรับพิกเซลที่คุณสนใจคำเตือน: ไม่มีความคมชัด "วิเศษ" เพราะเมื่อคุณ rescale คุณมักจะหลวมข้อมูลบางส่วน : มันทำเพื่อปรับปรุงการแสดงข้อมูลและซอฟต์แวร์ระดับมืออาชีพทำสิ่งนี้ได้ทันทีโดยไม่ต้องเขียนไฟล์ใหม่ หากคุณต้องการประมวลผลข้อมูลเพิ่มเติม geotiff "สีดำ" ของคุณมีข้อมูลเดียวกับ jp2 ของคุณและพร้อมที่จะประมวลผล หากคุณคำนวณเช่นดัชนีพืชควรทำด้วยค่าการสะท้อน "ดั้งเดิม" ไม่ใช่ค่าที่ได้รับการช่วยเหลือ ดังที่ได้กล่าวมานี่คือขั้นตอนบางอย่างในการสร้างภาพ 8 บิตที่ได้รับการปรับปรุงให้ดีขึ้น
@ben ให้วิธีการทั่วไปแก่คุณในการลดการสะท้อนจาก 0-1 (คูณด้วย 10,000 กับผลิตภัณฑ์นี้) ถึง 0-255 นี่เป็นสิ่งที่ปลอดภัย (ไม่มีข้อยกเว้น) แต่มีเพียงเมฆและดินเปลือยบางแห่งที่มีการสะท้อนแสงสูงมากดังนั้นคุณจึงไม่เห็นอะไรบนบก (ยกเว้นดินเปล่า) และไม่มีน้ำ ดังนั้นการปรับปรุงความคมชัดที่ใช้กันทั่วไปในภาพจึงเป็นเพียงส่วนหนึ่งของช่วงเต็ม ในด้านความปลอดภัยคุณสามารถใช้ความรู้ที่การสะท้อนสูงสุดของวัสดุพื้นผิวโลกทั่วไปมักจะต่ำกว่า 0.5 / 0.6 (ดูที่นี่สำหรับตัวอย่างบางส่วน) แน่นอนว่าภาพของคุณได้รับการแก้ไขในบรรยากาศ (ภาพ L2A) อย่างไรก็ตามช่วงของการสะท้อนแสงนั้นแตกต่างกันไปในแต่ละแถบสเปกตรัมและคุณไม่มีพื้นผิวโลกที่สว่างที่สุดในพื้นที่ที่คุณสนใจ นี่คือลักษณะของวิธี "ปลอดภัย" (ที่มีการสะท้อนสูงสุด 0.4 เช่น 4096 ที่แนะนำโดย @RoVo)
ในทางตรงกันข้ามความคมชัดสามารถปรับให้เหมาะสมสำหรับแต่ละแบนด์ คุณสามารถกำหนดช่วงนี้ด้วยตนเอง (เช่นคุณสนใจสีน้ำและคุณรู้ค่าการสะท้อนน้ำสูงสุดที่คาดไว้) หรือตามสถิติภาพ วิธีที่ใช้กันทั่วไปประกอบด้วยการรักษาค่าประมาณ 95% ของค่าและ "ยกเลิก" (มืดเกินไป -> 0 หรือสว่างเกินไป -> 255) ส่วนที่เหลือซึ่งคล้ายกับการกำหนดช่วงตามค่าเฉลี่ย +/- 1.96 * ส่วนเบี่ยงเบนมาตรฐาน. แน่นอนนี่เป็นเพียงการประมาณเพราะมันถือว่าการแจกแจงแบบปกติ แต่มันใช้งานได้ค่อนข้างดีในทางปฏิบัติ (ยกเว้นเมื่อคุณมีเมฆจำนวนมากเกินไปหรือถ้าสถิติใช้ประโยชน์จากค่า NoData บางค่า)
ให้นำวงแรกของคุณเป็นตัวอย่าง:
mean = 320
std = 536
ช่วงความมั่นใจ 95% = [-731: 1372]
แต่แน่นอนว่าการสะท้อนกลับมีค่ามากกว่าศูนย์เสมอดังนั้นคุณต้องกำหนดค่าต่ำสุดที่ 0
gdal_translate -scale 0 1372 0 255 -ot Byte B01.jp2 B01-scaled.tif
และหากคุณมี gdal รุ่นล่าสุดคุณสามารถใช้ -scale_ {band #} (0 255 เป็นเอาท์พุทเริ่มต้นดังนั้นฉันจึงไม่ทำซ้ำ) เพื่อที่คุณไม่จำเป็นต้องแยกแบนด์เดียว ฉันยังใช้ vrt แทน tif เป็นไฟล์ระดับกลาง (ไม่จำเป็นต้องเขียนภาพเต็ม: ไฟล์เสมือนก็เพียงพอแล้ว)
gdalbuildvrt -separate stack.vrt B04.jp2 B03.jp2 B02.jp2
gdal_translate -scale_1 0 1372 -scale_2 0 1397 -scale_3 0 1430 -ot Byte stack.vrt im_rescaled.tif
โปรดทราบว่าสถิติของคุณได้รับผลกระทบอย่างมากจาก "ส่วน" เช่น clouds และ NoData ในอีกด้านหนึ่งความแปรปรวนจะถูกประเมินค่าสูงเกินไปเมื่อคุณมีค่ามาก ในอีกด้านหนึ่งค่าเฉลี่ยของคุณจะลดลงเมื่อมีค่า "ศูนย์" จำนวนมาก (ทำให้ภาพที่ตัดกันโดยอัตโนมัติสว่างเกินไปเช่นในตัวอย่าง) และจะถูกปรับให้เกินขนาดหากมีเมฆส่วนใหญ่ (ซึ่งจะทำให้ ภาพมืดเกินไป) ในขั้นตอนนี้ผลลัพธ์จะไม่ดีที่สุดที่คุณจะได้รับ
วิธีการแบบอัตโนมัติจะพื้นหลังและระบบคลาวด์ชุดค่า "ไม่มีข้อมูลตัวเลข" และคำนวณสถิติของคุณโดยไม่ต้องไม่มีข้อมูลตัวเลข (ดูโพสต์นี้สำหรับรายละเอียดเกี่ยวกับการคำนวณสถิติโดยไม่ต้องไม่มีข้อมูลตัวเลขและหนึ่งในนี้ตัวอย่างเช่นค่าชุดขนาดใหญ่กว่า 4000 ไม่มีข้อมูลตัวเลขเช่นกัน ) สำหรับภาพเดียวฉันมักจะคำนวณสถิติเกี่ยวกับชุดย่อยที่ไม่มีเมฆที่ใหญ่ที่สุดที่เป็นไปได้ ด้วยสถิติจากชุดย่อยที่ไม่มี "NoData" (มุมบนซ้ายของรูปภาพ) นี่จะให้ผลลัพธ์สุดท้าย คุณจะเห็นว่าช่วงดังกล่าวประมาณครึ่งหนึ่งของช่วง "ปลอดภัย" ซึ่งหมายความว่าคุณมีความเปรียบต่างเป็นสองเท่า:
gdal_translate -scale_1 38 2225 -scale_2 553 1858 -scale_3 714 1745 -ot Byte stack.vrt im_rescaled.tif
เป็นคำพูดสุดท้ายgdal_constrast_stretchดูดี แต่ฉันยังไม่ได้ทดสอบ
gdalinfo -hist merged.tif