Làm cách nào để cân bằng màu sắc các vật liệu tổng hợp giả của hình ảnh Landsat được làm sắc nét trong GRASS?


9

Bất cứ khi nào tôi cố gắng composit để pan-sắc nét của một số hình ảnh Landsat trong GRASS sử dụng i.pansharpen, i.fusion.broveyhoặc IHS phương pháp mài, đầu ra sẽ có một số hoặc tất cả các đặc điểm sau:

  • màu tổng hợp ở một màu khác so với hỗn hợp không được làm sắc
  • mức độ sáng bị rối
  • toàn bộ hỗn hợp chuyển sang màu trắng / đen toàn bộ (khi sử dụng hình ảnh được xử lý trước để phản xạ trên không khí hoặc hiệu chỉnh phản xạ bề mặt trong i.landsat.toar)

Tôi cũng đã thử tất cả những điều sau đây; nhưng màu sắc / độ sáng vẫn giữ nguyên hoặc thậm chí còn tệ hơn:

  • Áp dụng i.landsat.rgb, trước và sau quá trình mài sắc
  • Chơi với -fhoặc -pcờ trongi.landsat.rgb
  • Đã thử r.colorschỉnh sửa bảng màu thành màu xám / grey255 / grey.eq
  • Đã thử i.pansharpensử dụng tất cả các phương pháp Brovey / IHS / PCA
  • Chơi với -lcờ i.pansharpenđể cân bằng lại kênh màu xanh

Các nhãn hiệu GRASS GIS đã giải thích làm thế nào để thực hiện pan-mài và màu sắc cân bằng, nhưng tôi không thể tìm ra cách để kết hợp cả hai quá trình trong một quy trình làm việc đồng thời. Tôi nghi ngờ rằng điều này là do sự hiểu biết kém của tôi về bảng màu, biểu đồ màu, v.v. trong GRASS ..

Vì vậy, ai đó có thể giải thích cho tôi - làm thế nào để bạn giải quyết các vấn đề cân bằng màu khi xử lý ảnh Landsat sau khi xử lý ảnh trong GRASS? Bạn có thể chia sẻ với tôi quy trình / phương pháp yêu thích của bạn không?

Rất cám ơn cho bất kỳ thông tin phản hồi!

Câu trả lời:


6

Tổng quat

Một cách tiếp cận hoạt động bên trong GRASS-GIS phiên bản 7 để có được hình ảnh tổng hợp cân bằng màu chấp nhận được sau khi làm sắc nét là

  1. kiểm tra xem dữ liệu đầu vào có nằm trong phạm vi 8 bit bên trong [0, 255]
  2. nếu dữ liệu nằm trong [0, 255] thì tiến hành mài sắc ( i.pansharpen)
  3. nếu dữ liệu không nằm trong [0, 255], hãy chuyển chúng về phạm vi này ( r.rescale)
  4. làm sắc nét với bất kỳ phương pháp đặc trưng nào (Brovey, IHS, PCA)
  5. tự động cân bằng màu bằng cách sử dụng i.landsat.rgbmô-đun hoặc điều chỉnh thủ công các bảng màu của các dải quan tâm

Chi tiết và hướng dẫn ví dụ

Pan-Sharpening / Fusion

GRASS 7 giữ một mô-đun mài sắc chuyên dụng, i.pansharpencó ba kỹ thuật để mài, đó là biến đổi Brovey , phương pháp IHS cổ điển và một mô-đun dựa trên PCA .

i.pansharpenhoạt động tốt với bản đồ raster 8 bit làm đầu vào. Nếu dữ liệu được xử lý nằm ngoài phạm vi này, nằm ngoài phạm vi đó [0, 255], chúng có thể được định cỡ lại để phù hợp với phạm vi này bằng cách sử dụng r.rescalemô-đun GRASS ' .

Cho một tập hợp các dải phổ 11 bit (ví dụ: Xanh lam, Xanh lục, Đỏ, NIR và Pan) nằm giữa [0, 2047], việc truy vấn dải Xanh lam chẳng hạn sẽ trả về

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

Thay đổi kích thước dải màu xanh trong phạm vi giữa [0, 255]

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

Bước tương tự áp dụng cho cả phần còn lại của các dải đa phổ và dải quan tâm Panchromatic.

Như thường lệ khi làm việc với GRASS, bắt buộc phải đặt vùng quan tâm, nghĩa là phù hợp với phạm vi của (các) băng tần hoặc khác. Độ phân giải được chăm sóc trong trường hợp cụ thể này bởi mô-đun và các bản đồ raster được mài sắc sẽ có cùng độ phân giải (er) cao như dải Panchromatic.g.regionrast=Blue_DNs_255

