Bagaimana cara menyeimbangkan warna komposit palsu dari gambar Landsat yang dipertajam dengan pan dalam GRASS?

9

Setiap kali saya mencoba untuk mempertajam komposit beberapa gambar Landsat dalam GRASS menggunakan i.pansharpen, i.fusion.broveyatau metode penajaman IHS, output akan memiliki beberapa atau semua karakteristik berikut:

  • warna komposit berada dalam rona yang berbeda dibandingkan dengan komposit yang tidak diasah
  • tingkat kecerahan kacau
  • seluruh komposit menjadi serba putih / hitam-semua (saat menggunakan gambar pra-diproses untuk reflektansi atmosfer-atas atau koreksi reflektansi permukaan di i.landsat.toar)

Saya juga sudah mencoba semua yang berikut; tetapi warna / kecerahannya tetap sama atau berubah menjadi lebih buruk:

  • Diterapkan i.landsat.rgb, sebelum dan sesudah proses penajaman panci
  • Dimainkan dengan tanda -fatau -pmasuki.landsat.rgb
  • Mencoba r.colorsmengedit tabel warna ke grey / grey255 / grey.eq
  • Sudah mencoba i.pansharpenmenggunakan semua metode Brovey / IHS / PCA
  • Dimainkan dengan -lbendera i.pansharpenuntuk menyeimbangkan saluran biru

The pengguna GRASS GIS tidak menjelaskan tentang cara melakukan pan-sharpening dan warna-balancing, tapi aku tidak bisa mencari cara untuk menggabungkan kedua proses dalam alur kerja bersamaan. Saya menduga bahwa ini adalah karena pemahaman saya yang buruk tentang tabel warna, histogram warna, dll dalam GRASS ..

Jadi, bisakah seseorang menjelaskan kepada saya - bagaimana Anda mengatasi masalah penyeimbangan warna ketika berhadapan dengan gambar Landsat setelah pemrosesan gambar dalam GRASS? Bisakah Anda berbagi dengan saya alur kerja / metode favorit Anda?

Terima kasih banyak atas umpan baliknya!


sumber

Jawaban:

6

Gambaran

Salah satu pendekatan kerja di dalam GRASS-GIS versi 7 untuk mendapatkan gambar komposit warna-seimbang yang dapat diterima setelah Pan-sharpening adalah

  1. periksa apakah input data berkisar 8-bit di dalam [0, 255]
  2. jika data di dalam [0, 255] lanjutkan kemudian ke pan-sharpening ( i.pansharpen)
  3. jika data tidak di dalam [0, 255], skalakan kembali ke kisaran ini ( r.rescale)
  4. mempertajam dengan salah satu metode unggulan (Brovey, IHS, PCA)
  5. keseimbangan warna secara otomatis dengan menggunakan i.landsat.rgbmodul atau secara manual menyesuaikan tabel warna dari band-band yang diinginkan

Detail dan contoh instruksi

Pan-Sharpening / Fusion

GRASS 7 memiliki modul pan-sharpening khusus, i.pansharpenyang menampilkan tiga teknik untuk mengasah, yaitu transformasi Brovey , metode IHS klasik dan satu yang didasarkan pada PCA .

i.pansharpenberfungsi dengan baik dengan peta raster 8-bit sebagai input. Jika data yang akan diproses berada di luar kisaran ini, maka dari itu [0, 255], data tersebut dapat disusun kembali agar sesuai dengan kisaran ini dengan menggunakan r.rescalemodul GRASS .

Diberikan satu set band spektral 11-bit (misalnya Biru, Hijau, Merah, NIR, dan Pan) yang berkisar di antara [0, 2047], kueri pita Biru misalnya akan kembali

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

Memasang kembali band Biru ke kisaran [0, 255]

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

Langkah yang sama berlaku untuk sisa pita multi-spektral dan pita minat Panchromatic.

Seperti biasa ketika bekerja dengan GRASS, diperlukan untuk mengatur wilayah yang diminati, yaitu untuk mencocokkan tingkat band (s) atau yang lain. Resolusi itu sendiri dijaga dalam kasus khusus ini oleh modul dan hasil peta raster pan-sharpened akan memiliki resolusi tinggi (er) yang sama dengan pita Panchromatic.g.regionrast=Blue_DNs_255

