PDA

Ver la Versión Completa : Hillshade en falso color de Marte



Guillermo Luijk
01/12/22, 11:22:54
Con datos de la NASA he dibujado un hillshade (sombreado en pseudo 3D) del relieve de Marte, coloreando las altitudes en falso color con curvas en Photoshop. Como Marte no tiene océanos las altitudes se suelen referir a su altitud media. El punto más alto es Olympus Mons, un volcán con la extensión de Francia y 21,9km de altitud (casi 3 veces lo que el Everest sobre el nivel del mar), y el más bajo es la gigante depresión Hellas Planitia (-7,2km) situada en el hemisferio sur pese a que la mitad norte del planeta tenga las altitudes más bajas.

Fuente datos DEM:
https://astrogeology.usgs.gov/search/map/Mars/GlobalSurveyor/MOLA/Mars_MGS_MOLA_DEM_mosaic_global_463m

La imagen la he construido a 32Mpx, pero es que el mapa de elevaciones de la NASA tiene una resolución brutal de 1Gpx!

http://guillermoluijk.com/datosimagensonido/mars.jpg

Arriba a la izquierda del mapa, el Olympus Mons es un volcán marciano extinguido de la extensión de Francia y una altitud respecto al área circundante de casi tres Everest (21,9km), siendo la mayor montaña conocida del Sistema Solar.

Con un mapa digital de altitudes de Marte de la NASA se ha generado por un lado el color de la imagen en función de la altitud, y por otro la luminosidad de un relieve hillshade calculando las pendientes del terreno respecto a una luz incidente. Finalmente se añade un gradiente para simular el amanecer.
Todo el código en R base sin usar ningún paquete. Coloreado con curvas en Photoshop.

https://i.ibb.co/SRZjRQX/olympusmonssunrise.jpg (https://ibb.co/RzJFzhp)

Salu2!

u420067
01/12/22, 16:26:15
Como siempre, Guillermo, gracias por compartir tus creaciones.
Un saludo

NerveNet
01/12/22, 16:47:09
Excelente Guillermo.

Vale, ya tenemos un mapa. ¿Y dónde están las playas?

pepelahuerta
01/12/22, 17:27:21
Gracias Guillermo, el tamaño del Olympus Mons es una pasada, difícil de imaginar. Saludos

mikelius
01/12/22, 18:11:42
Tremenda la foto y los datos !!!.
Gracias por compartir.

Dr. Mabuse
01/12/22, 18:26:38
Muy interesante. La altura máxima de montañas y volcanes viene determinada por la gravedad del planeta y la de Marte es menos de la mitad de la Tierra. En nuestro planeta no podría existir el Olympus mons.

Guillermo Luijk
01/12/22, 18:33:29
Por cierto a modo de curiosidad, los datos de la NASA (he puesto el enlace) indicando la altitud en cada punto de Marte, están en un archivo TIF monocromo que puede abrirse en Photoshop, pero en una codificación poco habitual: enteros de 16 bits con signo, donde cada unidad es 1m (es decir si un pixel vale 12.000 está 12km por encima de la altitud media del planeta, uno que valga -5.000 está 5km por debajo). A lo que voy: Photoshop no admite valores negativos así que abre el archivo pero lo interpreta mal, partiendo el histograma de modo que las partes de menor altitud quedan en las altas luces y las más altas (como el volcán) en las sombras, con una franja vacía enorme entre ellas. Numéricamente se corrige muy fácil, pero en Photoshop la cosa está más jodida.

Si no tenéis un ordenador un poco potente se os puede quedar bastante frito del PC al abrir el TIF.

Salu2!