Một lệnh ví dụ cho hành động Pan-Sharpening dựa trên IHS có thể trông giống như

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

Cân bằng màu

Sau khi hoàn thành quá trình, mô-đun đầu ra

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

Thông thường, nó phải đủ để cân bằng lại màu sắc sau khi làm sắc nét bằng cách sử dụng mô-đun i.landsat.rgb hoặc điều chỉnh thủ công từng dải trong ba dải sẽ tạo thành hình ảnh RGB.

Ảnh chụp màn hình

... được thêm vào


Tôi biết phải có một cách tốt hơn! Bây giờ tôi có thể tự do sử dụng mô-đun i.sharpen. Cảm ơn đã chỉ ra mô-đun r.rescale. Nikos làm việc tuyệt vời!

Haziq, tôi không chắc chắn liệu có mất bao nhiêu chi tiết "tốt" khi chuyển đổi tập dữ liệu 11 bit thành 8 bit hay không. Hình ảnh QuickBird, ví dụ, là một cảm biến 11 bit. Chúng có sẵn ở cả định dạng 8 bit và 16 bit. Tùy thuộc vào người dùng quyết định phải làm gì. Nó chắc chắn sẽ là tốt đẹp i.pansharpenđể xử lý tất cả các loại định dạng. Vui lòng xem "vé" liên quan: Vé số 2048: i.pansharpen giới hạn ở hình ảnh 8 bit . Mặt khác, đơn giản là tôi có thể không hiểu nội dung và do đó, không thể sử dụng i.pansharpen đúng cách ...?
Nikos Alexandris

7

Tôi đã tìm kiếm cao và thấp, và tôi nghĩ rằng tôi đã phát hiện ra gốc rễ của các vấn đề của mình. Tôi tin rằng tôi đã có giải pháp cho họ bây giờ - nhưng nó hơi lộn xộn. Tôi chắc chắn có nhiều cách tốt hơn để giải quyết chúng. Hãy chia sẻ nếu bạn biết một cách dễ dàng hơn!

ROOTS VẤN ĐỀ:

  1. Đầu ra của i.landsat.toar là trong điểm nổi . Tôi đã nhận ra rằng khi tôi sử dụng các trình quét điểm nổi trong bất kỳ phương pháp làm sắc nét nào, màu sắc sẽ bị rối. Những thuật toán này bằng cách nào đó ưa thích raster ở dạng số nguyên ban đầu.
  2. Các mô-đun làm sắc nét như i.pansharpen i.fusion.brovey các mô-đun sẽ làm rối màu sắc . Tôi hoàn toàn không nắm bắt được các thuật toán mà chúng sử dụng trong các mô-đun đó - nhưng bằng cách nào đó, các bảng màu sẽ bị ảnh hưởng và làm hỏng các hình ảnh được làm sắc nét.

GIẢI PHÁP:

  1. Chuyển đổi đầu ra từ i.landsat.toar float sang int, sử dụng r.recode .
  2. Sử dụng các raster làm đầu vào trong phương pháp mài sắc IHS ( i.rgb.hisi.his.rgb). Tôi tránh xa việc sử dụng i.pansharpeni.fusion.brovey.

CÔNG VIỆC:

  1. Sử dụng r.info với -r cờ để lấy giá trị tối thiểu và tối thiểu của từng dải raster đã được xử lý i.landsat.toar. Ví dụ:

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

    Như chúng ta có thể thấy, các giá trị nằm trong khoảng 0-1, khá khác so với giá trị ban đầu (nằm trong khoảng 0-255). Điều đó giải thích tại sao đầu ra từ quá trình làm sắc nét trở nên trống rỗng, bởi vì phạm vi giá trị được sử dụng rất thấp (dưới 1).

  2. Chuyển đổi băng raster đó bằng cách sử dụng r.recode . Sử dụng các giá trị tối thiểu và tối đa thu được từ bước 1 để chuyển đổi sang phạm vi mới 0-255. Một đoạn mã ví dụ:

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

    Chúng tôi có thể kiểm tra các giá trị chuyển đổi mới với r.info:

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

    Các giá trị nằm trong 0-255: bây giờ có thể sử dụng cho quy trình mài sắc.

  3. Áp dụng bảng màu thang màu xám cho dải được chuyển đổi với r.colors .

    r.colors NEWBAND1 color=grey
    

    Cho đến nay, tôi nhận được kết quả tốt nhất bằng cách sử dụng bảng màu xám - vật liệu tổng hợp được mài sắc phù hợp chặt chẽ với vật liệu tổng hợp ban đầu. Các lựa chọn thay thế khác là cân bằng bảng màu xám với color=grey.eqhoặc sử dụng -ecờ với color=grey. Hoặc chúng ta có thể sử dụng i.landsat.rgbmô-đun thay vì r.colors..

  4. Lặp lại bước 1-3 với các dải raster khác mà chúng tôi dự định sẽ sử dụng làm vật liệu tổng hợp, bao gồm cả raster pan (dải 8). Sử dụng các kịch bản sẽ được nhiều đánh giá cao ở đây.

  5. Sau đó sử dụng các raster đã xử lý làm đầu vào trong phương pháp mài sắc IHS . Ví dụ: khi tạo hỗn hợp của băng tần 7,4,2:

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

    Điều này sẽ tạo ra 3 lớp: một lớp màu HUE, một lớp cường độ INTvà cũng là một lớp bão hòa SAT. Sau đó chúng tôi sẽ thay thế lớp cường độ INTbằng dải raster pan NEWBAND8trong i.his.rgb:

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

    Kết quả là các kênh màu đỏ của COMP742_red , COMP742_green , COMP742_blue sau đó có thể được kết hợp bằng cách sử dụng d.rgbhoặc r.composite..