Contoh perintah untuk tindakan Pan-Sharpening berbasis IHS mungkin terlihat seperti

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

Penyeimbang warna

Setelah proses selesai, output modul

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

Biasanya itu harus cukup untuk menyeimbangkan kembali warna setelah penajaman pan dengan menggunakan misalnya modul i.landsat.rgb atau penyesuaian manual masing-masing dari tiga pita yang akan membentuk gambar RGB.

Tangkapan layar

... untuk ditambahkan

Nikos Alexandris
sumber
Saya tahu pasti ada cara yang lebih baik! Sekarang saya dapat dengan bebas menggunakan modul i.sharpen. Terima kasih telah menunjukkan modul r.rescale. Nikos yang luar biasa!
Haziq, saya tidak yakin apakah dan berapa banyak detail "baik" yang hilang ketika mengonversi set data 11-bit menjadi 8-bit. Citra QuickBird, misalnya, adalah sensor 11-bit. Mereka tersedia dalam format 8-bit dan 16-bit. Terserah kepada pengguna untuk memutuskan apa yang harus dilakukan. Tentunya akan menyenangkan untuk i.pansharpenmenangani semua jenis format. Silakan lihat "tiket" terkait: Tiket # 2048: i.pansharpen terbatas pada citra 8-bit . Di sisi lain, saya mungkin tidak mengerti hal-hal dan, dengan demikian, tidak dapat menggunakan i.pansharpen dengan benar ...?
Nikos Alexandris
7

Saya telah mencari tinggi dan rendah, dan saya pikir saya telah menemukan akar masalah saya. Saya yakin saya punya solusi untuk mereka sekarang - tapi agak berantakan. Saya yakin ada cara yang lebih baik untuk menyelesaikannya. Berbagilah jika Anda tahu cara yang lebih mudah!

AKAR MASALAH:

  1. Output dari i.landsat.toar dalam floating point . Saya menyadari bahwa ketika saya menggunakan raster floating point dalam metode pan-sharpening apa pun, warnanya akan berantakan. Algoritme itu entah bagaimana memilih raster dalam bentuk integer asli.
  2. Modul pan-sharpening seperti i.pansharpen dan i.fusion.brovey modul akan mengacaukan warnanya . Saya belum cukup memahami algoritma yang mereka gunakan dalam modul tersebut - tetapi entah bagaimana tabel warna akan terpengaruh, dan merusak gambar pan-sharpening yang dihasilkan.

LARUTAN:

  1. Konversi output dari i.landsat.toar dari float ke int, menggunakan r.recode .
  2. Gunakan raster sebagai input dalam metode penajaman pan IHS ( i.rgb.hisdan i.his.rgb). Saya terus menggunakan i.pansharpendan i.fusion.brovey.

WORKFLOW:

  1. Gunakan r.info dengan -r bendera untuk mendapatkan nilai DN min dan maks dari setiap pita raster yang telah diproses i.landsat.toar. Sebagai contoh:

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

    Seperti yang dapat kita lihat, nilainya antara 0-1, yang sangat berbeda dari yang asli (yaitu antara 0-255). Itu menjelaskan mengapa output dari pan-sharpening ternyata kosong, karena rentang nilai yang digunakan sangat rendah (di bawah 1).

  2. Konversikan band raster itu menggunakan r.recode . Gunakan nilai minimum dan maksimum yang diperoleh dari langkah 1 untuk mengkonversi ke rentang baru 0-255. Cuplikan kode contoh:

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

    Kami dapat memeriksa nilai yang dikonversi baru dengan r.info:

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

    Nilai ada di 0-255: sekarang dapat digunakan untuk proses mengasah pan.

  3. Terapkan tabel warna skala abu-abu dengan pita yang dikonversi r.colors .

    r.colors NEWBAND1 color=grey
    

    Sejauh ini, saya mendapatkan hasil terbaik menggunakan tabel warna abu-abu - komposit yang ditajamkan pan cocok dengan komposit asli. Alternatif lain adalah untuk menyamakan tabel warna abu-abu dengan color=grey.eqatau menggunakan -ebendera dengan color=grey. Atau kita bisa menggunakan i.landsat.rgbmodul, bukan r.colors..

  4. Ulangi langkah 1-3 dengan pita raster lain yang ingin kami gunakan sebagai komposit, termasuk pan raster (band 8). Penggunaan skrip akan sangat dihargai di sini.

  5. Kemudian gunakan raster yang diproses sebagai input dalam metode pan-sharpening IHS . Misalnya, ketika membuat komposit dari band 7,4,2:

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

    Ini akan menghasilkan 3 lapisan: lapisan rona HUE, lapisan intensitas INT, dan juga lapisan saturasi SAT. Kami kemudian akan mengganti layer intensitas INTdengan band pan raster NEWBAND8di i.his.rgb:

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

    Menghasilkan saluran merah pada COMP742_red , COMP742_green , COMP742_blue kemudian dapat digabungkan menggunakan d.rgbatau r.composite..

