PDA

Ver la Versión Completa : Ingeniería inversa de curvas RGB. Aplicación: virados y filtros Instagram



Guillermo Luijk
27/09/17, 21:23:28
Para practicar procesado de imágenes con R (un lenguaje de procesado de datos), he escrito una rutina que calcula las curvas RGB que se usaron para pasar de una imagen inicial a su resultado:

INICIAL
https://1.bp.blogspot.com/-waVmGIgpywU/WcfRgdAoKmI/AAAAAAAABF4/0Tg6mGIG-vE7Q8S_x2oCOTEqBuZ-TXG0wCLcBGAs/s1600/mazingerantes.png

RESULTADO
https://3.bp.blogspot.com/-yVE1fkaPIm8/WcfSS3rHeuI/AAAAAAAABGE/tmD8oOEgpHsPL8ovEqf7j-HgyJotUfm5ACLcBGAs/s1600/mazingerdespues.png

CURVAS RGB CALCULADAS
https://1.bp.blogspot.com/-u_Nb25NCYrQ/WcfUAaK26lI/AAAAAAAABHE/jAK1tgjD0ws21QHgosTpJcrCPagVz_JGACEwYBhgL/s1600/curvasrgb.png


El proceso se puede aplicar a cualquier imagen en BN virada para copiar sus tonos, y entonces aplicárselos a una foto nuestra:

IMAGEN VIRADA
https://4.bp.blogspot.com/-0s6lGu6jeRQ/WcfcfY-F_6I/AAAAAAAABGo/UQR1DX7ncXUu7w1ZUI1uKEzrN7Mb5eEEwCLcBGAs/s1600/virado.png

CURVAS RGB CALCULADAS
https://1.bp.blogspot.com/-0WVRJZ704tI/WcfelYdUBDI/AAAAAAAABG4/h6Y96mGuxIUsIeHyUAkLdKvl7feMcoZogCLcBGAs/s1600/curvasvirado.png

VIRADO DE NUESTRA IMAGEN
https://2.bp.blogspot.com/-PfthE0LeCJ8/Wcfe7wZH2PI/AAAAAAAABHA/VX2Ao79k8vUNuCpo8yi3l77Q6sLh3FgHgCLcBGAs/s1600/floresviradas.png


Por último he analizado dos filtros de Instagram para ver si se pueden modelar bien con curvas RGB. Viendo que el resultado es casi indistinguible del filtro Instagram diría que estos filtros son puras curvas:

CURVAS RGB CALCULADAS
https://2.bp.blogspot.com/-IM_AvtNABMA/WchIGnobLUI/AAAAAAAABHk/wXLE8W9xIu0bFWRMhxn1uGY4rAbkPfLWQCLcBGAs/s1600/curvasrgb1977.pnghttps://2.bp.blogspot.com/-vxfvywedubs/WchIMIScYTI/AAAAAAAABHo/ep8rOrp-U9UITAt-vAJzWzIuI8uLN2cSwCLcBGAs/s1600/curvasrgblordkelvin.png

INSTAGRAM vs CURVAS RGB CALCULADAS
https://4.bp.blogspot.com/-S6bOOVnjarI/WchRRNQgO8I/AAAAAAAABII/zWUTtk56AnUruCUlWKfGPkgSfytSSNIUgCLcBGAs/s1600/instagram.png


A quien le interese tiene la explicación detallada:

Ingeniería inversa de curvas RGB con R (http://www.elmomentodecisivo.com/2017/09/ingenieria-inversa-de-curvas-rgb-con-r.html)

Salu2!

jcaneiro
28/09/17, 16:14:49
Buenas Guillermo:

Gracias por compartir tu ejercicio de hackeo y programación.

Me faltan muchos conocimientos para valorar la dificultad que conlleva:
Nunca había visto código R (se que se usa para análisis estadísticos y punto)

Yendo al apartado práctico:
Siempre que las curvas sean estrictamente monótonas (de cara a un procesado fotográfico la mayoría lo serán), ¿se podría realizar un "copiador de efectos" que nos hiciese cualquier otro software en base a un original que le demos y al resultado que genere?
Sería un generador curvas RGB que podemos importar a nuestro software preferido.

Yo no soy muy de efectos de este tipo, pero podría resultar interesante, la parte sucia del backend ya la tienes hecha y se podría hasta lanzar desde línea de comandos

Un saludo

Guillermo Luijk
28/09/17, 20:38:11
No tiene dificultad, se trata de comparar cada píxel de salida con su entrada. Si un píxel en la imagen procesada vale 50, y ese mismo píxel en la imagen original vale 46, pues ya tienes un punto de la curva: (46,50). En realidad para tener muy bien definida una curva de cualquier procesado basta pasar por dicho procesado esta imagen de 16x16 píxeles:

http://www.guillermoluijk.com/misc/test.png

Si encuentras por ahí algún procesado que piensas se pueda basar en curvas, aplícaselo a ese cuadradito y pon el resultado.

No lo he hecho por la dificultad sino para practicar con R, que tiene una notación especial con ventajas para tratar matrices (y una imagen es una matriz).

No hace falta que las curvas sean monótonas para calcularlas, se pueden calcular siempre. Lo que digo en el artículo es que deben ser monótonas para que exista una curva de vuelta que deshaga el procesado. Es decir que para que exista una curva que de la imagen procesada restaure la original, sí que es preciso que las curvas del procesado sean estríctamente monótonas.

Hace años hice un hackeador de tonos en formato aplicación pero ahora mismo ya no me interesa hacer programas.

http://www.guillermoluijk.com/software/tonehacker/index.htm

Salu2!

jcaneiro
28/09/17, 21:33:39
Si ya sabía yo que estaba todo inventado... X-)

