¿Cómo equilibrar el color de los falsos compuestos de imágenes Landsat con nitidez panorámica en GRASS?

9

Cada vez que trato de agudizar los compuestos de algunas imágenes Landsat en GRASS utilizando i.pansharpen, i.fusion.broveyo el método de nitidez IHS, la salida tendrá algunas o todas las siguientes características:

  • el color compuesto tiene un tono diferente en comparación con el compuesto no afilado
  • el nivel de brillo está en mal estado
  • todo el compuesto se volvió todo blanco / todo negro (al usar imágenes preprocesadas para la reflectancia de la parte superior de la atmósfera o las correcciones de reflectancia de la superficie i.landsat.toar)

También he intentado todo lo siguiente; pero los colores / brillo se mantuvieron igual o empeoraron aún más:

  • Aplicado i.landsat.rgb, antes y después del proceso de afilado
  • Jugó con la bandera -fo -peni.landsat.rgb
  • Intenté r.colorseditar la tabla de colores a grey / grey255 / grey.eq
  • Intentado i.pansharpenutilizar todos los métodos Brovey / IHS / PCA
  • Jugó con la -lbandera i.pansharpenpara reequilibrar el canal azul

El manual de GRASS GIS sí explicó cómo realizar la nitidez panorámica y el equilibrio de color, pero no puedo entender cómo combinar ambos procesos en un flujo de trabajo concurrente. Sospeché que esto se debe a mi escasa comprensión de las tablas de colores, el histograma de colores, etc. en GRASS.

Entonces, ¿alguien puede explicarme cómo se abordan los problemas de equilibrio de color cuando se trata de imágenes Landsat después del procesamiento de imágenes en GRASS? ¿Puedes compartir conmigo tu flujo de trabajo / métodos favoritos?

Muchas gracias por cualquier comentario!


fuente

Respuestas:

6

Visión general

Un enfoque de trabajo dentro de GRASS-GIS versión 7 para obtener una imagen compuesta de balance de color aceptable después de la nitidez panorámica

  1. comprobar si los datos de entrada tienen un rango de 8 bits dentro de [0, 255]
  2. si los datos están dentro de [0, 255] proceda luego a la nitidez panorámica ( i.pansharpen)
  3. si los datos no están dentro de [0, 255], vuelva a escalarlos a este rango ( r.rescale)
  4. agudizar con cualquiera de los métodos destacados (Brovey, IHS, PCA)
  5. balance de color automáticamente usando el i.landsat.rgbmódulo o ajustando manualmente las tablas de colores de las bandas de interés

Detalles e instrucciones de ejemplo

Pan-Sharpening / Fusion

GRASS 7 cuenta con un módulo dedicado de enfoque panorámico, i.pansharpenque presenta tres técnicas para el enfoque, a saber, la transformación de Brovey , el método clásico de IHS y uno basado en PCA .

i.pansharpenfunciona bien con mapas ráster de 8 bits como entrada. Si los datos a procesar están fuera de este rango, es decir [0, 255], se pueden reescalar para que encajen en este rango utilizando el r.rescalemódulo GRASS .

Dado un conjunto de bandas espectrales de 11 bits (por ejemplo, Azul, Verde, Rojo, NIR y Pan) que varían entre [0, 2047], la consulta de la banda Azul, por ejemplo, devolvería

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

Reescalando la banda azul para variar entre [0, 255]

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

El mismo paso se aplica tanto al resto de las bandas multiespectrales como a la banda pancromática de interés.

Como es habitual cuando se trabaja con GRASS, es necesario establecer la región de interés, es decir, para que coincida con la extensión de la (s) banda (s) o de lo contrario. La resolución en sí es tratada en este caso particular por el módulo y los mapas ráster pan-afilados resultantes tendrán la misma resolución alta (er) que la banda Pancromática.g.regionrast=Blue_DNs_255

Un comando de ejemplo para una acción de enfoque de nitidez basado en IHS podría verse así

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

Equilibrio de color

Después de la finalización del proceso, el módulo genera

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

Normalmente, debería ser suficiente para reequilibrar los colores después del enfoque panorámico utilizando, por ejemplo, el módulo i.landsat.rgb o el ajuste manual de cada una de las tres bandas que compondrían una imagen RGB.

Capturas de pantalla

... para ser añadido

Nikos Alexandris
fuente
¡Sabía que debía haber una mejor manera! Ahora puedo usar libremente el módulo i.sharpen. Gracias por señalar el módulo r.rescale. Impresionante trabajo Nikos!
Haziq, no estoy seguro si y cuánto de los detalles "finos" se pierden al convertir conjuntos de datos de 11 bits a 8 bits. Las imágenes de QuickBird, por ejemplo, son un sensor de 11 bits. Están disponibles en formatos de 8 bits y 16 bits. Depende del usuario decidir qué hacer. Sin duda sería bueno para i.pansharpenmanejar todo tipo de formatos. Eche un vistazo a un "ticket" relacionado: Ticket # 2048: i.pansharpen limitado a imágenes de 8 bits . Por otro lado, es posible que simplemente no entienda las cosas y, por lo tanto, no pueda usar i.pansharpen correctamente ...?
Nikos Alexandris
7

He buscado por todas partes, y creo que he descubierto la raíz de mis problemas. Creo que ahora tengo la solución para ellos, pero es un poco complicado. Estoy seguro de que hay mejores formas de resolverlos. ¡Comparte si conoces una manera más fácil!

