วิธีการปรับสมดุลภาพคอมโพสิตเท็จของภาพ Landsat ที่เพิ่มความคมชัดใน GRASS?


9

เมื่อใดก็ตามที่ฉันพยายามคอมโพสิตเพื่อเลื่อน-ความคมชัดของภาพ Landsat ในหญ้าใช้i.pansharpen, i.fusion.broveyหรือไอเอชเอวิธีการเหลาเอาท์พุทจะมีบางส่วนหรือทั้งหมดของลักษณะดังต่อไปนี้:

  • สีคอมโพสิตอยู่ในเฉดสีที่แตกต่างเมื่อเทียบกับคอมโพสิตที่ไม่ได้ลับให้คม
  • ระดับความสว่างจะเลอะ
  • คอมโพสิตทั้งหมดไปทั้งหมดสีขาว / สีดำทั้งหมด (เมื่อใช้ภาพที่ประมวลผลล่วงหน้าเพื่อการสะท้อนแสงบรรยากาศสุดยอดหรือการแก้ไขการสะท้อนพื้นผิวในi.landsat.toar)

ฉันได้ลองทั้งหมดต่อไปนี้แล้ว; แต่สี / ความสว่างยังคงเหมือนเดิมหรือแย่ลง:

  • ใช้i.landsat.rgbก่อนและหลังกระบวนการลับคมกระทะ
  • เล่นกับ-fหรือ-pตั้งค่าสถานะในi.landsat.rgb
  • พยายามr.colorsแก้ไขตารางสีเป็นเทา / grey255 / grey.eq
  • พยายามi.pansharpenใช้วิธีการ Brovey / IHS / PCA ทั้งหมด
  • เล่นโดยใช้-lธงi.pansharpenเพื่อปรับสมดุลช่องสีฟ้า

คู่มือ GRASS GISไม่ได้อธิบายเกี่ยวกับวิธีการดำเนินการทะเหลาและสีสมดุล แต่ฉันไม่สามารถคิดออกวิธีการรวมทั้งกระบวนการในขั้นตอนการทำงานพร้อมกัน ฉันสงสัยว่านี่เป็นเพราะความเข้าใจที่ไม่ดีของฉันเกี่ยวกับตารางสีฮิสโตแกรมสี ฯลฯ ใน GRASS ..

ดังนั้นใครบางคนสามารถอธิบายให้ฉัน - คุณจะจัดการกับปัญหาความสมดุลสีเมื่อจัดการกับภาพ Landsat หลังจากการประมวลผลภาพใน GRASS ได้อย่างไร? คุณสามารถแบ่งปันขั้นตอน / วิธีการโปรดของคุณกับฉันได้ไหม

ขอบคุณมากสำหรับข้อเสนอแนะใด ๆ !

คำตอบ:


6

ภาพรวม

วิธีการทำงานหนึ่งใน GRASS-GIS เวอร์ชัน 7 เพื่อให้ได้ภาพคอมโพสิตที่สมดุลสีที่ยอมรับได้หลังจากการลับคมแบบแพนคือ

  1. ตรวจสอบว่าข้อมูลอินพุตนั้นมีขนาด 8 บิตหรือไม่ภายใน [0, 255]
  2. หากข้อมูลอยู่ใน [0, 255] ให้ทำต่อเพื่อทำการลับคม ( i.pansharpen)
  3. หากข้อมูลไม่อยู่ใน [0, 255] ให้ขายต่อในช่วงนี้ ( r.rescale)
  4. ปรับความคมชัดด้วยวิธีการต่าง ๆ (Brovey, IHS, PCA)
  5. ปรับสมดุลสีโดยอัตโนมัติโดยใช้i.landsat.rgbโมดูลหรือปรับตารางสีของแถบสีที่สนใจด้วยตนเอง

รายละเอียดและคำแนะนำตัวอย่าง

การลับคม / ฟิวชั่น

GRASS 7ถือกระทะเหลาโมดูลเฉพาะi.pansharpenซึ่งมีสามเทคนิคสำหรับความคมชัดคือการเปลี่ยนแปลง Brovey , คลาสสิกวิธีการไอเอชเอและหนึ่งที่อยู่บนพื้นฐานของPCA