SAMPEL SEBELUM & SETELAH:

Sebelum mengasah pan:

Sebelum

Setelah pan-sharpening:

Setelah

Mungkin sulit untuk membedakannya , ketika melihat dari gambar sekecil itu. Namun yang penting adalah warna pan-sharpened image cocok dengan komposit dari aslinya. Misi selesai!

CATATAN LAINNYA:

  • Jangan r.recode menggunakan pita termal (pita 6) . i.landsat.toarmengeluarkan pita termal ini dalam nilai suhu Kelvin (tidak ada hubungannya dengan nilai DN). Jaga r.recoderutinitas pada band multi-spektral dan pan normal (band 1-5,7,8).
  • Jika kita bahkan tidak pernah menggunakan i.landsat.toar , tetapi komposit yang dihasilkan terlihat sangat salah , biasanya karena ketidakcocokan tabel warna sebelum dan sesudah proses pan-sharpening. Saya menerapkan r.colors RASTER color=greypada band raster asli sebelum pan-sharpening, dan ke saluran yang dihasilkan setelah pan-sharpening untuk memastikan pencocokan warna.
  • Kasus biasa dari masalah komposit warna yang salah : band raster asli dalam color=grey255, output dari i.landsat.rgbdalam color=grey.eq. Tidak heran mereka berdua terlihat berbeda!
  • Memproses gambar landsat untuk digunakan bisa benar-benar menjadi kegiatan yang menghabiskan waktu . Lebih baik memiliki sesuatu untuk dilakukan ketika menunggu semuanya untuk diproses, atau setidaknya minum kopi dalam jumlah yang menggelikan dan musik yang bagus saat Anda melakukannya;)

Semoga ini bermanfaat bagi seseorang: butuh waktu berhari-hari untuk menemukan apa yang salah ..

Komunitas
sumber
1
Terima kasih atas penelitian dan upaya Anda, saya juga punya masalah ini dalam GRASS 7 baru dari svn. Sekarang warna gambar pansharpened sudah OK. =)
Vladimir
Oh ya, saya lupa menyebutkan versi GRASS yang saya jalankan - terima kasih @VladimirNaumov untuk mengingatkan! Saya menggunakan GRASS 7svn; seharusnya menyadari bahwa masalah ini bisa menjadi sesuatu yang tidak terjadi di semua versi GRASS (saya belum pernah mencoba versi lain) ..
Kembali ke ini: Anda dapat mengonversi peta raster titik mengambang ke integer peta raster dengan menggunakan r.mapcalcbersama dengan fungsinya yang terintegrasi int(). Saya pikir r.recodeini tidak dimaksudkan untuk digunakan dalam konteks aplikasi Anda.
Nikos Alexandris
1
Saya pikir keseluruhan "masalah" mengenai i.pansharpenadalah bahwa ia mengharapkan peta raster 8-bit sebagai input, yaitu nilai input harus berkisar dari 0 hingga 255.
Nikos Alexandris
Juga, perhatikan bahwa i.pansharpenhanya di grass7_trunk. Itu adalah versi pengembangan ... :-)
Nikos Alexandris