RAÍCES DE PROBLEMAS:

  1. La salida de i.landsat.toar está en coma flotante . Me he dado cuenta de que cuando uso rásteres de punto flotante en cualquier método de nitidez panorámica, los colores se desordenarán. Esos algoritmos de alguna manera preferían los rásteres en la forma entera original.
  2. Los módulos de nitidez panorámica como i.pansharpen y los i.fusion.brovey módulos estropearán los colores . No he entendido bien los algoritmos que usaron en esos módulos, pero de alguna manera las tablas de colores se verán afectadas y arruinarán las imágenes resultantes de nitidez panorámica.

SOLUCIÓN:

  1. Convierta la salida de i.landsat.toar float a int, usando r.recode .
  2. Utilice los rásteres como entradas en el método de nitidez panorámica de IHS ( i.rgb.hisy i.his.rgb). Me mantengo alejado de usar i.pansharpeny i.fusion.brovey.

EL FLUJO DE TRABAJO

  1. Use r.info con la -r bandera para obtener los valores mínimos y máximos de DN de cada banda de trama que se haya procesado con i.landsat.toar. Por ejemplo:

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

    Como podemos ver, los valores están entre 0-1, que son bastante diferentes a los originales (que están entre 0-255). Eso explica por qué la salida de la nitidez panorámica quedó en blanco, porque el rango de valor utilizado es muy bajo (por debajo de 1).

  2. Convierta esa banda de trama usando r.recode . Use los valores mínimo y máximo obtenidos del paso 1 para convertir a un nuevo rango de 0-255. Un fragmento de código de ejemplo:

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

    Podemos verificar los nuevos valores convertidos con r.info:

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

    Los valores están en 0-255: ahora es utilizable para el proceso de agudización panorámica.

  3. Aplique la tabla de colores en escala de grises a la banda convertida con r.colors .

    r.colors NEWBAND1 color=grey
    

    Hasta ahora, obtengo los mejores resultados con la tabla de colores grises: los materiales compuestos con nitidez combinada con los materiales originales. Las otras alternativas son igualar la tabla de color gris con color=grey.eqo usar la -ebandera con color=grey. O podemos usar el i.landsat.rgbmódulo en lugar de r.colors...

  4. Repita los pasos 1-3 con otras bandas de trama que pretendemos utilizar como compuestos, incluida la trama panorámica (banda 8). El uso de guiones sería muy apreciado aquí.

  5. Luego use los rásteres procesados ​​como entradas en el método de nitidez panorámica de IHS . Por ejemplo, al hacer el compuesto de la banda 7,4,2:

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

    Esto generará 3 capas: una capa de tono HUE, una capa de intensidad INTy también una capa de saturación SAT. Luego, reemplazaremos la capa de intensidad INTcon la banda de ráster panorámico NEWBAND8en i.his.rgb:

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

    Los canales rojos resultantes de COMP742_red , COMP742_green , COMP742_blue se pueden combinar usando d.rgbo r.composite..

MUESTRA ANTES Y DESPUÉS:

Antes del afilado panorámico:

antes de

Después del afilado panorámico:

Después

Tal vez sea difícil distinguir las diferencias de nitidez cuando se ve desde imágenes tan pequeñas. Pero lo importante es que el color de la imagen con nitidez panorámica coincide con el compuesto del original. ¡Misión cumplida!

OTRAS NOTAS:

  • No r.recode las bandas térmicas (banda 6) . i.landsat.toargenerar estas bandas térmicas en valores de temperatura Kelvin (nada que ver con los valores de DN). Mantenga la r.recoderutina en las bandas multiespectrales y panorámicas normales (bandas 1-5,7,8).
  • Si ni siquiera usamos i.landsat.toar , pero los compuestos resultantes se ven realmente mal , generalmente se debe a la falta de coincidencia de las tablas de colores antes y después del proceso de nitidez panorámica. Apliqué r.colors RASTER color=greya las bandas ráster originales antes del enfoque panorámico, y a los canales resultantes después del enfoque panorámico para asegurar una coincidencia de colores.
  • Un caso habitual del problema compuesto de color incorrecto : las bandas ráster originales están adentro color=grey255, la salida de i.landsat.rgbestá adentro color=grey.eq. ¡No es de extrañar que ambos se vean diferentes!
  • El procesamiento de imágenes de Landsat para su uso realmente podría ser una actividad que requiere mucho tiempo . Es mejor tener algo que hacer cuando espere que todo se procese, o al menos tener una cantidad ridícula de café y buena música mientras lo hace;)

Espero que esto beneficie a alguien: me llevó días encontrar lo que está mal ...

Comunidad
fuente
1
Gracias por su investigación y esfuerzos, también tuve este problema en el nuevo GRASS 7 de svn. Ahora los colores de la imagen con nitidez está bien. =)
Vladimir
Ah, sí, olvidé mencionar qué versión de GRASS estoy ejecutando. ¡Gracias @VladimirNaumov por recordarlo! Estoy usando GRASS 7svn; debería haber dado cuenta de que este problema podría ser algo que no sucede en todas las versiones de la hierba (no he probado otras versiones) ..
Volviendo a esto: puede convertir mapas ráster de coma flotante en mapas ráster enteros utilizando r.mapcalcjunto con su int()función integrada . Creo que r.recodeno está destinado a ser utilizado en el contexto de su aplicación.
Nikos Alexandris
1
Creo que el "problema" general con respecto i.pansharpenes que espera mapas ráster de 8 bits como entrada, es decir, los valores de entrada deben oscilar entre 0 y 255.
Nikos Alexandris
Además, tenga i.pansharpenen cuenta que solo está en grass7_trunk. Esa es la versión de desarrollo ... :-)
Nikos Alexandris