i.pansharpenทำงานได้ดีกับแผนที่แรสเตอร์ 8 บิตเป็นอินพุต หากข้อมูลที่จะดำเนินการอยู่นอกช่วงนี้นั่นเป็นข้อมูลที่ไม่อยู่ใน[0, 255]นั้นพวกเขาสามารถลดขนาดให้พอดีกับช่วงนี้ได้โดยใช้r.rescaleโมดูลGRASS

เมื่อกำหนดชุดของแถบสเปกตรัม 11 บิต (ตัวอย่างเช่นสีน้ำเงิน, เขียว, แดง, NIR และ Pan) ตั้งแต่[0, 2047]นั้นเป็นต้นไปการสอบถามแถบสีฟ้าจะกลับมา

r.info Blue_DNs -r
min=0
max=2047

Rescaling แถบสีฟ้าให้อยู่ในช่วงระหว่าง [0, 255]

r.rescale in=Blue_DNs out=Blue_DNs_255 from=0,2047 to=0,255

ขั้นตอนเดียวกันนี้นำไปใช้กับส่วนที่เหลือของแถบมัลติ - สเปกตรัมและวง Panchromatic ที่น่าสนใจ

ตามปกติเมื่อทำงานกับ GRASS จะต้องกำหนดขอบเขตของความสนใจเช่นให้ตรงกับขอบเขตของวงดนตรีหรืออื่น ๆ ความละเอียดจะได้รับการดูแลในกรณีนี้โดยโมดูลและแผนที่แรสเตอร์ที่ทำให้เกิดความคมชัดของภาพจะมีความละเอียดสูง (er) เช่นเดียวกับแถบ Panchromaticg.regionrast=Blue_DNs_255

คำสั่งตัวอย่างสำหรับการดำเนินการ Pan-Sharpening ที่ใช้ IHS อาจดูเหมือน

i.pansharpen pan=Pan_DNs_255 ms1=Blue_DNs_255 ms2=Green_DNs_255 ms3=Red_DNs_255 output=sharptest255 sharpen=ihs

การปรับสมดุลสี

หลังจากเสร็จสิ้นกระบวนการโมดูลจะส่งออก

...
The following pan-sharpened output maps have been generated:
sharptest255_red
sharptest255_green
sharptest255_blue

To visualize output, run: g.region -p rast=sharptest255.red
d.rgb r=sharptest255_red g=sharptest255_green b=sharptest255_blue

โดยปกติมันควรจะเพียงพอที่จะปรับสมดุลสีหลังการปรับความคมชัดโดยใช้ตัวอย่างเช่นโมดูลi.landsat.rgbหรือการปรับด้วยตนเองของแต่ละสามแถบที่จะสร้างภาพ RGB

ภาพหน้าจอ

... เพื่อเพิ่ม


ฉันรู้ว่าต้องมีวิธีที่ดีกว่า! ตอนนี้ฉันสามารถใช้โมดูล i.sharpen ได้อย่างอิสระ ขอบคุณสำหรับการชี้ให้เห็นโมดูล r.rescale Nikos ทำงานดีเลิศ!

ถึงแม้ว่าฉันไม่แน่ใจว่าและรายละเอียด "ละเอียด" จะหายไปหรือไม่เมื่อแปลงชุดข้อมูล 11 บิตเป็น 8 บิต ตัวอย่างเช่นภาพ QuickBird คือเซ็นเซอร์ขนาด 11 บิต มีทั้งรูปแบบ 8 บิตและ 16 บิต มันขึ้นอยู่กับผู้ใช้ในการตัดสินใจว่าจะทำอย่างไร มันจะดีสำหรับi.pansharpenการจัดการรูปแบบทุกชนิด กรุณาดูที่ที่เกี่ยวข้องกับ "ตั๋ว": ตั๋ว # 2048: i.pansharpen จำกัด ให้ภาพ ในทางกลับกันฉันอาจไม่เข้าใจเนื้อหาและดังนั้นจึงไม่สามารถใช้ i.pansharpen ได้อย่างถูกต้อง ... ?
Nikos Alexandris

7

ฉันค้นหาสูงและต่ำและฉันคิดว่าฉันค้นพบต้นตอของปัญหา ฉันเชื่อว่าฉันได้รับการแก้ปัญหาสำหรับพวกเขาตอนนี้ - แต่มันยุ่งไปหน่อย ฉันแน่ใจว่ามีวิธีที่ดีกว่าในการแก้ปัญหาเหล่านี้ แชร์หากคุณรู้วิธีที่ง่ายกว่า!

