⚠️ Este es un sitio de traducción no oficial, sin relación con ImageMagick Studio LLC. Para información autorizada, consulte la página original (https://usage.imagemagick.org/photos/index.html).

Ejemplos de ImageMagick -- Manejo de fotografías digitales

Ejemplos de ImageMagick: prefacio e índice
Metadatos de la cámara digital, el perfil EXIF
Orientación de la foto digital
Mejoras de color

Uno de los usos principales de ImageMagick es el manejo y la modificación de fotografías tomadas con las modernas cámaras digitales. Estas cámaras suelen tomar fotos bastante grandes y de alta resolución, e incluyen en ellas metadatos sobre la hora, la escala, el zoom, la cámara, la orientación, etc. Incluso hay planes para enlazar las cámaras con los teléfonos móviles, de modo que pueda llegar a adivinar dónde estabas cuando se tomó la foto y quién podría aparecer en ella (a partir de qué teléfonos móviles hay frente a ella). Aquí veremos los fundamentos del manejo de fotos digitales, e incluso su conversión para otros fines, como representaciones artísticas. Un agradecimiento especial a Walter Dnes, usuario de cámara digital, por su ayuda en la mejora de fotos digitales.


Metadatos de la cámara digital, el perfil EXIF

Cuando una cámara digital toma una foto, también incluye mucha información adicional en el archivo JPEG guardado. Estos metadatos se conocen como el perfil EXIF y se proporcionan específicamente para los laboratorios y el revelado fotográfico. El «magick identify» de ImageMagick con la opción «[-verbose](https://imagemagick.org/command-line-options/#verbose)» mostrará esta información Exif. Aquí están los datos EXIF de una foto que tomé de una pagoda en el zoológico de Kunming, en el sur de China.

  magick identify -format "%[EXIF:*]" pagoda_sm.jpg |\
      sed 's/\(.\{46\}\).*/\1/' | column -c 110

[IM Text]

| Los datos EXIF, o cualquier salida de identify, deben procesarse sin distinguir mayúsculas de minúsculas. Muchas versiones antiguas de IM, por ejemplo, mostrarán «EXIF:» (mayúsculas) en lugar de «exif:» (minúsculas).
---|---
Aquí hay un ejemplo similar pero usando una expresión de 'globbing' (al estilo de la shell) para limitar la salida a los campos EXIF relacionados con Time...

  magick identify -format "%[exif:*time*]" pagoda_sm.jpg

[IM Text]

Hay mucha información sobre esta foto en el perfil EXIF. Por ejemplo

  • Mi cámara es una Panasonic ('Make'), DMC-LZ1 ('Model')
  • La cámara estaba rotada ('Orientation'). Pero debí de corregir esa rotación sin ajustar los datos EXIF. La cámara también estaba ligeramente inclinada hacia arriba, pero esa información no queda registrada.
  • La 'FocalLength' de '37mm muestra que no usé la función de 'zoom óptico' de mi cámara. Mi cámara podía llegar hasta un zoom óptico de 6X para una 'FocalLength' de '366/10' o '222mm'.
  • Y 'DigitalZoomRatio' muestra que tampoco hice zoom digital.
  • La cámara también usó un 'ExposureTime' rápido de 1/8 de segundo, y una apertura 'MaxApertureValue' de 3mm, o 'FNumber' de '5.6' y un 'ISOSpeedRating' de '64'.
  • El flash ('LightSource') no se usó.
  • La imagen original era de 1728 por 2304 píxeles ('ExifImageLength' y 'ExifImageWidth'). Aunque la imagen real, si quieres comprobarlo, es más pequeña, así que debí de recortarla y/o redimensionarla.
  • Y probablemente lo más importante, se tomó alrededor de las 14:05 del 9 de julio de 2005, según la cadena 'DateTime'. Eso supone que tenía la hora de la cámara configurada correctamente (que la tenía).
  • ¡Las cámaras más modernas pueden incluso tener una ubicación GPS y posiblemente una dirección de brújula de la vista!

También se incluye, aunque no se haya listado arriba, una pequeña imagen de previsualización en 'miniatura' que la cámara usaba en su propia pantalla. También hay funciones para marcar las fotos que quieres que se 'revelen' o impriman en impresoras fotográficas, y para ajustar otros parámetros de impresión. Sin embargo, la mayoría de la gente apenas lo usa. Muchos de estos ajustes pueden ser muy útiles para los usuarios, pero lo más útil para la gente suele ser la fecha y la hora de la foto. Esto, por supuesto, supone que la fecha y la hora estaban configuradas correctamente en la cámara antes de tomar la foto. Además, a mucha gente le interesa la orientación de la imagen para poder rotarla correctamente al mostrarla, y eso es justo lo que veremos a continuación. Todos estos datos, y en especial la imagen de previsualización, pueden ocupar bastante espacio en la imagen. Y puede que en realidad no quiera que todo el mundo sepa que estuve en Kunming, China, en julio de 2005. Por eso quizá quieras eliminar los datos EXIF de tus imágenes antes de publicarlas realmente en la World Wide Web. Además, el tamaño de una imagen de una cámara digital suele ser muy grande (y cada vez más), lo que te permite imprimirla con calidad fotográfica, pero es demasiado grande para usarla en la WWW, y especialmente no para miniaturas. Por eso, a menos que quieras que los usuarios puedan imprimir realmente imágenes con calidad fotográfica, yo no publicaría la imagen original directamente. La imagen anterior, por ejemplo, se ha recortado y redimensionado para su uso en los ejemplos de IM, pero dejé a propósito los datos EXIF intactos para el ejemplo. Normalmente eliminaría esta información.


Orientación de la foto digital

Me han dicho que Photoshop rota automáticamente las imágenes digitales según el ajuste EXIF 'Orientation'; IM también puede hacerlo incluyendo un operador «[-auto-orient](https://imagemagick.org/command-line-options/#auto-orient)» tras leer la imagen. Sin embargo, y esto es importante

El formato JPEG es con pérdida

Lo que esto significa es que cada vez que decodificas y guardas el formato de archivo JPEG degradarás la imagen ligeramente. Como procesador de imágenes general, IM siempre decodifica y vuelve a codificar por completo el formato, por lo que siempre degradará las imágenes JPEG cuando vuelva a guardarlas. Para más información sobre la naturaleza del formato JPEG, consulta Formato de archivo de imagen JPEG. La idea es usar IM para corregir la orientación de las fotos digitales (usando «[-auto-orient](https://imagemagick.org/command-line-options/#auto-orient)») solo cuando también estés realizando otras operaciones que modifican la imagen, como la creación de miniaturas, la anotación de imágenes, el marcado de agua o incluso los ajustes de exposición. IM puede extraer la orientación actual (como número) de la foto usando un escape de propiedad de imagen... | |

  magick identify -format '%[exif:orientation]' pagoda_sm.jpg

[IM Text]
IM proporciona un operador «[-orient](https://imagemagick.org/command-line-options/#orient)» especial (usa «[-list](https://imagemagick.org/command-line-options/#list) orientation» para ver los valores posibles). | |

  magick pagoda_sm.jpg -orient bottom-right \
                 -format '%[exif:orientation]'   info:

[IM Text]
Estos métodos de configuración de metadatos te permiten ajustar la orientación de las fotos que has modificado, especialmente las que has rotado. Ten en cuenta que una foto orientada correctamente tiene una orientación de 'Top-Left' o 1. Por supuesto, no deberías eliminar los metadatos EXIF (usando «[-strip](https://imagemagick.org/command-line-options/#strip)» o «[-thumbnail](https://imagemagick.org/command-line-options/#thumbnail)») si planeas usar «[-auto-orient](https://imagemagick.org/command-line-options/#auto-orient)» más adelante en el procesamiento de la imagen. Úsalo antes de eliminar los metadatos de la imagen. Si quieres corregir la orientación de tu foto sin degradar ni modificar de otro modo tu imagen, te sugiero que uses el programa JHead. Por ejemplo, aquí corrijo la orientación de las fotos y elimino la miniatura de previsualización incorporada de todas las fotos digitales de un directorio.

  jhead -autorot  *.jpg

| _La rotación sin pérdida de JPEG solo funcionará correctamente para imágenes cuyo tamaño sea divisible por 8 o 16. Esto se cumple con la mayoría (pero no todas) de las fotos de cámara digital. Si lo intentas con una imagen de tamaño impar, los bloques del borde derecho o inferior (que contienen el tamaño parcial) no quedarán colocados correctamente en la imagen final, ya que estos bloques solo pueden existir en el borde derecho o inferior.

Para ver un ejemplo de esto, consulta esta discusión concreta_
---|---
El programa JHead también te permite ajustar la fecha de las fotos (si la hora de tu cámara estaba mal configurada o has viajado a husos horarios distintos), extraer/eliminar/reemplazar la miniatura de previsualización, establecer el campo de comentario de la imagen, eliminar perfiles de photoshop y hacer recortes básicos de la imagen (para quitar a ese desconocido que se exhibe ;-), etc., sin degradar los datos de imagen JPEG. Recomiendo este programa, u otros similares (consulta Otros programas de procesamiento de JPEG), para corregir esta información. Solo asegúrate de que no decodifique/vuelva a codificar realmente los datos de imagen JPEG. Un último apunte sobre la orientación. Si apuntaste la cámara casi recto hacia arriba o hacia abajo, el ajuste de orientación EXIF puede no resolverse correctamente. Lo mismo ocurre con las tomas en ángulo o inclinadas. La orientación (y las cámaras) simplemente no tienen sentido para estas situaciones. Tu única opción para esas fotos es hacer las rotaciones tú mismo usando el «jpegtrans» de bajo nivel y sin pérdida, o el «[-rotate](https://imagemagick.org/command-line-options/#rotate)» de IM, y luego restablecer el ajuste de orientación EXIF (usando JHead o el operador «[-orient](https://imagemagick.org/command-line-options/#orient)» de IM), o simplemente eliminar el perfil EXIF.

Otras modificaciones con pérdida de IM...
  Si además estás redimensionando o modificando de otro modo la imagen, como
  reducir su calidad y tamaño para uso en la web, la pérdida de datos ya es un hecho.
  Por eso, durante esas operaciones IM puede hacer cosas similares, permitiéndote
  realizar todas las operaciones necesarias en un único ciclo de 'carga-guardado'.

  Rotar TODAS las imágenes a horizontal   -rotate 90\<
                       vertical    -rotate -90\>

Mejoras de color

Antes de continuar, se recomienda que primero eches un vistazo a Modificaciones de color para una introducción a las técnicas generales de modificación de color que se usarán. Normalizar (usando «[-normalize](https://imagemagick.org/command-line-options/#normalize)») líneas y gráficos de alto contraste puede ser estupendo. Pero las fotos normalizadas pueden parecer irreales y, como se dijo antes, tampoco imprimirse bien. El operador «[-contrast-stretch](https://imagemagick.org/command-line-options/#contrast-stretch)» puede limitar los «límites» de la normalización, pero los operadores «[-levels](https://imagemagick.org/command-line-options/#levels)» o «[-sigmoidal-contrast](https://imagemagick.org/command-line-options/#sigmoidal-contrast)» pueden hacer ajustes «más suaves» (consulta Ajustes de histograma para una explicación de más bajo nivel de lo que hacen estos operadores). La imagen de entrada anterior es cortesía de «Tong» de la lista de correo de IM.

Aclarar fotos subexpuestas, contribución de Walter Dnes

A veces simplemente no hay suficiente luz disponible para lograr una exposición adecuada. Otras veces, puede que tengas que usar tiempos de exposición más cortos de lo óptimo para eliminar el desenfoque por movimiento. En las fotos digitales subexpuestas se pueden aclarar de forma preferente las zonas más oscuras, sin quemar las altas luces, usando el operador «[-sigmoidal-contrast](https://imagemagick.org/command-line-options/#sigmoidal-contrast)» con un umbral del '0%'. Consulta Contraste sigmoidal no lineal para más detalles. Aquí hay un ejemplo de subexposición leve, tomado en un concierto gratuito después del atardecer. Tiene muchas zonas bien iluminadas, que se ven claras, pero también zonas oscuras que me gustaría hacer más visibles.

  magick night_club_orig.jpg  -sigmoidal-contrast 4,0%  night_club_fixed.jpg

[IM Output] [IM Output]

| _Como siempre, deberías usar un formato sin pérdida como TIFF o PNG para el trabajo intermedio. El formato JPEG solo se usa aquí para reducir el espacio en disco y el ancho de banda de descarga para la publicación web.

Selecciona la imagen para ver la versión ampliada que realmente usan los ejemplos, en lugar de la pequeña miniatura mostrada._
---|---
Y aquí hay un ejemplo de subexposición severa, una toma nocturna desde mi balcón mirando hacia el sur, hacia la ciudad de Toronto.

  magick night_scape_orig.jpg -sigmoidal-contrast 10,0%  night_scape_fixed.jpg

[IM Output] [IM Output]

El parámetro principal controla la cantidad de aclarado. Cuanto mayor sea el aclarado necesario, mayor será el valor usado. Y más granulada se verá la imagen de salida. Esto se debe a que los pequeños errores de píxel también se realzan. El aclarado por contraste sigmoidal tiende a restar énfasis al extremo rojo del espectro. Puede que acabes teniendo que elegir un parámetro que produzca los tonos de piel más naturales, en lugar del nivel de brillo que realmente quieres. En el caso de una subexposición severa, acabarás con una glorificada imagen granulada en blanco y negro tras el aclarado. Esta es una limitación física del realce de imágenes digitales. Si no hay datos de color presentes, IM no los generará por ti. En la vida real, los ladrillos del lado derecho de mi balcón son rojizos, y los árboles de abajo son verdes.

Binning -- Reducción del ruido digital, contribución de Walter Dnes

Muchos fotógrafos serios no están contentos con los efectos secundarios de la «carrera de los megapíxeles» de los fabricantes de cámaras digitales. Los fabricantes meten más megapíxeles en el sensor de una cámara digital haciéndolos más pequeños. Los píxeles más pequeños dan como resultado una imagen con más ruido con el mismo ajuste ISO, lo que obliga a la gente a usar ajustes ISO más bajos. Usar sensibilidades ISO más bajas para evitar el ruido requiere tiempos de exposición más largos. Esto, a su vez, significa que la mayoría de las cámaras digitales de consumo son prácticamente inútiles en interiores más allá del alcance de 10 pies de su flash incorporado para cualquier cosa salvo una foto de naturaleza muerta tomada con la cámara sobre un trípode. Muchos usuarios de cámaras digitales cambiarían encantados algunos píxeles por imágenes con menos ruido a ajustes ISO más altos, pero los comerciales que controlan las empresas se niegan a considerar esto como una opción. Por suerte, el compromiso se puede hacer a posteriori en las fotos digitales. El término técnico es 'binning'. La teoría simplificada es así...

  • Toma una cuadrícula de n por n píxeles y promedia sus componentes para obtener un «superpíxel».
  • La señal es proporcional al área de píxeles combinada, lo que significa que la cantidad de señal ha aumentado en un factor de n^2
  • El ruido es aleatorio. Lo que significa que es proporcional a la raíz cuadrada del área de píxeles combinada, un factor de n. El resultado neto es que la SNR (relación señal-ruido) ha aumentado en un factor de n. Consulta Glosario fotográfico, Binning para más detalles.
Cuando una foto digital de 1600x1200 se reduce por binning a 800x600 (es decir, una cuadrícula de 2x2), la relación señal-ruido se duplica. De forma similar, una imagen de 2560x1920 reducida por binning 3x3 a 853x640 píxeles tendrá una mejora de un factor de 3 en la relación señal-ruido. Para poder usar el binning, la imagen de la foto debe ser un múltiplo entero del tamaño final deseado.
En ImageMagick, el ajuste especial 'box' de «[-filter](https://imagemagick.org/command-line-options/#filter)» promediará grupos de píxeles hasta un único píxel cuando hagas «[-resize](https://imagemagick.org/command-line-options/#resize)» en una imagen (consulta Filtros de remuestreo para más detalles). Esto significa que para hacer un 'binning' solo necesitas redimensionar la imagen correctamente.

En construcción

Walter Dnes también proporcionó el script original binn para realizar los cálculos, recortar mínimamente la imagen y efectuar el 'binning'. Ejemplos de binning 3Ejemplos de binning 4


Recetario de conversión de fotos

Corrección de rotación leve -- nivelar mejor una foto

Situación típica. Has tomado una foto, pero la imagen no está nivelada y quieres corregirla. [IM Output] Por ejemplo, aquí hay una foto que tomé con una cámara de mano en Pekín, en 2008, desde la colina del parque Jingshan, justo detrás de la Ciudad Prohibida. No, no es de la Ciudad Prohibida en sí, sino de un templo al otro lado de la colina. Haz clic en la miniatura para ver una imagen más grande. Sí, la imagen es pequeña, y deberías aplicar la solución a la imagen original y no a una miniatura pequeña, pero la técnica es la misma para cualquier imagen. En este caso, la imagen hay que rotarla -1.8 grados para corregirla. Ahora bien, si simplemente rotas la imagen, obtendrás una imagen algo más grande con zonas de color en las esquinas, lo que hace que la corrección se note de forma evidente y fea. |

  magick beijing_tn.png -rotate -1.95  beijing_rotate.png

Incluso si recortaras la imagen de vuelta a su tamaño original, como se muestra en Rotaciones simples de imágenes, seguirías obteniendo algunas esquinas coloreadas. [IM Output]
La solución más sencilla sería ahora recortar ese resultado para eliminar esos bordes, pero entonces tu imagen adquiere un tamaño bastante raro, lo que de nuevo deja bastante claro que se ha hecho algo. Aunque la fórmula para hacer ese recorte no es sencilla, se muestra en Métodos de rotación por distorsión. La mejor solución es no solo rotar la imagen, sino escalarla ligeramente para producir una imagen rotada que tenga el mismo tamaño que la original. |

  angle=-1.95
  magick beijing_tn.png -distort SRT \
     "%[fx:aa=$angle*pi/180;(w*abs(sin(aa))+h*abs(cos(aa)))/min(w,h)], $angle" \
     beijing_rot_correction.png

[IM Output]
Y la imagen tiene un aspecto limpio, con una pared perfectamente nivelada. El cálculo del ángulo es trigonometría razonablemente sencilla, usando las posiciones de los píxeles en los extremos de una línea recta larga de la imagen. Sin embargo, descubrí que simplemente rotar la imagen con varios ángulos pequeños por ensayo y error encuentra un buen ángulo de rotación con relativa rapidez. Al fijarte en lo bueno que es un ángulo concreto, observa muy de cerca, con mucho zoom, los píxeles a lo largo de la línea o el borde que estés usando. La parte superior de la pared en esta foto. Y recuerda que en las rotaciones de imágenes una rotación a la izquierda o en sentido antihorario es negativa (debido a que el eje Y apunta hacia abajo). Recuerda también que, siempre que sea posible, apliques las operaciones a la imagen original, evitando el uso de imágenes intermedias (y en especial imágenes JPEG intermedias). Siempre es mejor aplicar cualquier modificación de foto partiendo de la fuente original que de cualquier copia intermedia guardada.

Efecto tilt-shift -- hacer que un paisaje parezca una maqueta artificial

[IM Output]El 'tilt-shift' es una técnica que provoca que una imagen quede difuminada por arriba y por abajo, dejando el centro de la imagen sin difuminar. Originalmente se hacía con cámaras de fuelle muy antiguas, en las que se inclinaba el objetivo para sacar de foco la parte superior e inferior de la imagen. Gracias a la introducción del mapeado de desenfoque variable, añadido a ImageMagick en la v6.5.4-0, ahora es fácil de hacer. Si a esto le añades un contraste muy alto para realzar las sombras, y saturas los colores, un resultado típico es que una imagen normal puede hacerse parecer artificial. Casi como si estuvieras tomando una foto de una maqueta pequeña, muy detallada y bien iluminada.
Lo primero que tenemos que hacer es realzar los colores de la imagen para darle un contraste muy alto, y quizá aclararla un poco para que parezca muy bien iluminada con potentes luces de estudio. |

  magick beijing_md.jpg -sigmoidal-contrast 15x30% beijing_contrast.jpg

[IM Output]
Fíjate en cómo usé una fuerte operación de contraste sigmoidal para lograr estos efectos de color. No usé simplemente un contraste lineal, porque no quería 'recortar' los colores más claros y más oscuros de la imagen. El valor de contraste de '15' es un contraste muy muy fuerte. También aclaré un poco la imagen desplazando el centro del umbral de contraste a un valor de gris del '30%'. Si los colores de la imagen con el contraste realzado no salen lo bastante caricaturescos, quizá quieras probar a aumentar la saturación de color de la imagen usando el operador modulate. Esta imagen no lo necesitaba, ya que el tejado de tejas y los árboles de verde brillante ya aportan suficientes efectos de color. Si miras una ampliación de la imagen (haz clic en la miniatura), verás que incluso solo realzar los colores le da a la imagen una sensación de luces artificiales, aunque no parece una maqueta, con demasiado detalle en los coches del fondo y en las personas del primer plano. Ahora vamos con el tilt-shift. Para esto preparamos una imagen de degradado que es blanca por arriba y por abajo, y negra en el medio. Algunos podrían usar un degradado lineal para esto, pero a mí me parece mejor un degradado parabólico. |

  magick beijing_contrast.jpg \
          -sparse-color Barycentric '0,0 black 0,%h white' \
          -function polynomial 4,-4,1   beijing_blurmap.jpg

[IM Output]
Ten en cuenta que usé la propia imagen original con un coloreado disperso baricéntrico de dos puntos para generar un degradado lineal sobre toda la imagen. Ese degradado lineal se modifica luego usando una función polinómica básica para convertirlo en un degradado parabólico con negro en el medio. Ahora solo se trata de desenfocar la imagen según el mapa de desenfoque para crear un efecto 'tilt-shift'. El resultado es que la imagen original parece más bien una maqueta a escala, en lugar de una instantánea rápida de algo real.

  magick beijing_contrast.jpg  beijing_blurmap.jpg \
          -compose Blur -set option:compose:args 10 -composite \
          beijing_model.jpg

[IM Output]

Como puedes ver en la imagen final, los árboles y los edificios parecen muy artificiales debido a los colores intensos, mientras que el desenfoque de las partes cercanas y lejanas le da a la imagen una sensación 'pequeña', como de maqueta. ¡Aunque debió de ser una maqueta muy detallada! El resultado podría haberse mejorado aún más realizando una corrección de rotación (ver antes) como parte del procesamiento del tilt-shift. Una orientación de cámara perfecta simplemente sumaría a la sensación artificial. Por supuesto, puedes encadenar todas estas operaciones para hacerlo todo en un solo comando y evitar archivos temporales o pérdida de calidad.

  magick beijing_md.jpg -sigmoidal-contrast 15x30% \
          \( +clone -sparse-color Barycentric '0,0 black 0,%h gray80' \
             -solarize 50% -level 50%,0 \) \
          -compose Blur -set option:compose:args 10 -composite \
          beijing_model.jpg

Arriba reemplacé el degradado parabólico por un degradado lineal negro-blanco-gris más tradicional (con la misma pendiente) para el mapa de desenfoque del 'tilt-shift'. Se usó la técnica de solarizar y niveles para hacer que el degradado lineal alcanzara su pico horizontalmente a aproximadamente 1/3 desde la parte inferior de la imagen. Sin embargo, me parece que la zona de enfoque en un degradado lineal es demasiado pequeña y poco práctica. Hay muchas otras formas de generar un degradado adecuado para un efecto tilt-shift. Por ejemplo, usando degradados redimensionados. O escalando horizontalmente un color disperso de Shepards de una sola columna de píxeles. Los degradados de curva senoidal también pueden ser útiles.

Optimización de velocidad

La operación de mapeado de desenfoque variable usa esencialmente un método de desenfoque bidimensional de una sola pasada (equivalente a un desenfoque gaussiano uniforme). Sin embargo, puedes obtener un aumento general de velocidad realizando la operación de desenfoque en dos operaciones de desenfoque variable unidimensionales. Por ejemplo, aquí primero desenfoco horizontalmente y luego verticalmente...

  magick beijing_md.jpg -sigmoidal-contrast 15x30% \
          \( +clone -sparse-color Barycentric '0,0 black 0,%h gray80' \
             -solarize 50% -level 50%,0 -write mpr:blur_map \) \
          -compose Blur -set option:compose:args 10x0 -composite \
          mpr:blur_map \
          -compose Blur -set option:compose:args 0x10 -composite \
          beijing_model_2pass.jpg

El resultado es prácticamente idéntico (aunque difiere un poco), pero es mucho más rápido de procesar. APARTE: creo que intercambiar las operaciones (desenfocar primero en vertical y luego en horizontal) generará un resultado más preciso para este tipo de mapeado de desenfoque. Básicamente, porque el desenfoque horizontal es constante en la dirección de esa pasada de desenfoque, así que debería hacerse al final.

Problemas del efecto tilt-shift frente a una maqueta real

Si examinas con atención la foto resultante, podrás darte cuenta de que es un tilt-shift falso, y no la foto de una maqueta real. Esto se ve en que el tejado del edificio más grande está demasiado borroso en comparación con la base del edificio. Aunque está más o menos a la misma distancia que la base. De forma similar, la base de la 'pared' está más borrosa que la parte superior de la pared. Es decir, se nota que es falso. El problema es que los objetos verticales grandes deberían estar desenfocados en la misma cantidad por toda su superficie, y no solo desenfocados de forma variable según la altura. Recuerda que el degradado de desenfoque está pensado para representar la profundidad de campo, o la distancia de los distintos objetos de la imagen, por lo que la superficie de un objeto vertical debería estar toda a la misma 'distancia' y, por tanto, desenfocada en la misma cantidad. Para corregirlo, tendría que ajustar el degradado de desenfoque para que esas zonas tuvieran un color constante (o casi constante) de la 'base' de ese objeto, en relación con el resto de la imagen. Es decir, las superficies verticales tienen una cantidad de desenfoque constante, mientras que todas las superficies horizontales tienen un degradado de desenfoque. Básicamente, el degradado de desenfoque debería representar la 'profundidad' real de cada punto de la imagen, que para la mayoría de las imágenes es un degradado muy complejo. Este ajuste puede ser difícil de lograr, ya que lo más probable es que requiera cierta interpretación humana de qué es una pared horizontal y a qué distancia está el objeto en la imagen. También es poco probable que se automatice con facilidad. ¿Qué puedes hacer con este efecto? ¡Envíame por correo tus imágenes tilt-shift! Las referenciaré aquí. O quizá puedas corregir los defectos del tilt-shift del ejemplo anterior.

Imágenes en capas PNG-JPEG

Al separar una página grande de periódico o revista en una capa de texto que se guarda como PNG y una capa de imagen que se guarda como JPG, ambas usando solo un fondo blanco, ¡es posible usar mucho menos espacio en disco que las dos imágenes combinadas! Más importante aún, las imágenes pueden usar una compresión con pérdida (JPEG), mientras que los componentes de texto se mantendrán nítidos y claros (PNG). Suena absurdo y raro, pero en realidad es cierto. Las imágenes separadas pueden ahorrar de 3 a 4 veces el espacio en disco que usa una sola imagen combinada. Normalmente, las dos imágenes se generan durante el proceso de publicación como capas separadas. Pero también puedes separar las imágenes a posteriori. Las imágenes simplemente se superponen una sobre otra...

  magick ny_family.jpg ny_family.png -composite   ny_family_merged.jpg

[IM Output] [IM Output] [IM Output]
Selecciona las imágenes resultantes para ver una copia más grande.

Esto usa una composición Over normal, que requiere que la imagen PNG (la superpuesta) sea transparente. Esta transparencia se presenta de dos formas. Bien como una máscara booleana (puramente de encendido/apagado), como se ve arriba. Se agradece código de ejemplo para la separación de imágenes.

Fotos superpuestas -- solapamientos difuminados de fotos unidas

Crear una serie de fotos superpuestas (y no me refiero a un panorama) es una tarea común, especialmente en la creación de sitios web. Pero puede resultar complicado de hacer a menos que tengas el conocimiento adecuado de los operadores de IM. El método más sencillo es usar una composición con máscara de las dos imágenes, y una máscara para seleccionar qué imagen superponer. Pero primero hay que hacer unas matemáticas sencillas. Para este ejemplo, estoy usando dos imágenes en miniatura de 120x90 píxeles de tamaño y quiero superponerlas horizontalmente 40 píxeles. Esto significa que la imagen resultante debería tener 120 + 120 - 40 píxeles de ancho, es decir, una imagen de 200x90 píxeles. A continuación necesitamos una máscara. Esta debe ser negra por un lado y blanca por el otro, con un degradado de 40 píxeles en el medio, del tamaño de la imagen de salida final. Es decir, 120 píxeles - 40 píxeles da un área de 80 píxeles para cada una de las dos zonas no superpuestas. Así que generemos una imagen de máscara... |

  magick -size 90x80 xc:white xc:black   -size 90x40 gradient: \
          +swap -append -rotate 90    overlap_mask.png

[IM Output]
Una forma alternativa de generar la imagen de máscara es usar el script generador de degradados horizontales «[plmlut](http://www.fmwconcepts.com/imagemagick/plmlut/index.php)» de Fred Weinhaus. Este tiene controles más finos para la curvatura del degradado que el degradado lineal abrupto que genero arriba. Ahora que todas las matemáticas están resueltas, lo único que queda es hacer una composición con máscara de tres imágenes, usando la máscara que acabamos de generar. Sin embargo, también tendremos que agrandar la imagen de destino (la izquierda) para dar espacio suficiente a la imagen derecha superpuesta (de cualquier color), y colocar la segunda imagen correctamente usando la gravedad adecuada (derecha, o 'East').

  magick holocaust_tn.gif -extent 200x90  spiral_stairs_tn.gif \
          overlap_mask.png  -gravity East -composite   overlap_photos.jpg

[IM Output] [IM Output] [IM Output] [IM Output]

Y ahora tenemos dos imágenes superpuestas mediante un degradado lineal. Por supuesto, los dos comandos pueden fusionarse en uno solo, de modo que no necesites guardar la imagen intermedia de la 'máscara'. Esto se deja como ejercicio para el lector. Una pequeña mejora es usar un degradado más curvado sobre un solapamiento mayor entre las imágenes. Esto reduce el cambio brusco visible al principio y al final de la zona de solapamiento de la imagen final. Especialmente con imágenes que contienen grandes áreas de colores muy distintos. Por ejemplo, esto usa algunas técnicas de degradado distorsionado no solo para generar una curva de degradado más suave, sino también para rotar ese degradado de modo que tenga un solapamiento muy inclinado. |

  magick -page +0-15 -size 1x30 gradient: \
          -sigmoidal-contrast 5,50% -contrast-stretch 0 \
          -set option:distort:viewport 180x90-90-45 \
          +distort SRT 115 +repage \
          holocaust_tn.gif -extent 180x90 +swap \
          spiral_stairs_tn.gif +swap \
          -gravity East -composite   overlap_angled.jpg

[IM Output]
Sí, lo anterior es bastante complejo, pero muestra lo que es posible. Si planeas hacer más de dos imágenes, un método mejor es usar la máscara para establecer directamente la transparencia de la segunda imagen y las siguientes. Las múltiples imágenes pueden entonces superponerse usando técnicas que se ven en Ejemplos de imágenes en capas. Algunas de estas técnicas no requieren que calcules el tamaño de la imagen final, ya que IM puede hacerlo por ti. Solo tienes que asegurarte de colocar las imágenes correctamente. Por ejemplo, aquí añado un degradado de 30 píxeles a una segunda y una tercera imagen, lo que exige que las imágenes se coloquen cada 90 píxeles (ancho 120 menos 30 píxeles de solapamiento) entre sí. Cuando a todas las imágenes se les ha dado la transparencia y la posición adecuadas, simplemente unimos las capas con mosaico (todos los desplazamientos son positivos), dejando que IM averigüe el tamaño final del lienzo.

  magick -size 90x90 xc:white -size 90x30 gradient: -append -rotate 90 \
          hatching_tn.gif \
          \( chinese_chess_tn.gif -clone 0 \
                 -compose CopyOpacity -alpha off -composite -repage +90+0 \) \
          \( holocaust_tn.gif -clone 0 \
                 -compose CopyOpacity -alpha off -composite -repage +180+0  \) \
          \( spiral_stairs_tn.gif -clone 0 \
                 -compose CopyOpacity -alpha off -composite -repage +270+0 \) \
          -delete 0   -compose Over  -mosaic     overlap_series.jpg

[IM Output]

En lugar de calcular previamente las posiciones de las imágenes superpuestas con máscara, puedes usar técnicas que se encuentran en Solapamiento por unión, así como Posiciones calculadas incrementalmente para secuencias de imágenes más largas. Notas finales: La superposición de fotos de este modo funciona mejor con imágenes que tienen un color general razonablemente común. También puede que notes que, en las imágenes de cualquiera de los dos extremos de la secuencia, un sujeto centrado puede no verse muy centrado debido a que el solapamiento se produce solo en un lado de la imagen. Este problema puede mejorarse, bien difuminando el borde exterior de esas imágenes hacia la transparencia, bien recortando parte del borde exterior para ayudar a recentrar el sujeto de esas imágenes. APARTE: puede que hacer la composición en un espacio de color distinto funcione mejor. ¿Alguien quiere experimentar e informar de sus resultados, buenos o malos?

Dobles exposiciones -- mezclar varias fotos de la misma escena

Con las antiguas cámaras de película, existía una técnica en la que se tomaba una imagen dos o más veces sin 'avanzar' la película. Esto te permitía crear lo que se conocía como dobles exposiciones, donde dos imágenes tomadas en momentos ligeramente distintos se fusionaban. El resultado era a menudo un efecto fantasma o un oscurecimiento de las partes de la imagen que se movían o cambiaban. Sin embargo, con un control cuidadoso de los sujetos de la imagen, los efectos de iluminación e incluso el proceso de revelado, se hizo posible crear fotos muy extrañas o incluso 'imposibles'. Con las imágenes digitales es aún más fácil, ya que tienes un control todavía mejor de las imágenes. Básicamente... ¡Ver para creer, pero las cámaras mienten! Por ejemplo, supongamos que quisiera una imagen en la que aparezco dos veces. Bueno, eso es fácil de hacer. Aquí, por ejemplo, están las miniaturas de dos fotos rápidas que tomé específicamente para este ejemplo, usando un trípode y el temporizador, que usaré directamente.

[IM Output] [IM Output]
¿Quizá puedas aportar un conjunto de fotos mejor y más divertido?

Aplicaré las técnicas de doble exposición directamente a estas miniaturas, aunque lo más habitual sería hacerlo usando los archivos de imagen originales como entrada, para obtener un resultado de la máxima calidad. Ahora bien, si usara una 'doble exposición' tradicional al estilo de la película con una cámara antigua, el resultado sería un promedio de estas dos imágenes, generando 'fantasmas' translúcidos de mí mismo. Aquí está la simulación digital de esta técnica... |

  magick anthony_1.jpg anthony_2.jpg -evaluate-sequence mean  anthony_ghosts.jpg

[IM Output]
Sin embargo, ¿qué pasa si no quiero fantasmas, sino imágenes debidamente sólidas de mí mismo? En ese caso necesitas usar una máscara para seleccionar qué partes quieres que provengan de cada imagen. Esta máscara puede generarse de dos formas. Puedes crear la máscara manualmente dividiendo la imagen a lo largo de las partes estáticas o que no cambian. Algo bastante sencillo en este caso concreto... |

  magick -size 100x90 xc: -draw 'rectangle 0,0 50,89' \
          -blur 0x3  anthony_mask.jpg

[IM Output]
Ten en cuenta que desenfoqué la máscara para 'difuminar' (feather) la transición entre las dos imágenes. Y aquí uso una composición con máscara para fusionar las imágenes. |

  magick anthony_1.jpg anthony_2.jpg anthony_mask.jpg \
          -composite  anthony_doubled.jpg

[IM Output]
¿Y si tuvieras dos (o más) fotos familiares en las que algunas personas tienen los ojos cerrados, están hablando, ponen caras o simplemente miran hacia otro lado? Podrías escoger cada 'cabeza' de imágenes distintas y fusionar las múltiples imágenes para formar un montaje, y así obtener una foto en la que todos miran a la cámara y tienen los ojos abiertos. Al intercambiar las imágenes de entrada, o simplemente negar la máscara, puedes eliminarme por completo de la imagen, obteniendo así una vista despejada del fondo estático. |

  magick anthony_2.jpg anthony_1.jpg anthony_mask.jpg \
          -composite  anthony_removed.jpg

[IM Output]
Esto puede ser útil al fotografiar un monumento público, donde no puedes permitirte el gasto del control de multitudes. ¡Solo tienes que tomar muchísimas fotos desde un trípode y, con suerte, podrás combinarlas para eliminar a todo el mundo de la escena! Una alternativa a generar una imagen de fondo cuando tienes cientos de imágenes (vídeo) es simplemente crear un promedio de todas las imágenes. Esto convierte a todas las personas u otros objetos transitorios en una ligera bruma de 'fantasmas'. Eso puede ser un efecto interesante en sí mismo, pero no siempre es lo que se quiere. Una imagen promedio puede ser un paso útil, ya que una vez la tienes puedes compararla con cada imagen individual para enmascarar a la persona (objeto transitorio) de cada fotograma, antes de combinar de nuevo los fondos para crear una imagen de fondo limpia (sin bruma). Una gran discusión sobre la generación automática de un 'fondo limpio' a partir de imágenes de vídeo está en el foro de discusión de IM, en Crear una imagen de referencia y Extraer eventos de cambio.
Con una foto de fondo limpia, podemos aplicar un umbral a una imagen de diferencia para enmascarar las partes de la imagen que cambiaron. Puede que necesites usar algo más de desenfoque y umbral para expandir esa máscara adecuadamente, de modo que cubra no solo el objeto dentro de la imagen, sino también cualquier sombra o reflejo que pueda proyectar sobre el escenario de fondo. También puede que haga falta algo de ensayo y error para hacerlo bien. |

  magick anthony_removed.jpg anthony_2.jpg \
          -compose difference -composite \
          -threshold 5% -blur 0x3 -threshold 20% -blur 0x3 \
          anthony_automask.jpg

[IM Output]
Ahora usemos esta máscara para mezclar mi imagen de 'fantasmas' con la imagen original, de modo que parezca que mi conciencia me 'persigue' por hacer estas imágenes 'imposibles'. |

  magick anthony_1.jpg anthony_ghosts.jpg anthony_mask.jpg \
          -composite  anthony_haunted.jpg

[IM Output]
Como apunte final, todas las técnicas anteriores suponen que las fotos se tomaron con una cámara firmemente fijada a un trípode estacionario. Si no fuera así, sino que se tomaron simplemente sostenida con la mano, te garantizo que las imágenes no coincidirán ni se 'alinearán' correctamente, por mucho que te esfuerces. En esos casos, puede que necesites alguna distorsión afín, o incluso de perspectiva, de al menos una de las dos imágenes para que los fondos se alineen correctamente. Cuanto más complejo sea el fondo, más exigente será el realineamiento necesario. Si se usó flash, o el día estaba nublado con luz variable, puede que también necesites algunos ajustes de brillo en la foto. La causa es que la mayoría de las cámaras 'autoajustan' el brillo de las imágenes, y un flash, o una luz variable, puede cambiar cómo gestiona el ajuste de 'nivel automático' para cada una de las imágenes. Como ejemplo final, aquí hay otra imagen que creé a partir de dos fotos separadas, de mi sobrino practicando esgrima consigo mismo, frente a un rocódromo. Como sostenía la cámara y usé flash, sí necesité hacer algunos ajustes de distorsión afín, además de un ligero ajuste de brillo, para obtener el resultado sin costuras que ves.

[IM Output]
Jacob contra Jacob

Si intentaras decidir si esta foto es falsa o no, te fijarías en la iluminación, las sombras y los reflejos. Arriba, un examen detallado del suelo mostrará que el 'Jacob' de la derecha no tiene un reflejo adecuado en el suelo (quedó cortado por el borde de la foto). ¡Pero realmente tendrías que estudiar bien la foto para darte cuenta de esto! Ahora piensa en las posibilidades para las que puedes usar esta técnica de 'doble exposición'. Por ejemplo, ¿qué tal unos espejos divertidos? ¡Envíame por correo tus resultados! Si quieres profundizar más, el artículo de investigación «Interactive Digital Photomontage» entra en el uso de «dobles exposiciones» (o, como lo denomina, «fotomontaje»), pero aprovechando selecciones del usuario ampliadas mediante «segmentación de imágenes» para elegir qué partes de la imagen provienen de dónde. Un ejemplo es si tienes varias fotos de un grupo grande de personas y en cada foto alguien no 'sale bien'. Puedes usar esta técnica para seleccionar qué persona proviene de qué imagen, de modo que obtengas una foto de grupo perfecta en la que todos están: mirando al frente, con los ojos abiertos y sonriendo.

Proteger el anonimato de alguien -- difuminar alguna parte de una foto

La técnica anterior de usar una máscara compuesta de 3 imágenes también puede usarse de otras formas. Por ejemplo, puedes 'pixelar' una imagen y luego usar una máscara para limitar el efecto solo a la cara de una persona, de modo que se «proteja su identidad».

  magick zelda_tn.gif -scale 25%  -scale 400%  zelda_pixelate.gif
  magick zelda_tn.gif -gamma 0 -fill white \
          -draw 'circle 65,53 50,40'   zelda_face_mask.gif
  magick zelda_tn.gif zelda_pixelate.gif zelda_face_mask.gif \
          -composite   zelda_anonymity.png

[IM Output] [IM Output] [IM Output] [IM Output]

Por supuesto, puedes hacer todo esto de una sola vez, e incluso suavizar el cambio de pixelado a normal. Por ejemplo.. |

  magick zelda_tn.gif \( +clone -scale 25%  -scale 400% \) \
          \( +clone -gamma 0 -fill white \
             -draw 'circle 65,53 50,40' -blur  10x4 \) \
          -composite  zelda_anonymity.jpg

[IM Output]
Por supuesto, en lugar de pixelar la parte en cuestión, también puedes desenfocar la zona. Solo tienes que reemplazar los dos operadores «[-scale](https://imagemagick.org/command-line-options/#scale)» por un único «[-blur](https://imagemagick.org/command-line-options/#blur)» para difuminar los detalles. Esta técnica de reemplazar una zona enmascarada también puede usarse para eliminar texto y logotipos no deseados de las imágenes. Para más detalles, consulta Relleno de huecos.

Añadir una textura a una imagen

El método de composición alfa hardlight, o incluso cualquiera de los diversos métodos de composición de iluminación, ofrecen formas de dar a una imagen un patrón de textura. Por ejemplo, aquí añado una textura de tela basta a una foto que tomé de una pagoda en el zoológico de Kunming, en el sur de China.

  magick tile_fabric.gif -colorspace gray  -normalize \
          -fill gray50 +level 35%      texture_fabric.gif
  magick composite texture_fabric.gif  pagoda_sm.jpg \
            -tile   -compose Hardlight    photo_texture.jpg

[IM Output] [IM Output] [IM Output]

Ten en cuenta que si quieres realmente enmosaicar la textura sobre la imagen, debes usar el comando «magick composite» en lugar del más versátil «magick», aunque hay otras formas de enmosaicar imágenes en memoria usando convert. Ten en cuenta también que al añadir una textura así, los detalles más pequeños de la foto original pueden perderse por el exceso de ruido de la textura superpuesta; las texturas deberían mantenerse simples, o moderar adecuadamente su efecto, como el ajuste de niveles que reduce el contraste usado arriba. Para usar un patrón de imagen como textura, debe modificarse de modo que se use un color gris perfecto en las zonas que no cambian en la imagen original. Es decir, el color medio de la imagen debería ser aproximadamente un 50% de gris. En el ejemplo muestro una forma de hacer esto con casi cualquier imagen enmosaicable, aunque este método concreto no siempre funcione bien. Tales texturas pueden encontrarse por toda la web, como diversos patrones de fondo para páginas web. Puede que ni siquiera parezcan una textura, que sean coloridas, o incluso muy claras o muy oscuras. Tras el ajuste, sin embargo, descubrirás que puedes obtener efectos muy interesantes. Igual que hicimos antes, puedes limitar qué partes de una imagen se texturizan realmente creando una máscara adecuada. Por ejemplo, creemos una máscara solo del cielo casi 'blanco' de la foto de la pagoda.

  magick pagoda_sm.jpg -fuzz 10% -transparent white \
          -alpha extract -negate  pagoda_mask.png
  magick pagoda_sm.jpg  photo_texture.jpg  pagoda_mask.png \
          -composite  photo_texture_masked.jpg

[IM Output] [IM Output]

Ahora imagina una imagen de una dama con un vestido. Puedes coger cualquier patrón, sombrearlo adecuadamente y luego superponerlo sobre la imagen original para reemplazar el vestido por un diseño completamente distinto. Por supuesto, hay muchas variaciones de lo anterior para lograr el resultado final, y qué técnica concreta uses depende de ti, pero la idea básica es la misma. Texturizar la imagen, enmascarar y superponer el resultado. Como apunte, también te recomiendo que mires el método de composición alfa overlay, que es simplemente igual que la composición hard_light, pero con las dos imágenes intercambiadas. También hay muchos otros métodos de composición de sombreado que pueden usarse para texturizar una imagen de diversas formas.
[IM Output]

Enmascarado por croma (chroma key) -- modificar por áreas de un color específico

La foto de la izquierda la aportó un usuario en una discusión del foro de IM. Quería cambiar el color de la camisa de la chica, que era un bonito color 'rosa'. El problema es que el color no es solo 'rosa', sino todo un rango de distintos tonos de 'rosa'. Como has visto antes, para hacer cambios en una imagen, el primer paso suele ser generar una máscara adecuada de la zona que te interesa. Aquí usaré una técnica conocida como chroma key para generar una máscara de ese color específico. Esta técnica generalmente busca un color específico en una imagen para usarlo como máscara. Es también la técnica usada para los efectos de pantalla 'azul' y 'verde' empleados ampliamente en la televisión y el cine.

Esto básicamente implica extraer el 'tono (Hue)' separando las imágenes de canal, y luego buscar el 'matiz de tono' deseado. Por ejemplo...
|

  magick shirt.jpg -colorspace HSL -channel Hue -separate shirt_hue.jpg

Sin embargo, esta imagen de tono tiene un par de problemas.

  • Primero, un color 'rosa' está muy cerca del 'rojo', que se encuentra en la división donde el tono 'da la vuelta'. Para asegurarme de que esto no sea un problema, uso modulate para alejar el tono de esa 'discontinuidad' del tono. Esto no es un problema al extraer un 'chroma key' para pantallas 'verdes' o 'azules'.
  • Este color 'rosa' tampoco es un color muy saturado, sino que tiene un valor de saturación muy bajo. Esto significa que su 'tono' no es tan fuerte como debería.
  • ¡¡¡¡¡El otro problema es el fondo gris!!!!! El gris tiene muy poco tono, así que necesito eliminar de mi máscara final cualquier zona con poca o ninguna saturación, o de lo contrario cambiaré cosas del fondo. Ten en cuenta que esto técnicamente no es necesario si limito los cambios a giros de tono, que no afectan a los colores no saturados.

En resumen, la imagen de entrada habría funcionado mejor con un color más brillante e intenso que tampoco se pareciera tanto al color de la piel (o el pelo). Una camisa de un azul o verde intenso, por ejemplo. Pero trabajaré con lo que me dieron. [IM Output]
Así que extraigamos y combinemos las dos máscaras de canal. Ten en cuenta que el tono = Gray64 después de 'girar' los tonos de la imagen usando module, y la saturación (Saturated) = Black para el fondo gris. |

  magick shirt.jpg -modulate 100,100,33.3  -colorspace HSL \
          -channel Hue,Saturation -separate +channel \
          \( -clone 0 -background none -fuzz 5% +transparent grey64 \) \
          \( -clone 1 -background none -fuzz 10% -transparent black \) \
          -delete 0,1  -alpha extract  -compose multiply -composite \
          shirt_mask.png

Eso solo deja una serie de pequeñas 'motas' aisladas que pueden eliminarse con algo de suavizado por morfología (-morphology Smooth Square). No es perfecto, pero cumple su función. La mejor manera sería editar la máscara a mano para limpiarla. Ahora una máscara puede usarse con enmascarado por composición de forma muy parecida a como hicimos con los ejemplos de dobles exposiciones y anonimato anteriores. Sin embargo, si estás usando una máscara para modificar una imagen existente (sin distorsionar ni cambiar el tamaño de la imagen), entonces es más fácil usarla para definir qué zonas no son escribibles. Estas se conocen como máscaras de recorte o de escritura (consulta «[-mask](https://imagemagick.org/command-line-options/#-mask)» [IM Output]
Aquí limpio la máscara anterior de los pequeños defectos (opcional) y la niego para definir qué zonas quiero 'proteger contra escritura'. Luego establezco esta máscara, desplazo los tonos para convertir el 'rosa' en un color 'azul claro' y guardo la imagen resultante. |

  magick shirt_mask.png -morphology Smooth Square \
          -negate   shirt_write_mask.png

  magick shirt.jpg  -mask shirt_write_mask.png \
          -modulate 100,100,25     +mask shirt_blue.jpg

Sí, hay un ligero borde 'rosa', especialmente en el interior de la manga. Además, una pequeña zona de piel de su brazo se volvió de un azul bastante oscuro. Básicamente, estos son defectos de la máscara, y con un poco más de trabajo perfeccionando la máscara puedes corregir estos problemas. Pero no es un mal resultado. Un método para generar una máscara mejor es usar una imagen mucho más grande y de mayor resolución. Cuando la imagen resultante se redimensione después, estos pequeños defectos también se reducirán (con suerte) hasta volverse insignificantes. [IM Output]
El verdadero problema de este ejemplo concreto es que el 'color clave' está tan cerca de un color de piel normal que realmente estás buscando problemas. Por eso quienes usan esta técnica emplean pantallas 'verdes' y 'azules', ya que esos colores son lo más distintos posible del color de la 'piel' de las personas frente a la pantalla. Ten en cuenta que es mejor NO usar JPEG como imágenes de origen o de trabajo. ¡Realmente, JPEG solo debería usarse para tus imágenes finales! Esta es parte de la razón por la que se generaron tantos 'defectos de máscara' en primer lugar.

Pantalla verde

_Ejemplo futuro, usando enmascarado por croma de un 'fondo de pantalla verde'. Ampliado a partir del artículo de la wikipedia, Chroma Key

Los verdaderos problemas en el manejo de la 'pantalla verde' son el 'derrame de color (color spill)', con el pelo fino de color claro (rubio) y las zonas semitransparentes produciendo los peores efectos de derrame de color.

Eliminación simplista del derrame de color (corrección de color)_

g(r,g,b) => (r, min(g, b), b)

Determinación del alfa...

a(r,b,g) => K0 * b − K1 * g + K2

_Usar valores de 1.0 para todos los coeficientes K es una buena estimación inicial.

Como el color de fondo es bien conocido, y una vez que se conoce el 'alfa', puedes usar las técnicas mostradas en Eliminación de fondo usando dos fondos para eliminar cualquier 'halo de pantalla verde' que pueda estar presente mejor que con la primera fórmula de color.

_

Bosquejo artístico al carboncillo de la imagen

La transformación de bosquejo al carboncillo ofrece a los usuarios una forma muy sencilla de generar un renderizado en escala de grises simplificado de la imagen. No funciona bien con 'imágenes recargadas', pero con imágenes más simples puede producir un resultado muy llamativo.

     magick holocaust_sm.jpg -charcoal 5 charcoal.gif

[IM Output] [IM Output]

Imagen de contorno para colorear infantil

En una larga discusión sobre la generación de páginas para colorear en el foro de usuarios de IM, se desarrolló la siguiente receta para convertir con magick una simple foto en algo que los niños puedan colorear. Aquí está el mejor resultado que tenemos hasta ahora, aplicado a una foto que tomé del monumento conmemorativo del holocausto, en Berlín.

  magick holocaust_sm.jpg \
          -edge 1 -negate -normalize \
          -colorspace Gray -blur 0x.5 -contrast-stretch 0x50% \
          color-in.gif
  # Para imágenes con muchas sombras...
  #     #-segment 1x1 +dither -colors 2 -edge 1 -negate -normalize \

[IM Output] [IM Output]

Las últimas operaciones de lo anterior intentan suavizar las líneas y mejorar el resultado general. Por supuesto, la técnica anterior solo es útil con imágenes que tienen buenos cambios de color nítidos y, preferiblemente, una imagen de mayor resolución que la que usé arriba. Para imágenes de dibujos animados que ya tienen contornos negros con un fondo de color claro, el uso de la detección de bordes con el método anterior producirá directamente un efecto de 'duplicación' de los contornos negros. Puedes ver este efecto en las líneas duplicadas de los azulejos del camino que lleva al monumento, en la esquina inferior izquierda. Esto es un artefacto del modo en que funciona la detección de bordes, y puedes ver más ejemplos de esto en esa sección de los ejemplos de IM. La solución es negar las imágenes de este tipo antes de usar «[-edge](https://imagemagick.org/command-line-options/#edge)» para contornear las zonas de color.

  magick piglet.gif -background white -flatten \
          -colorspace Gray -negate -edge 1 -negate -normalize \
          -threshold 50% -despeckle \
          -blur 0x.5 -contrast-stretch 0x50% \
          color-in_cartoon.gif

[IM Output] [IM Output]

También aplico «[-threshold](https://imagemagick.org/command-line-options/#threshold)» para poder eliminar luego los puntos sueltos que a «[-edge](https://imagemagick.org/command-line-options/#edge)» parece gustarle generar. Después de eso, intento de nuevo suavizar las líneas con aliasing de la imagen. A lo anterior se le añadió, en una discusión sobre el filtro fotocopia de GIMP, el uso del método composición divide para encontrar contornos.

  magick taj_mahal_sm.png -colorspace gray \
          \( +clone -blur 0x2 \) +swap -compose divide -composite \
          -linear-stretch 5%x0%   photocopy.png

[IM Output] [IM Output]

La operación «[-linear-stretch](https://imagemagick.org/command-line-options/#linear-stretch)» de arriba ajusta cuán negras serán las zonas oscuras de las imágenes, mientras que el 'sigma' de «[-blur](https://imagemagick.org/command-line-options/#blur)» define la nitidez del sombreado.

Bosquejo a lápiz

Usando un tutorial de Photoshop (PSP) sobre cómo convertir imágenes en bosquejos a lápiz, dognose, del foro de usuarios de IM, logró crear los comandos equivalentes de ImageMagick. Aquí está su conversión, simplificada en unos pocos comandos de IM, que te permite procesar por lotes muchas imágenes a una forma de 'bosquejo a lápiz de artista'. Primero necesitamos una imagen «pencil.gif» especial. Esto puede llevar mucho tiempo, así que para este ejemplo la hice un poco más pequeña, conservando su capacidad de enmosaicarse sobre imágenes más grandes. Consulta Modificar imágenes de mosaico para los detalles de las técnicas. Esto solo hay que hacerlo una vez y luego puede reutilizarse. Por eso puedes generar una mucho más grande para tu propio uso, de modo que evites cualquier efecto de mosaico. Lo ideal es hacerla tan grande como las imágenes que planeas convertir. |

  magick -size 256x256 xc:  +noise Random  -virtual-pixel tile \
             -motion-blur 0x20+135 -charcoal 1 -resize 50% pencil_tile.gif

[IM Output]
Ahora solo se trata de superponer y mezclar esta imagen de sombreado a 'lápiz' con una foto. La imagen de lápiz se enmosaica para crear un lienzo del mismo tamaño que la imagen que estamos procesando. Luego se aplica a la imagen usando técnicas que se encuentran en Lienzos enmosaicados. Esto se fusiona después con una copia en escala de grises de la imagen original.

     magick pagoda_sm.jpg -colorspace gray \
          \( +clone -tile pencil_tile.gif -draw "color 0,0 reset" \
             +clone +swap -compose color_dodge -composite \) \
          -fx 'u*.2+v*.8' sketch.gif

[IM Output] [IM Output]

Ten en cuenta que, como el operador «[-blend](https://imagemagick.org/command-line-options/#blend)» del comando «[composite](basics.html#composite)» no está disponible en el comando «magick», opté por hacer el equivalente usando el operador casero (DIY) «[-fx](https://imagemagick.org/command-line-options/#fx)». Probablemente haya formas mejores y más rápidas, aunque más complicadas, de hacer esto. (se agradecen sugerencias) Esta no es la versión final, ya que el operador omite algunos aspectos de realce de bordes necesarios para contornear algunos de los cambios de color más claros pero nítidos de la imagen. ¿Puedes mejorar lo anterior? El algoritmo anterior se incorporó a IM como una transformación artística «[-sketch](https://imagemagick.org/command-line-options/#sketch)», aunque sin el suavizado de «[-resize](https://imagemagick.org/command-line-options/#resize)» para el 'mosaico de lápiz' generado...

  magick pagoda_sm.jpg -colorspace gray -sketch 0x20+120 sketch_new.gif

[IM Output] [IM Output]

Eliminación del viñeteado. Al tomar fotos (digitales o de otro tipo), el objetivo de la cámara generalmente oscurece los bordes y las esquinas de la imagen. Esto se llama 'viñeteado'. De hecho, este efecto del objetivo es tan común que a menudo se falsea a propósito usando el operador «[-vignette](https://imagemagick.org/command-line-options/#vignette)». Consulta la transformación de viñeteado. Martin Herrmann Martin-Herrmann@gmx.de quería eliminar el viñeteado de la cámara de sus fotos. Básicamente, tomó una foto de una hoja de papel blanco con una luz intensa sin usar flash. Luego quería combinar esto con sus fotos reales para aclarar adecuadamente los bordes y las esquinas de la imagen. Básicamente, lo que queremos hacer es dividir la foto original por la imagen en escala de grises de la foto del papel blanco bien iluminado, y entonces aclarará las partes de la imagen en la misma medida en que se había oscurecido la foto del 'papel blanco'. Esto es básicamente el método de composición '[Divide](compose.html#divide)', que divide la imagen 'fuente' por la imagen de 'fondo'. Por ejemplo,

  magick nikon18-70dx_18mm_f3.5.jpg  vegas_orig.jpg \
          -compose Divide -composite  vegas_fixed.jpg

[photo] [photo] [photo]
(haz clic para ver una imagen de la foto más grande)

Sin embargo, como la foto del 'papel blanco' probablemente no será un blanco verdadero, seguramente no quieras aclarar la imagen con este color 'blanco roto'. Para corregir esto, necesitamos multiplicar la imagen divisora por el color de su píxel central. Aquí está la solución final proporcionada a Martin, que usó el muy lento operador FX casero (DIY). Esto fue anterior a la incorporación de un método de composición divide que puede usarse para acelerar enormemente este proceso. La foto blanca también se pasó a escala de grises para eliminar igualmente cualquier distorsión de color; ten en cuenta que cambié el orden, lo que también conservará cualquier 'metadato' que hubiera en el original (ya que es la imagen de 'destino' en este caso). |

  magick vegas_orig.jpg \( nikon18-70dx_18mm_f3.5.jpg -colorspace Gray \) \
          -fx '(u/v)*v.p{w/2,h/2}'   vegas_fixed_fx.jpg

[photo]
Si miras con atención las fotos ampliadas, en particular las esquinas del 'cielo' superior izquierda y superior derecha, puedes ver los efectos del viñeteado y la corrección que se hizo. No es una solución perfecta y le vendría bien algo más de ajuste. Por ejemplo, en lugar de usar un píxel de escalado, podríamos preprocesar la imagen del 'papel blanco' y ajustarla también para un mejor resultado de eliminación del viñeteado. Ten en cuenta que no se recomienda usar JPEG para ningún tipo de trabajo fotográfico, ya que el formato puede introducir algunos artefactos e inconsistencias en los resultados. El formato solo es bueno para el almacenamiento y la visualización de los resultados finales. Una gran discusión sobre la corrección del viñeteado está en los foros de usuarios de IM, en la discusión ¿Corrección algorítmica del viñeteado para cámaras estenopeicas?. Las cosas que pueden afectar al viñeteado incluyen...

  • La distancia de la película al objetivo; más lejos significa más dispersión de la luz.
  • El área del 'círculo' de la apertura (objetivo o estenopo) debido al ángulo de la luz.
  • La disposición del material de la cámara alrededor de la apertura. Por ejemplo, el portaobjetivos o el grosor del estenopo.