¿No tendrás versión para Mac, verdad? O:-)

kroma
28/09/17, 22:14:08
Ostras, yo en alguna ocasión he hecho ésto "manualmente".. osea editando hasta dejar una fotografía con colores reales para saber qué revelado se le había aplicado. Y pensaba "ésto seguro que se podría automatizar".

Por curiosidad ¿cómo se trabaja con ésta rutina? ¿Es un ejecutable sobre el que vuelcas la foto? ¿Va a tener forma de plugin para photoshop o algo similar?

Saludos

Philip J Fry
29/09/17, 03:01:47
Esto me habría venido de perlas hace un año cuando una amiga quería que le hiciera un video con fotos suyas (de Instagram y otras apps), cuyos “filtros” las habían dejado muy fastidiadas y traté de hacer que quedaran lo mejor posible pero fue mucho curro para mí y no quedaron tan bien

u420067
29/09/17, 11:10:11
Como siempre, Guillermo, muchas gracias por tus aportaciones. Lo voy a ver con calma, ojalá pueda entender algo...

subiyama
29/09/17, 13:18:19
Muy interesante!!!
para quien lo sepa usar puede ahorrar dolores de cabeza al tratar de emular tonos.
sigo el hilo, graciass

Guillermo Luijk
29/09/17, 15:27:23
Esto me habría venido de perlas hace un año cuando una amiga quería que le hiciera un video con fotos suyas (de Instagram y otras apps), cuyos “filtros” las habían dejado muy fastidiadas y traté de hacer que quedaran lo mejor posible pero fue mucho curro para mí y no quedaron tan bien

Es muy fácil hacer un proceso por lotes que coja todas las imágenes de una carpeta y "deshaga" los filtros marranos que se aplicaron. Pero ojo, no todos los filtros pueden modelarse bien con curvas. Yo he cogidos dos que sí, y muchos otros también, pero hay transformaciones más sofisticadas que requieren de curvas 3D (es decir, que en lugar de definir cada canal de salida en función del valor de ese mismo canal en origen, dependa de todos a la vez). También hay efectos como añadir viñeteo que pueden arruinar fácilmente tanto el cálculo de las curvas como su aplicación si no se corrige previamente ese viñeteo.

Ésta es la definición de una Hald CLUT:

http://www.linux-community.de/var/ezwebin_site/storage/images/internal/artikel/print-artikel/linuxuser/2012/01/profi-funktionen-von-imagemagick-nutzen/abbildung-4/1689879-1-ger-DE/Abbildung-4_lightbox.png

Una "curva 3D" donde a cada combinación RGB de entrada se le asigna una combinación RGB de salida. Permiten modelar transformaciones de color más complejas que las curvas RGB simples. RAW Therapee implementa así todos sus filtros filmográficos (http://rawpedia.rawtherapee.com/Film_Simulation) por ejemplo.

Salu2!

Philip J Fry
30/09/17, 06:21:45
Es muy fácil hacer un proceso por lotes que coja todas las imágenes de una carpeta y "deshaga" los filtros marranos que se aplicaron. Pero ojo, no todos los filtros pueden modelarse bien con curvas. Yo he cogidos dos que sí, y muchos otros también, pero hay transformaciones más sofisticadas que requieren de curvas 3D (es decir, que en lugar de definir cada canal de salida en función del valor de ese mismo canal en origen, dependa de todos a la vez). También hay efectos como añadir viñeteo que pueden arruinar fácilmente tanto el cálculo de las curvas como su aplicación si no se corrige previamente ese viñeteo.

Ésta es la definición de una Hald CLUT:

http://www.linux-community.de/var/ezwebin_site/storage/images/internal/artikel/print-artikel/linuxuser/2012/01/profi-funktionen-von-imagemagick-nutzen/abbildung-4/1689879-1-ger-DE/Abbildung-4_lightbox.png

Una "curva 3D" donde a cada combinación RGB de entrada se le asigna una combinación RGB de salida. Permiten modelar transformaciones de color más complejas que las curvas RGB simples. RAW Therapee implementa así todos sus filtros filmográficos (http://rawpedia.rawtherapee.com/Film_Simulation) por ejemplo.

Salu2!

Interesante, me pondré a dar un repaso y en cuanto pueda probaré lo que comentas