รากของปัญหา:

  1. การส่งออกของ อยู่ในจุดลอยi.landsat.toar ฉันรู้ว่าเมื่อฉันใช้ raster point floating point ในวิธีการปรับความคมชัดใด ๆ สีจะเลอะเทอะ อัลกอริทึมเหล่านั้นต้องการแรสเตอร์ที่ต้องการในรูปแบบจำนวนเต็มต้นฉบับ
  2. โมดูลแพนเหลาเช่น i.pansharpen และ โมดูลจะเลอะขึ้นสีi.fusion.brovey ฉันไม่เข้าใจอัลกอริทึมที่พวกเขาใช้ในโมดูลเหล่านั้น - แต่อย่างใดตารางสีจะได้รับผลกระทบและทำลายภาพที่คมชัดที่เกิดจากการแพน

สารละลาย:

  1. ผลผลิตจากแปลง i.landsat.toar จากลอยไป int r.recodeใช้
  2. ใช้แรสเตอร์เป็นอินพุตในวิธีการเพิ่มความคมชัดของ IHS ( i.rgb.hisและi.his.rgb) ฉันให้ห่างจากการใช้และi.pansharpeni.fusion.brovey

เวิร์กโฟลว์:

  1. ใช้ r.info กับ -r ธงที่จะได้รับ DN นาทีและค่าสูงสุดi.landsat.toarของแต่ละวงดนตรีแรสเตอร์ซึ่งได้รับการประมวลผลด้วย ตัวอย่างเช่น:

    > r.info -r BAND1
    min=0.01
    max=0.370064120902708
    

    อย่างที่เราเห็นค่าอยู่ระหว่าง 0-1 ซึ่งค่อนข้างแตกต่างจากค่าดั้งเดิม (ซึ่งอยู่ระหว่าง 0-255) นั่นอธิบายว่าเหตุใดผลลัพธ์จากการปรับความคมชัดจึงกลายเป็นช่องว่างเนื่องจากช่วงของค่าที่ใช้ต่ำมาก (ต่ำกว่า 1)

  2. r.recodeแปลงว่าวงดนตรีแรสเตอร์โดยใช้ ใช้ค่า min และ max ที่ได้รับจากขั้นตอนที่ 1 เพื่อแปลงเป็นช่วงใหม่ของ 0-255 ตัวอย่างข้อมูลโค้ด:

    r.recode input=BAND1 output=NEWBAND1 rules=- << EOF
    0.01:0.370064120902708:0:255
    EOF
    

    เราสามารถตรวจสอบค่าที่แปลงใหม่ด้วยr.info:

    > r.info -r NEWBAND1
    min=1
    max=254
    

    ค่าอยู่ใน 0-255: ตอนนี้ใช้ได้สำหรับกระบวนการลับคมกระทะ

  3. r.colorsสมัครตารางสีสีเทาขนาดกับวงดนตรีที่แปลงด้วย

    r.colors NEWBAND1 color=grey
    

    จนถึงตอนนี้ฉันได้รับผลลัพธ์ที่ดีที่สุดโดยใช้ตารางสีเทา - คอมโพสิตที่มีความแหลมของกระทะเข้าคู่กับคอมโพสิตดั้งเดิมอย่างใกล้ชิด ทางเลือกอื่น ๆ ที่มีการเกลี่ยตารางสีเทาcolor=grey.eqหรือการใช้ธง-e color=greyหรือเราสามารถใช้i.landsat.rgbโมดูลแทนr.colors..

  4. ทำซ้ำขั้นตอนที่ 1-3กับแถบแรสเตอร์อื่น ๆ ที่เราตั้งใจจะใช้เป็นวัสดุผสมรวมถึงกระทะแรสเตอร์ (วง 8) การใช้สคริปต์จะได้รับการชื่นชมมากที่นี่

  5. จากนั้นใช้การประมวลผลเชิงภาพเป็นปัจจัยการผลิตในวิธีกระทะเหลาไอเอชเอ ตัวอย่างเช่นเมื่อทำการประกอบของวงดนตรี 7,4,2:

    i.rgb.his r=NEWBAND7 g=NEWBAND4 b=NEWBAND2 hue=HUE int=INT sat=SAT
    

    นี้ออกจะ 3 ชั้นชั้นสีHUE, ชั้นความรุนแรงและยังเป็นชั้นความอิ่มตัวINT SATจากนั้นเราจะแทนที่ชั้นความเข้มINTด้วยแถบแรสเตอร์NEWBAND8ในi.his.rgb:

    i.his.rgb hue=HUE sat=SAT int=NEWBAND8 r=COMP742_red g=COMP742_green b=COMP742_blue
    

    ส่งผลให้ช่องสีแดงของCOMP742_red , COMP742_green , COMP742_blueสามารถรวมกันโดยใช้d.rgbหรือr.composite..