NerveNet
01/12/22, 18:41:22
Por cierto a modo de curiosidad, los datos de la NASA (he puesto el enlace) indicando la altitud en cada punto de Marte, están en un archivo TIF monocromo que puede abrirse en Photoshop (https://clk.tradedoubler.com/click?p=264313&a=3000608&g=22913596&epi=text2linkPS&url=https://www.adobe.com/es/creativecloud/plans.html), pero en una codificación poco habitual: enteros de 16 bits con signo, donde cada unidad es 1m (es decir si un pixel vale 12.000 está 12km por encima de la altitud media del planeta, uno que valga -5.000 está 5km por debajo). A lo que voy: Photoshop (https://clk.tradedoubler.com/click?p=264313&a=3000608&g=22913596&epi=text2linkPS&url=https://www.adobe.com/es/creativecloud/plans.html) no admite valores negativos así que abre el archivo pero lo interpreta mal, partiendo el histograma de modo que las partes de menor altitud quedan en las altas luces y las más altas (como el volcán) en las sombras, con una franja vacía enorme entre ellas. Numéricamente se corrige muy fácil, pero en Photoshop (https://clk.tradedoubler.com/click?p=264313&a=3000608&g=22913596&epi=text2linkPS&url=https://www.adobe.com/es/creativecloud/plans.html) la cosa está más jodida.

Si no tenéis un ordenador un poco potente se os puede quedar bastante frito del PC al abrir el TIF.

Salu2!

¿Entonces has tenido que generar un TIF trasladando los valores de cada pixel de enteros con signo a enteros sin signo?

Guillermo Luijk
01/12/22, 20:43:37
¿Entonces has tenido que generar un TIF trasladando los valores de cada pixel de enteros con signo a enteros sin signo?
Exacto, pero la transformación la he hecho numéricamente, mira qué sencillo resulta en R:


DEM[DEM>=32768] = DEM[DEM>=32768] - 65536

Lo curioso de la librería de R que lee el TIFF es que te avisa de que está en formato entero con signo, pero aún así la lee mal y por eso obliga a la corrección anterior. Que digo yo, tío jodido si sabes en qué formato está, por qué no la interpretas correctamente no? éste es el mensaje que sale al leer el TIF de la NASA:

"tiff package currently only supports unsigned integer or float sample formats in direct mode, but the image contains signed integer format it will be treated as unsigned"

Salu2!

NerveNet
01/12/22, 21:14:13
Exacto, pero la transformación la he hecho numéricamente, mira qué sencillo resulta en R:


DEM[DEM>=32768] = DEM[DEM>=32768] - 65536

Lo curioso de la librería de R que lee el TIFF es que te avisa de que está en formato entero con signo, pero aún así la lee mal y por eso obliga a la corrección anterior. Que digo yo, tío jodido si sabes en qué formato está, por qué no la interpretas correctamente no? éste es el mensaje que sale al leer el TIF de la NASA:

"tiff package currently only supports unsigned integer or float sample formats in direct mode, but the image contains signed integer format it will be treated as unsigned"

Salu2!

El código me es rarito, ten presente que programo en C, Perl (que también se la trae) y Python.

Lo de la librería lo veo normal, ya sabes, depende del programador y de las librerías que dependan de ello.

Guillermo Luijk
01/12/22, 21:51:22
El código me es rarito, ten presente que programo en C, Perl (que también se la trae) y Python.
La sintaxis es más práctica que la de Python. C directamente no es rival para este tipo de procesados, en C cualquier programa R sería una colección interminable de bucles. Seguro que si te pongo esto deduces lo que hace:

DEM[DEM<0] = 0

Luego hay usos que pueden parecer más ofuscados pero una vez se conocen resultan obvios. No creo que pueda existir un lenguaje que haga lo que hace esta rutina HDR con menos líneas:

https://github.com/gluijk/hdr-r/blob/master/hdr.R

- Lee dos imágenes en TIFF
- Calcula la exposición relativa de una respecto a la otra y dibuja el histograma de exposiciones relativas
- Genera una imagen sintética indicando los canales/píxeles usados en el cálculo anterior
- Fusiona las dos imágenes igualando previamente sus exposiciones y tomando siempre los canales no saturados de mayor nivel (menor ruido), guardando el resultado en TIFF con gamma
- Para terminar genera otra imagen sintética con el mapa de fusión que indica de qué imagen proviene cada canal/píxel

Salu2!

u420067
02/12/22, 16:45:39
La sintaxis es más práctica que la de Python. C directamente no es rival para este tipo de procesados, en C cualquier programa R sería una colección interminable de bucles. seguro (https://bit.ly/segurofoto) que si te pongo esto deduces lo que hace:

DEM[DEM<0] = 0

Luego hay usos que pueden parecer más ofuscados pero una vez se conocen resultan obvios. No creo que pueda existir un lenguaje que haga lo que hace esta rutina HDR con menos líneas:

https://github.com/gluijk/hdr-r/blob/master/hdr.R

- Lee dos imágenes en TIFF
- Calcula la exposición relativa de una respecto a la otra y dibuja el histograma de exposiciones relativas
- Genera una imagen sintética indicando los canales/píxeles usados en el cálculo anterior
- Fusiona las dos imágenes igualando previamente sus exposiciones y tomando siempre los canales no saturados de mayor nivel (menor ruido), guardando el resultado en TIFF con gamma
- Para terminar genera otra imagen sintética con el mapa de fusión que indica de qué imagen proviene cada canal/píxel

Salu2!
Lástima que estas cosas me pillan mayor, con lo que me ha gustado programar...

NerveNet
02/12/22, 17:27:47
Lástima que estas cosas me pillan mayor, con lo que me ha gustado programar...

Nunca es tarde, hace un par de años me reenganche con C/C++ por medio de Arduino, de paso también a hacer circuitos digitales como en los '80. Ya sólo me falta volver a programar en lenguaje máquina con un depurador o un ensamblador...

Guillermo Luijk
02/12/22, 17:33:16
Lástima que estas cosas me pillan mayor, con lo que me ha gustado programar...
Bueno yo a esto no lo llamo programación, programar es otro nivel. Y es que escribir código no es igual que escribir programas. Para escribir programas necesitas un lenguaje rápido (es decir compilable), que genere un programa, así que no sirven estos lenguajes de ultra-alto nivel que hacen la vida fácil a quien analiza cosas pero no sirven para hacer programas. En un programa, además de las cosas divertidas (las tripas que ejecutan los algoritmos), has de diseñar un interface de usuario que sea entendible y funcional, y que esté preparado para un usuario torpe. En definitiva es una trabajera en cosas poco divertidas (al menos para mí). Me hace gracia oir a gente decir "programo en Python" y luego su código consiste en cargar 40 librerías ultraespecializadas que lo hacen todo con unas pocas llamadas a funciones hiper parametrizadas. Eso no es programar, eso es igual que poner funciones en un Excel.

No sé qué edad tienes, pero lo que sí te aseguro es que si tienes un portátil y ganas, aprender a escribir código (no programar) y hacer tus propios análisis de cosas como imágenes está al alcance de cualquiera.

Qué hace DEM[DEM<0]=0? (por cierto DEM es un nombre que yo he escogido, Digital Elevation Model porque es un mapa, podría haberlo llamado Pepito).

- DEM es una imagen, o mejor dicho una matriz de números (alto=filas x ancho=columnas) que contiene una imagen, un número en cada posición de la matriz (píxel) que indica su nivel en escala de grises.
- DEM[DEM<0] devuelve todos los píxeles que tengan un valor negativo, precisamente porque en general los programas de imágenes no reconocen valores negativos, están en el rango 0..255 en 8 bits, o 0..65535 en 16 bits. Esa orden lo que está diciendo es "dame de DEM todos los píxeles con un valor negativo".
- DEM[DEM<0]=0 asigna el valor 0 todos esos píxeles que han acabado teniendo valores negativos, porque a continuación voy a guardar esa imagen (matriz) como TIFF y no quiero que Photoshop se vuelva loco al abrirla.

Pues con una sola línea hemos recortado a 0 todos los valores de píxeles que eran negativos, ves qué fácil?

Salu2!

XATRAC
02/12/22, 20:20:24
Lástima que estas cosas me pillan mayor, con lo que me ha gustado programar...

Parece que por aquí somos unos cuantos los que nos hemos dedicado a esto. En mi caso trabajaba en mainframe y programaba en PL/I, SAS, DB2, REXX, SQL, Easytrieve... Ya ha llovido lo suyo. Ahora enun PC tant sólo soy un simple usuario del montón, ya me cansa intentar entrar en las tripas.

Un saludo.

Guillermo Luijk
03/12/22, 01:03:20
El Olympus Mons es un volcán marciano extinguido de la extensión de Francia y una altitud respecto al área circundante de casi tres Everest (21,9km), siendo la mayor montaña conocida del Sistema Solar.

Con un mapa digital de altitudes de Marte de la NASA se ha generado por un lado el color de la imagen en función de la altitud, y por otro la luminosidad de un relieve hillshade calculando las pendientes del terreno respecto a una luz incidente. Finalmente se añade un gradiente para simular el amanecer.
Todo el código en R base sin usar ningún paquete. Coloreado con curvas en Photoshop.

https://i.ibb.co/SRZjRQX/olympusmonssunrise.jpg (https://ibb.co/RzJFzhp)

Si alguien tiene curiosidad en el proceso de capas:
http://guillermoluijk.com/misc/olympusmonssunrise.tif

Salu2!

u420067
03/12/22, 17:40:13
Parece que por aquí somos unos cuantos los que nos hemos dedicado a esto. En mi caso trabajaba en mainframe y programaba en PL/I, SAS, DB2, REXX, SQL, Easytrieve... Ya ha llovido lo suyo. Ahora enun PC tant sólo soy un simple usuario del montón, ya me cansa intentar entrar en las tripas.

Un saludo.
Yo, por pura afición, comencé a programar en los 80 con BASIC, y después seguí con C, Visual Basic, programas en dBase y mucho código para hojas Excel. No he sido informático profesional nunca pero en las empresas en las que he trabajado, del sector asegurador, he hecho muchos programas para uso en Pcs, además de instalar sistemas operativos y programas en ordenadores personales de compañeros, tanto de trabajo como privados, cuando encendías un Pc y, si lo habías conectado todo bien, aparecía en la pantalla algo como C: y un cursor parpadeando. Por cierto y como decía mi madre, ni agradecido ni pagado, pero eso es otra historia.
Saludos

u420067
03/12/22, 17:44:55
Bueno yo a esto no lo llamo programación, programar es otro nivel. Y es que escribir código no es igual que escribir programas. Para escribir programas necesitas un lenguaje rápido (es decir compilable), que genere un programa, así que no sirven estos lenguajes de ultra-alto nivel que hacen la vida fácil a quien analiza cosas pero no sirven para hacer programas. En un programa, además de las cosas divertidas (las tripas que ejecutan los algoritmos), has de diseñar un interface de usuario que sea entendible y funcional, y que esté preparado para un usuario torpe. En definitiva es una trabajera en cosas poco divertidas (al menos para mí). Me hace gracia oir a gente decir "programo en Python" y luego su código consiste en cargar 40 librerías ultraespecializadas que lo hacen todo con unas pocas llamadas a funciones hiper parametrizadas. Eso no es programar, eso es igual que poner funciones en un Excel.

No sé qué edad tienes, pero lo que sí te aseguro es que si tienes un portátil y ganas, aprender a escribir código (no programar) y hacer tus propios análisis de cosas como imágenes está al alcance de cualquiera.

Qué hace DEM[DEM<0]=0? (por cierto DEM es un nombre que yo he escogido, Digital Elevation Model porque es un mapa, podría haberlo llamado Pepito).

- DEM es una imagen, o mejor dicho una matriz de números (alto=filas x ancho=columnas) que contiene una imagen, un número en cada posición de la matriz (píxel) que indica su nivel en escala de grises.
- DEM[DEM<0] devuelve todos los píxeles que tengan un valor negativo, precisamente porque en general los programas de imágenes no reconocen valores negativos, están en el rango 0..255 en 8 bits, o 0..65535 en 16 bits. Esa orden lo que está diciendo es "dame de DEM todos los píxeles con un valor negativo".
- DEM[DEM<0]=0 asigna el valor 0 todos esos píxeles que han acabado teniendo valores negativos, porque a continuación voy a guardar esa imagen (matriz) como TIFF y no quiero que Photoshop (https://clk.tradedoubler.com/click?p=264313&a=3000608&g=22913596&epi=text2linkPS&url=https://www.adobe.com/es/creativecloud/plans.html) se vuelva loco al abrirla.

Pues con una sola línea hemos recortado a 0 todos los valores de píxeles que eran negativos, ves qué fácil?

Salu2!
Lo que he hecho bastante es escribir programas, en la forma en que, magistralmente, lo has definido. Estoy cerca de la edad ordinaria de jubilación, no descarto echar un ojo a esas herramientas que mencionas.
Gracias y perdona por contaminar el contenido de tu tema.
Un saludo

bonimorales
06/12/22, 21:40:08
No me cansare nunca de agradecerte, las molestias y el tiempo que empleas en mostrarnos estas cosas tan interesantes que nos traes de vez en cuando.

Muchas gracias Guillermo..:aplausos

Saludos de Boni.

Ignacio J.
08/12/22, 07:39:23
Lo único que puedo decir es que me ha gustado la imagen, saludos.