MẪU TRƯỚC & SAU:

Trước khi mài chảo:

Trước

Sau khi mài chảo:

Sau

Có lẽ thật khó để nói sự khác biệt rõ nét , khi xem từ những hình ảnh nhỏ như vậy. Nhưng điều quan trọng là màu sắc của hình ảnh được làm sắc nét phù hợp với hỗn hợp từ bản gốc. Nhiệm vụ đã hoàn thành!

THÔNG BÁO KHÁC:

  • Không dùng r.recode các dải nhiệt (băng 6) . i.landsat.toarxuất các dải nhiệt này theo các giá trị nhiệt độ Kelvin (không liên quan gì đến các giá trị DN). Giữ r.recodethói quen trên các dải đa phổ và pan bình thường (các dải 1-5,7,8).
  • Nếu chúng ta thậm chí không bao giờ sử dụng i.landsat.toar , nhưng các vật liệu tổng hợp thu được trông thực sự sai , thường là do sự không khớp của các bảng màu trước và sau quá trình mài sắc. Tôi đã áp dụng r.colors RASTER color=greycho các dải raster ban đầu trước khi mài pan và cho các kênh kết quả sau khi mài pan để đảm bảo màu sắc gần giống nhau.
  • Một trường hợp thông thường của vấn đề hỗn hợp sai màu : các dải raster ban đầu nằm trong color=grey255, đầu ra của i.landsat.rgblà trong color=grey.eq. Không có gì ngạc nhiên khi cả hai trông khác nhau!
  • Xử lý hình ảnh Landsat để sử dụng thực sự có thể là một hoạt động đánh thuế thời gian . Tốt hơn là nên làm gì đó khi chờ tất cả xử lý, hoặc ít nhất là có một lượng cà phê lố bịch và âm nhạc hay trong khi bạn ở đó;)

Hy vọng điều này sẽ có lợi cho ai đó: tôi đã mất nhiều ngày để tìm ra những gì sai ..


1
Cảm ơn nghiên cứu và nỗ lực của bạn, tôi cũng đã gặp vấn đề này trong GRASS 7 mới từ svn. Bây giờ màu sắc của hình ảnh pansharpened là OK. =)
Vladimir

Ồ vâng, tôi đã quên đề cập đến phiên bản GRASS nào tôi đang chạy - cảm ơn @VladimirNaumov đã nhắc nhở! Tôi đang sử dụng GRASS 7svn; nên nhận ra rằng vấn đề này có thể là điều không xảy ra trên tất cả các phiên bản GRASS (Tôi chưa thử các phiên bản khác) ..

Quay lại vấn đề này: bạn có thể chuyển đổi các bản đồ raster dấu phẩy động thành các bản đồ raster số nguyên bằng cách sử dụng r.mapcalccùng với int()chức năng tích hợp của nó . Tôi nghĩ rằng r.recodekhông có nghĩa là được sử dụng trong bối cảnh ứng dụng của bạn.
Nikos Alexandris

1
Tôi nghĩ rằng "vấn đề" chung i.pansharpenlà nó dự kiến ​​các bản đồ raster 8 bit là đầu vào, tức là các giá trị đầu vào phải nằm trong khoảng từ 0 đến 255.
Nikos Alexandris

Ngoài ra, lưu ý rằng i.pansharpenchỉ trong grass7_trunk. Đó là phiên bản phát triển ... :-)
Nikos Alexandris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.