ตัวอย่างก่อน & หลัง:

ก่อนการลับคมกระทะ:

ก่อน

หลังจากการลับคมกระทะ:

หลังจาก

อาจเป็นการยากที่จะบอกถึงความแตกต่างที่คมชัดเมื่อดูจากภาพขนาดเล็กดังกล่าว แต่สิ่งที่สำคัญคือสีของภาพที่เพิ่มความคมชัดที่จับคู่กับคอมโพสิตจากต้นฉบับ ภารกิจเสร็จสมบูรณ์!

หมายเหตุอื่น ๆ :

  • อย่า r.recode วงความร้อน (วงดนตรี 6) i.landsat.toarเอาท์พุทแถบความร้อนเหล่านี้ในค่าอุณหภูมิเคลวิน (ไม่มีส่วนเกี่ยวข้องกับค่า DN) รักษาr.recodeกิจวัตรประจำวันของวงดนตรีที่มีหลายสเปกตรัมตามปกติและกระทะ (วงดนตรีที่ 1-5,7,8)
  • ถ้าเราไม่ได้ใช้ i.landsat.toar , แต่คอมโพสิตที่เกิดขึ้นมีลักษณะที่ไม่ถูกต้องจริงๆก็มักจะเป็นเพราะไม่ตรงกันของสีตารางก่อนและหลังการทะเหลากระบวนการ ฉันใช้r.colors RASTER color=greyกับแถบแรสเตอร์ดั้งเดิมก่อนที่จะทำการลับคมกระทะและกับช่องผลลัพธ์หลังจากการลับคมกระทะเพื่อให้แน่ใจว่าได้จับคู่สีอย่างใกล้ชิด
  • กรณีปกติของปัญหาคอมโพสิตผิดสี : แรสเตอร์เดิมวงดนตรีที่อยู่ในcolor=grey255การส่งออกของอยู่ในi.landsat.rgb color=grey.eqไม่น่าแปลกใจที่พวกเขาทั้งคู่ดูแตกต่างกัน!
  • การประมวลภาพอิมเมจสำหรับใช้อาจเป็นกิจกรรมที่ต้องเสียเวลา ดีกว่ามีบางสิ่งที่ต้องทำเมื่อรอให้ทุกอย่างดำเนินการหรืออย่างน้อยก็มีกาแฟที่น่าหัวเราะและเพลงดีๆในขณะที่คุณอยู่ที่นั่น)

หวังว่านี้จะเป็นประโยชน์กับใครบางคน: เอาฉันวันเพื่อหาสิ่งที่ผิด ..


1
ขอบคุณสำหรับการวิจัยและความพยายามของคุณฉันยังพบปัญหานี้ใน GRASS 7 ใหม่จาก svn ตอนนี้สีของภาพ pansharpened ก็โอเค =)
Vladimir

โอ้ใช่ฉันลืมพูดถึง GRASS ที่ฉันใช้อยู่ - ขอบคุณ @VladimirNaumov สำหรับการเตือน! ฉันใช้ GRASS 7svn; ควรตระหนักว่าปัญหานี้อาจเป็นสิ่งที่ไม่เกิดขึ้นในทุกรุ่นของ GRASS (ฉันไม่ได้ลองรุ่นอื่น ๆ ) ..

กลับไปที่นี้คุณสามารถแปลงแผนที่แรสเตอร์จุดลอยตัวเป็นแผนที่แรสเตอร์จำนวนเต็มโดยใช้r.mapcalcพร้อมกับint()ฟังก์ชั่นแบบรวม ฉันคิดr.recodeว่าไม่ได้มีไว้สำหรับใช้ในบริบทของแอปพลิเคชันของคุณ
Nikos Alexandris

1
ฉันคิดว่า "ปัญหา" โดยรวมเกี่ยวกับi.pansharpenว่ามันคาดว่าแผนที่แรสเตอร์ 8 บิตเป็นอินพุทคือค่าอินพุตควรอยู่ในช่วงตั้งแต่ 0 ถึง 255
Nikos Alexandris

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