⚠️ 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/blur/index.html).

Ejemplos de ImageMagick -- Desenfoque y enfoque de imágenes

Prefacio e índice de los ejemplos de ImageMagick
Desenfoque de imágenes

Desenfoque de imágenes

Desenfocar imágenes para que queden borrosas puede no parecer una operación útil, pero en realidad resulta muy útil para generar efectos de fondo y sombras. También es muy útil para suavizar los 'dientes de sierra' y aplicar antialiasing a los bordes de las imágenes, así como para redondear los rasgos y producir efectos de realce. El desenfoque es tan importante que forma parte integral del redimensionado de imágenes, aunque mediante un método de desenfoque distinto, limitado a los límites de un solo píxel de la imagen original. En ImageMagick hay dos operadores generales de desenfoque de imágenes: la difusión "[-gaussian-blur](https://imagemagick.org/command-line-options/#gaussian-blur)" y "[-blur](https://imagemagick.org/command-line-options/#blur)". Los resultados de ambos son muy parecidos, pero como "[-blur](https://imagemagick.org/command-line-options/#blur)" es un algoritmo más rápido, en general se prefiere al primero aunque este último sea matemáticamente más correcto. (Véase Operadores de desenfoque vs. desenfoque gaussiano).

Argumentos de desenfoque/gaussiano

Los argumentos de "[-blur](https://imagemagick.org/command-line-options/#blur)" y "[-gaussian-blur](https://imagemagick.org/command-line-options/#gaussian-blur)" son los mismos, pero para alguien nuevo en el procesamiento de imágenes, los valores de los argumentos pueden resultar confusos.

**-blur  {_radius_}x{_sigma_} **

La configuración importante de lo anterior es el segundo valor, sigma. Puede entenderse como una aproximación de cuánto quiere que la imagen se 'extienda' o desenfoque, en píxeles. Piénselo como el tamaño del pincel usado para desenfocar la imagen. Los números son valores de punto flotante, así que puede usar un valor muy pequeño como '0.5'. El primer valor, radius, también es importante, ya que controla el tamaño del área que el operador debe examinar al extender los píxeles. Este valor normalmente debería ser '0' o, como mínimo, el doble del sigma. Para mostrarle los efectos de las opciones, tomemos esta imagen sencilla, con mucho espacio alrededor (los operadores de desenfoque necesitan mucho espacio para trabajar), y creemos una tabla con los resultados para varias configuraciones del operador. También usé a propósito una fuente que contiene líneas tanto gruesas como finas, para ver el difuminado de los detalles de líneas pequeñas y de las grandes áreas de color. |

  magick -font Gecko -pointsize 48  label:A \
          -bordercolor white -border 20x10  blur_source.png

[IM Output]

[IM Output]

Un radius pequeño limita cualquier efecto del desenfoque a los píxeles que están dentro de esa cantidad de píxeles del que se está desenfocando (un radio cuadrado). Por eso, usar un radius muy pequeño como '1' limitaba efectivamente el desenfoque a los vecinos inmediatos de cada píxel. Tenga en cuenta que, aunque sigma es de punto flotante, radius no lo es. Si se indica un valor de punto flotante (o se calcula internamente), se redondea hacia arriba al entero más cercano para determinar el 'vecindario' del desenfoque. Cuánto aporta cada vecino al resultado final lo sigue controlando sigma. Un sigma muy pequeño (menor que '1') limita su aportación a una cantidad pequeña, mientras que un sigma mayor aporta cantidades más uniformes de todos los vecinos. El mayor sigma, '65355', produce un simple promediado de todos los píxeles del vecindario cuadrado. Observe también que, con un radius pequeño pero un sigma grande, aparecen artefactos en el resultado desenfocado. Esto se ve especialmente en la salida de "-blur 5x8". Lo causa el pequeño vecindario cuadrado, que 'recorta' el área desenfocada, produciendo cortes bruscos en la suave curva gaussiana del desenfoque y, por tanto, artefactos de oscilación (ringing) a lo largo de los bordes nítidos. Así que…

Nunca use un radius menor que el sigma para los desenfoques

La solución ideal es simplemente fijar radius en '0x', como se muestra en la última fila de la tabla anterior. En ese caso, el operador intentará determinar automáticamente el mejor radius para el sigma dado. El radio más pequeño que usaría IM es 3, y normalmente es 3 × sigma en una versión Q16 de IM (en IM Q8 se usa un radio menor, ya que tiene menos precisión). La única ocasión en que usaría un radius distinto de cero sería con un sigma muy pequeño o para desenfoques especializados. Así que…

Cuando sea posible, use un radius de cero para las operaciones de desenfoque

Los valores pequeños de sigma normalmente solo se usan para difuminar líneas y suavizar bordes en imágenes a las que no se aplicó antialiasing (véase Antialiasing para más información). En esa situación, encuentro que un desenfoque de '1x0.3' es un valor útil para eliminar la mayoría de los 'dientes de sierra' de las imágenes. Los valores grandes, en cambio, son útiles para producir imágenes borrosas, para fondos o efectos de sombra (véase Fuentes compuestas), o incluso efectos de realce de imágenes (como se muestra a lo largo de la página de Ejemplos avanzados). Por la forma en que IM maneja los argumentos de estilo 'x', el sigma anterior es opcional. Sin embargo, es el valor más importante, así que debería ser radius el opcional, ya que radius puede determinarse automáticamente. Por eso, dar un único valor como argumento a este tipo de operadores de convolución es inútil. Es poco probable que esto cambie, ya que ha sido así durante mucho tiempo y rompería demasiadas cosas. El desenfoque usa la configuración de canal Para demostrar el desenfoque, empecemos de forma sencilla generando un círculo negro borroso sobre un fondo azul claro… |

  magick -size 70x70 xc:lightblue \
          -fill black -draw 'circle 35,35 20,25'  circle_on_blue.png
  magick circle_on_blue.png    -blur 0x8         circle_on_blue_blur.png

[IM Output] [IM Output]
Como puede ver, desenfocar una imagen plana como esta no plantea ningún problema. Simplemente funciona, como cabría esperar. Pero si lo intentamos de nuevo con una imagen que contiene un fondo transparente… |

  magick -size 70x70 xc:none \
          -fill black -draw 'circle 35,35 20,25'  black_circle.png
  magick black_circle.png       -blur 0x8        black_blurred.png

[IM Output] [IM Output]
¡Un momento! ¿Qué ha pasado? ¡La imagen no cambió! Pues bien, en realidad el operador sí funcionó. Pero "[-blur](https://imagemagick.org/command-line-options/#blur)", como operador de canal en escala de grises, está limitado por la configuración "[-channel](https://imagemagick.org/command-line-options/#channel)" a solo los tres canales de color. Eso significa que solo se desenfocaron los tres canales de color de la imagen, dejando intacto el canal de transparencia o alfa. Sin embargo, en el caso anterior, la imagen es un círculo totalmente opaco sobre un lienzo de fondo del color 'none', que IM define como ¡negro totalmente transparente! Eso significa que tenemos un círculo negro sobre un fondo negro transparente. En otras palabras, una imagen en la que todos los colores son negros, con algunas partes opacas y otras transparentes. En consecuencia, cuando desenfocamos la imagen, solo desenfocamos negro con negro, lo que, como probablemente pueda adivinar, ¡produjo negro! Por eso el resultado no presentó ningún cambio de color. Además, nunca tocamos el canal alfa o de transparencia de la imagen, así que terminamos con la transparencia de la imagen sin cambios. Es decir, ¡un círculo negro! Lo que realmente queríamos hacer es desenfocar los cuatro canales de la imagen, en particular el canal alfa. Para ello, fijamos la configuración "[-channel](https://imagemagick.org/command-line-options/#channel)" en los cuatro canales de la imagen (p. ej., usando un valor de 'RGBA'). |

  magick black_circle.png  -channel RGBA  -blur 0x8  black_blurred_RGBA.png

[IM Output]
En resumen…

Use siempre la configuración "-channel RGBA" al desenfocar imágenes con transparencia.

| La versión 5.5.7 de IM habría desenfocado automáticamente los cuatro canales de color, pero el operador tiene otros efectos defectuosos con imágenes con transparencia. Véase Error de desenfoque con transparencia para más detalles.
---|---
| Algunos formatos de imagen como GIF y JPEG no manejan píxeles semitransparentes. Por eso sugiero que use el formato PNG para cualquier imagen con algún tipo de colores semitransparentes, si es posible.
---|---
Como puede ver por lo anterior, la configuración "[-channel](https://imagemagick.org/command-line-options/#channel)" es muy importante para un operador en escala de grises como "[-blur](https://imagemagick.org/command-line-options/#blur)". Pero no es lo único que puede importar al usar un operador así. Por ejemplo, probemos de nuevo aquel último ejemplo de 'olvidé la configuración "[-channel](https://imagemagick.org/command-line-options/#channel)"', pero esta vez con un círculo amarillo. |

  magick -size 70x70 xc:none \
          -fill yellow   -draw 'circle 35,35 20,25'   yellow_circle.png
  magick yellow_circle.png       -blur 0x8           yellow_blurred.png

[IM Output] [IM Output]
Observe que, en lugar de obtener una imagen sin cambios como ocurrió con el círculo negro, esta vez se produce un horrible círculo amarillo con negro filtrándose por los bordes. ¡Puaj! Este problema lo causa un hecho del que pocos usuarios nuevos de IM se dan cuenta.

Los píxeles transparentes tienen color, aunque no pueda verlo.

En el caso anterior, ese color transparente era negro, que se filtró en el círculo amarillo. Por supuesto, podemos corregirlo configurando correctamente "[-channel](https://imagemagick.org/command-line-options/#channel)" para una imagen transparente; entonces todo funciona como se espera. |

  magick yellow_circle.png  -channel RGBA  -blur 0x8  yellow_blurred_RGBA.png

[IM Output]

Funcionamiento interno del desenfoque

Llevemos esto un paso más allá con un ejemplo más complicado, que nos permitirá explorar exactamente qué hace "[-blur](https://imagemagick.org/command-line-options/#blur)" internamente. Aquí creamos una imagen muy especial: un círculo amarillo dibujado sobre un fondo rojo totalmente transparente. Esto nos permitirá ver el efecto que tiene un color transparente al desenfocar imágenes. |

  magick -size 70x70 xc:'#F000' \
          -fill yellow   -draw 'circle 35,35 20,25'   yellow_on_red.png

[IM Output]
Tenga en cuenta que el color "#F000" es un rojo totalmente transparente. Es decir, las áreas de fondo de la imagen son en realidad de un color rojo invisible, en lugar del más habitual negro totalmente transparente. Esto es importante para pruebas posteriores. Podemos ver el color de las partes transparentes de la imagen eliminando efectivamente el canal alfa con el operador "[-alpha off](https://imagemagick.org/command-line-options/#alpha)". |

  magick yellow_on_red.png   -alpha off  yellow_on_red_matte.png

[IM Output]
Ahora intentemos de nuevo desenfocar solo los colores de la imagen, usando la configuración "[-channel](https://imagemagick.org/command-line-options/#channel)" predeterminada 'RGB'. |

  magick yellow_on_red.png   -blur 0x8   yellow_on_red_RGB.png

[IM Output]
Como puede ver, el fondo rojo totalmente transparente de la imagen se ha filtrado ahora en el círculo amarillo visible, dándole un interesante borde naranja, igual que antes. Puede que le guste este efecto, pero hay mejores formas de generarlo que depender de colores invisibles totalmente transparentes. Solo para demostrar que se puede desenfocar esta imagen correctamente, hagámoslo bien… |

  magick yellow_on_red.png  -channel RGBA  -blur 0x8  yellow_on_red_RGBA.png

[IM Output]
La razón por la que desenfocar incluyendo el canal alfa no produce los colores naranjas que aparecían antes es que, cuando el operador "[-blur](https://imagemagick.org/command-line-options/#blur)" detecta que el canal alfa está involucrado (según la configuración "[-channel](https://imagemagick.org/command-line-options/#channel)" actual), solo desenfoca usando los píxeles que son visibles según ese canal alfa. Si el canal alfa no está involucrado, lo ignora por completo, y el rojo totalmente transparente se desenfoca con el amarillo para producir distintos tonos de naranja. Básicamente, el algoritmo de desenfoque se ha modificado para ignorar todos los píxeles totalmente transparentes de la imagen, sea cual sea su color. Los píxeles semitransparentes siguen interviniendo, pero su efecto en el resultado también se modera según lo visibles que sean. El resultado es que el círculo se ha convertido en una mancha amarilla borrosa y semitransparente. Justo lo que el usuario probablemente intentaba lograr. Si de verdad quiere, puede desenfocar por separado tanto los colores como el canal alfa, desconectando así efectivamente el 'ajuste de visibilidad' del algoritmo sobre los canales de color. El resultado se parece más a un sol brillando a través de una neblina marrón sucia. |

  magick yellow_on_red.png  -channel  A  -blur 0x8 \
                             -channel RGB -blur 0x8  yellow_on_red_GS.png

[IM Output]
Este último ejemplo produjo lo que un operador en escala de grises puro habría producido si no hubiera habido absolutamente ninguna interacción entre el canal alfa y los colores de la imagen (transparentes o no). Es decir, cada uno de los canales rojo, verde, azul y alfa se desenfoca de forma completamente independiente de los demás, como si cada uno fuera una imagen en escala de grises separada. Recuerde solo que, como la configuración "[-channel](https://imagemagick.org/command-line-options/#channel)" predeterminada es 'RGB', la acción predeterminada es no desenfocar el canal alfa y desenfocar los colores invisibles junto con el color visible de la imagen. ¿No le alegra que "[-blur](https://imagemagick.org/command-line-options/#blur)" ya no sea siempre un operador en escala de grises puro? Aunque puede usarlo así si de verdad lo desea. Sin embargo, no siempre tuvo esta opción… | _Antes de la versión 6.2.4-4 de IM, los operadores "[-blur](https://imagemagick.org/command-line-options/#blur)" y "[-gaussian-blur](https://imagemagick.org/command-line-options/#gaussian-blur)" se aplicaban como una operación en escala de grises pura y, por tanto, no ajustaban la ponderación del color según la 'visibilidad' de su canal alfa. El resultado era que cualquier forma de desenfoque con transparencia casi siempre producía horribles efectos de 'halo negro', como el generado a propósito en el ejemplo anterior.

Esto se clasificó como un error grave y de larga duración dentro de la distribución de IM, y muy difícil de sortear. Para más detalles sobre este problema, véase la página Error de desenfoque con transparencia._
---|---

FUTURE: Blur and Trimming Images.

Operadores de desenfoque vs. desenfoque gaussiano

Ha habido cierta confusión sobre cuál operador, "[-blur](https://imagemagick.org/command-line-options/#blur)" o "[-gaussian-blur](https://imagemagick.org/command-line-options/#gaussian-blur)", es mejor para desenfocar imágenes. En primer lugar, "[-blur](https://imagemagick.org/command-line-options/#blur)" es más rápido, pero lo consigue mediante una técnica de dos etapas. Primero en un eje y luego en el otro. El operador "[-gaussian-blur](https://imagemagick.org/command-line-options/#gaussian-blur)", en cambio, es matemáticamente más correcto, ya que desenfoca en todas las direcciones simultáneamente. La diferencia de velocidad entre ambos puede ser enorme, de un factor de 10 o más, según la cantidad de desenfoque involucrada. En un contexto más técnico, "[-blur](https://imagemagick.org/command-line-options/#blur)" es un filtro de convolución ortogonal unidimensional de dos pasadas, mientras que "[-gaussian-blur](https://imagemagick.org/command-line-options/#gaussian-blur)" es un filtro de convolución cilíndrico bidimensional. Véase Convolución para más detalles. Los resultados de ambos métodos deberían ser iguales, a diferencia de lo que ocurre con otras operaciones de convolución 'filtradas'. Sin embargo, el sistema de dos pasadas implica que hay una etapa intermedia en la que pueden producirse efectos de redondeo o de cuantización. Cristy también lo confirma cuando informó… Siempre debería usar "[-blur](https://imagemagick.org/command-line-options/#blur)" en lugar de "[-gaussian-blur](https://imagemagick.org/command-line-options/#gaussian-blur)" porque es más rápido. Algunos píxeles serán distintos en el interior debido al redondeo, y los píxeles del borde pueden diferir por la pérdida de los efectos de borde del píxel virtual, de nuevo en la etapa intermedia. En resumen, los dos operadores son ligeramente diferentes, pero solo de forma mínima. Como "[-blur](https://imagemagick.org/command-line-options/#blur)" es mucho más rápido, úselo. Yo lo hago en prácticamente todos los ejemplos que implican desenfoque.

Desenfoques grandes con resize

Usar valores grandes de sigma para desenfocar imágenes es muy lento. Pero hay una técnica que puede usarse para acelerar este proceso. No obstante, es solo un método aproximado y le vendría bien algo de rigor matemático para mejorar los resultados. En esencia, la razón por la que los desenfoques grandes son lentos es que se necesita una ventana o 'núcleo' grande para fusionar muchos píxeles, para todos y cada uno de los píxeles de la imagen. Sin embargo, redimensionar (reducir la imagen) hace lo mismo, pero genera menos píxeles en el proceso. La técnica consiste básicamente en encoger la imagen y luego ampliarla de nuevo para generar el resultado muy desenfocado. El filtro gaussiano es especialmente útil para esto, ya que puede especificar directamente un define de sigma gaussiano. Por ejemplo, aquí desenfoco la pequeña imagen de la rosa con un valor de sigma de 5 mediante los dos métodos.

  magick rose: -blur 0x5   rose_blur_5.png
  magick rose: -filter Gaussian -resize 50% \
          -define filter:sigma=2.5 -resize 200%  rose_resize_5.png

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

Tenga en cuenta que el ajuste de sigma (usado solo en el paso de ampliación) es solo la mitad del que realmente se desea, ya que además se duplica el tamaño de la imagen. Puede aumentar el desenfoque global del resultado ajustando tanto la proporción de reducción como el valor de sigma indicado. El paso de reducción es el que produce la aceleración, pero debería aplicar al menos algo de desenfoque en el paso de ampliación como control de calidad. Esto es solo un ejemplo de la técnica. En realidad está pensada para valores de sigma muy muy grandes en imágenes muy muy grandes. Por ejemplo, en desenfoques con un sigma de 10 o más en fotos digitales modernas. Esta técnica también se usa para generar un desenfoque multinivel de una sola imagen en Color disperso de Shepards, alternativa.


Enfoque de imágenes

En construcción

El enfoque es el algoritmo de gráficos por computadora que más se ve en programas de televisión y películas. Imagine a la policía 'limpiando' una foto 'ampliada' de la matrícula del coche de unos atracadores, o la cara de un hombre en el vídeo borroso de la cámara de una tienda, y entenderá a qué me refiero. Básicamente, lo que hacen es intentar recuperar el detalle fino de una imagen que se perdió por el desenfoque natural de la lente de la cámara o por imágenes de baja resolución. ¿Argumentos de sharpen? (desplegar)

El factor más importante es sigma, ya que es el verdadero control de la
operación de enfoque. Solo por accidente histórico es el segundo término
en lo anterior.
Puede ser cualquier valor de punto flotante desde .1 para prácticamente
ningún enfoque hasta 3 o más para un enfoque intenso. De 0.5 a 1.0 va bastante bien.

El radio es solo un límite del efecto, igual que el umbral.

El radio se indica únicamente en unidades enteras, ya que así funciona el
algoritmo; cuanto mayor es, más lento. Pero debería ser como mínimo 1 o,
mejor aún, 2 veces sigma.
Primero olvídese del primer número y use simplemente 0, que entonces usará el mejor número para el factor 'sigma' que indique. Cuanto mayor sea sigma, más enfoca. -sharpen 0x.4 muy pequeño
-sharpen 0x1.0 enfoque de aproximadamente un píxel
-sharpen 0x3.0 probablemente demasiado grande
El operador "[-sharpen](https://imagemagick.org/command-line-options/#sharpen)" es una especie de desenfoque invertido. De hecho, funciona casi de la misma manera. Para ver ejemplos de cómo se relaciona con el desenfoque, véase Procesamiento de imágenes por interpolación y extrapolación. Por ejemplo, desenfoquemos una imagen sencilla y luego intentemos enfocarla de nuevo para eliminar el desenfoque.
  magick -font Gecko -pointsize 72 label:A  A_original.jpg
  magick A_original.jpg     -blur    0x3    A_blur.jpg
  magick A_blur.jpg         -sharpen 0x3    A_blur_sharp.jpg
  magick A_blur_sharp.jpg   -sharpen 0x3    A_blur_sharp_x2.jpg

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

Como puede ver, el resultado no es perfecto, ya que extender los píxeles hace que las esquinas nítidas de la imagen queden menos definidas. Observe en particular el engrosamiento adicional que se produjo en la esquina de las dos líneas de la parte superior de la imagen, así como la casi desaparición de las líneas finas. Ni siquiera repetir la operación o aumentar el tamaño del área de enfoque ayudará a devolver la imagen exactamente a la original, ya que básicamente se ha perdido el detalle más fino por el desenfoque de la imagen. Sin embargo, el detalle macro puede recuperarse bastante bien. Son los algoritmos de enfoque capaces de recuperar el detalle fino de una imagen desenfocada o muy ampliada los que dan mucho dinero en los paquetes de software que usan las fuerzas policiales, los astrónomos y las agencias gubernamentales de espionaje.

Enfoque unsharp

En construcción

Tanto el operador "[-sharpen](https://imagemagick.org/command-line-options/#sharpen)" como "[-unsharp](https://imagemagick.org/command-line-options/#unsharp)" funcionan con exactamente la misma técnica de restar un desenfoque de la imagen original. Para los detalles internos de cómo funcionan realmente "[-sharpen](https://imagemagick.org/command-line-options/#sharpen)" y "[-unsharp](https://imagemagick.org/command-line-options/#sharpen)", véase Convolución unsharpen.

  magick A_blur.jpg       -unsharp 0x5        A_blur_unsharp.jpg

[IM Output] [IM Output]

De comentarios sobre  [Enfoque con ImageMagick](http://redskiesatnight.com/2005/04/06/sharpening-using-image-magick/) de Alex Beels

  Para igualar el unsharp de GIMP
    Toma el radio de gimp y súmale 1 => sigma de IM
    Divide el umbral entre 255       => umbral de IM

  Así  GIMP  radius=2  amount=1.5  threshold=5  da como resultado
    -unsharp 0×3+1.5+0.0196

  Otro sugirió que   im_sigma = sqrt(gimp_radius)

**Notas en bruto de Fred Weinhaus**

Imagen desenfocada para la prueba.

A_original.jpg

magick A_original.jpg -blur 0x3 A_original_blur3.jpg

el enfoque (sharpen) no es más que una imagen desenfocada de tipo gaussiano
restada de la imagen para crear una imagen de bordes (filtro paso alto), que
luego se mezcla a partes iguales con la original, dando una imagen realzada con paso alto.

magick A_original_blur3.jpg -sharpen 0x3 A_original_blur3_sharp3.jpg

unsharp es más complejo. Es similar. Toma la diferencia (resultado de bordes)
como antes, es decir, como sharpen PERO solo mezcla una fracción o un múltiplo
de ella con la imagen original, Y solo si la diferencia supera un umbral. Así,
unsharp 0x3+1+0 es básicamente lo mismo que sharpen 0x3

magick A_original_blur3.jpg -unsharp 0x3+1+0
A_original_blur3_unsharp3_1_0.jpg

compare -metric rmse A_original_blur3_sharp3.jpg
A_original_blur3_unsharp3_1_0.jpg null:
164.661 (0.00251256)

La diferencia puede deberse a si se usa o no un filtro de desenfoque separable
(gaussiano) en uno u otro pero no en ambos. O podría ser solo alguna ligera
diferencia en otra parte de la implementación de IM.

Si se mezcla menos con la original, se obtiene menos enfoque.

magick A_original_blur3.jpg -unsharp 0x3+0.5+0
A_original_blur3_unsharp3_0p5_0.jpg

Si se mezcla más con la original, se obtiene más enfoque.

magick A_original_blur3.jpg -unsharp 0x3+2+0
A_original_blur3_unsharp3_2_0.jpg

Si se aumenta el umbral, se obtiene de nuevo menos enfoque.

magick A_original_blur3.jpg -unsharp 0x3+2+0.2
A_original_blur3_unsharp3_2_0p2.jpg

Varios de mis scripts (de Fred), binomialedge, gaussianedge, sharpedge, usan este
concepto de mezcla (entre el resultado del filtro paso alto y la imagen
original) y hay una descripción junto a los scripts. El umbralizado en mis
scripts se hace de otra manera y con un propósito distinto.

**Enfoque mediante deconvolución**

Existe una técnica que usa la deconvolución (división en una forma de frecuencia
de las imágenes generada por transformada rápida de Fourier). Esto funciona
mejor cuando se conoce el 'desenfoque' exacto aplicado a la imagen original, o se calcula de algún modo.

Por el momento, en IM solo hay disponibles métodos 'caseros' en bruto, y varios
de ellos se demuestran (se ensayan) en la subsección
[Multiplicación/división de Fourier](https://usage.imagemagick.org/fourier/fft_math/).

Generación de sombras

El operador "[-shadow](https://imagemagick.org/command-line-options/#shadow)" es un operador avanzado que se desarrolló junto con las páginas de ejemplos de IM. Básicamente representa un desenfoque y un recoloreado muy complejos de la forma de transparencia de la imagen dada. Esta es una operación que los usuarios de IM realizaban constantemente, pero que requería bastante conocimiento para averiguar cómo lograrla correctamente. El operador toma una imagen (normalmente un clon, que puede tener ya algo de transparencia) y la convierte en una imagen de sombra que luego puede colocarse bajo la imagen original con un desplazamiento dado (generalmente usando el operador especial Fusión de capas). Por ejemplo, aquí tiene un método estándar para dar sombra a una imagen existente, usando un color de sombra azul marino que combine con esta página web. |

  magick rose: \( +clone  -background navy  -shadow 80x3+5+5 \) +swap \
          -background none   -layers merge  +repage   shadow.png

[IM Output]
Observe cómo la imagen de la sombra está correctamente desplazada respecto de la imagen. Incluso puede poner a cero el valor 'sigma' del desenfoque y crear una sombra dura, pero semitransparente. |

  magick rose: \( +clone  -background navy  -shadow 60x0+4+4 \) +swap \
          -background none   -layers merge +repage  shadow_hard.png

[IM Output]
Usar "[-layers](https://imagemagick.org/command-line-options/#layers) merge" para superponer imágenes de sombra con la imagen original facilita generar sombras de una fuente de luz desde cualquier dirección, no solo desde la parte superior izquierda. |

  magick rose: \( +clone -background navy -shadow 80x3-5+5 \) +swap \
          -background none  -layers merge +repage  shadow_other.png

[IM Output]
Aunque lo más sencillo es usar simplemente una Fusión de capas, esta tiende a desplazar el desplazamiento global de la imagen resultante. No obstante, ese desplazamiento no lo causa el método de capas, sino "[+repage](https://imagemagick.org/command-line-options/#repage)", que elimina cualquier desplazamiento negativo o positivo que pueda haber en la imagen 'de capa' resultante. Véase El problema del desplazamiento de la sombra para técnicas alternativas. | El método de Fusión de capas se añadió en IM v6.3.6-2. Antes de eso, había que usar el operador similar de aplanado de capas "[-mosaic](https://imagemagick.org/command-line-options/#mosaic)" en su lugar. Sin embargo, ese operador tiene problemas (véase a continuación).
---|---

Sombras con forma

Pues bien, "[-shadow](https://imagemagick.org/command-line-options/#shadow)" se diseñó pensando en imágenes con forma (y esta es la razón de su complejidad). Por ejemplo, aquí tiene una fuente con sombra típica. |

  magick -background none -stroke black -fill white \
          -font Candice -pointsize 48 label:A -trim \
          \( +clone   -background navy   -shadow 80x3+3+3 \) +swap \
          -background none   -layers merge +repage  shadow_a.png

[IM Output]
Si en la imagen original hay suficiente espacio para incluir la sombra sin recortarla, puede usar este comando. Usa un método de composición especial '[DstOver](compose.html#dst_over)' para evitar tener que intercambiar el orden de las dos imágenes. |

  magick -background none -stroke black -fill white \
          -font Candice -pointsize 48 label:'A ' \
          \( +clone -background navy -shadow 80x3+3+3 \) \
          -background none -compose DstOver -flatten  shadow_a_size.png

[IM Output]
Probablemente vea un pequeño recorte en esto, ya que la imagen original no tenía del todo suficiente espacio extra para la sombra solicitada.

El problema del desplazamiento de la sombra

El problema de la sombra es que una sombra borrosa se extiende en todas las direcciones. Para compensarlo, el operador "[-shadow](https://imagemagick.org/command-line-options/#shadow)" amplía la imagen original real añadiendo un borde de 2 veces el tamaño del valor 'sigma' del desenfoque indicado. Es decir, si desenfoca una sombra usando 'x3', ampliará la imagen en 12 píxeles (2 veces 3 píxeles en cada lado). Para compensar esta ampliación, a la imagen de sombra también se le da un desplazamiento de lienzo virtual negativo apropiado, de modo que quede correctamente posicionada respecto de la imagen a la que da sombra. Para una imagen normal, eso significa que la imagen de sombra generada tendrá un desplazamiento negativo. Sin embargo, esto genera un problema cuando su IM no tiene disponible el método 'merge' de "[-layers](https://imagemagick.org/command-line-options/#layers)". Por ejemplo, aquí intentamos añadir una sombra en el lado izquierdo de la imagen, como si la luz brillara desde la parte superior derecha. |

  magick rose: \( +clone  -background navy  -shadow 60x3-5+5 \) +swap \
          -background none   -mosaic   shadow_left_clipped.png

[IM Output]
Como puede ver, la sombra fue recortada por el operador "[-mosaic](https://imagemagick.org/command-line-options/#mosaic)" debido al desplazamiento negativo. ¡No es bueno! Una solución es añadir un desplazamiento inicial a la imagen original para que el desplazamiento de la imagen de sombra resultante no sea negativo. |

  magick rose: -repage +11+0\
          \( +clone   -background navy   -shadow 80x3-5+5 \) +swap \
          -background none   -mosaic   shadow_left.png

[IM Output]
Otro método es desplazar ambas imágenes una cantidad apropiada después de generar la sombra. Esto elimina cualquier desplazamiento negativo antes de combinarlas con "[-mosaic](https://imagemagick.org/command-line-options/#mosaic)". Observe el uso de una bandera '!' con "[-repage](https://imagemagick.org/command-line-options/#repage)" para añadir el desplazamiento indicado a ambas imágenes. |

  magick rose: \( +clone -background navy -shadow 80x3-5-5 \) +swap \
          -repage +11+11\! -background none  -mosaic  shadow_tl.png

[IM Output]
La cantidad de espacio necesaria debería ser al menos 2×'sigma'-'offset', o en este caso 2×3--5 ⇒ 11 píxeles, o se arriesga a recortar la sombra. No obstante, un espacio de aproximadamente 'sigma'-'offset' suele producir un nivel de recorte aceptable. Otra alternativa es expandir la imagen original para dejar suficiente sitio a la sombra final. Esta es la MEJOR forma de manejar las sombras, conservando la ubicación original de la imagen en el lienzo virtual. Por ejemplo, aquí relleno la imagen original con algo de espacio extra para la sombra y luego coloco la imagen de sombra directamente debajo. Incluí un borde en el resultado mostrado para que pueda ver que la imagen final permanece centrada en la imagen 'rellenada'. |

  magick rose: -bordercolor None -border 11x11 \
          \( +clone -background navy -shadow 80x3+5+5 \) \
          -background none -compose DstOver -flatten \
          -compose Over  shadow_space.png

[IM Output]
La cantidad de relleno necesaria debería ser al menos 'sigma'+abs('offset') o, mejor aún, 2×'sigma'+abs('offset'), para asegurar que la sombra no se recorte. El relleno puede ser asimétrico para ahorrar espacio, pero normalmente se usa un relleno simétrico (como el anterior) por comodidad. | Tenga en cuenta que, aunque la configuración "-compose Over" no es realmente necesaria en lo anterior, se recomienda. De lo contrario, operaciones posteriores (incluso en otros comandos "magick") podrían verse afectadas, con resultados inesperados. Es decir, una configuración de composición no estándar puede afectar a otras operaciones, como: la superposición de imágenes, la adición de bordes o marcos, o simplemente otras composiciones.
---|---

Las sombras y Composite

Mucha gente en los foros genera una imagen de sombra y luego intenta usar el más básico "[-composite](https://imagemagick.org/command-line-options/#composite)" para fusionar las imágenes. Por ejemplo, superponer directamente la imagen original sobre una imagen de sombra (más grande) generada. |

  magick rose: \( +clone  -background navy  -shadow 60x3 \) \
          +swap -composite  +repage shadow_composite.png

[IM Output]
Lo primero que hay que recordar es que los operadores de composición son de muy bajo nivel y no leen ningún desplazamiento de capa o de lienzo virtual que puedan tener la imagen original o el operador de sombra. De hecho, todavía necesitamos eliminar o ajustar el posible desplazamiento negativo (malo) que añadió la sombra, usando la configuración Repage. Esto significa que el desplazamiento que ve en el ejemplo anterior se genera simplemente por la forma en que la sombra amplió la imagen de entrada para darle espacio. La sombra está donde está únicamente debido a la expansión de la imagen de sombra en 2 veces sigma. Además, si usa una 'sombra dura' (sigma cero), también terminaría sin ningún desplazamiento en la sombra y, por tanto, la sombra quedaría oculta por la imagen original, salvo por un posible efecto de borde de halo oscuro. En esencia, ha renunciado al cálculo de desplazamiento incorporado que proporciona el operador de sombra. Por supuesto, en su lugar puede calcular y configurar los ajustes apropiados de geometría/gravedad de composición, y la forma más fácil es usar una configuración "[-gravity](https://imagemagick.org/command-line-options/#gravity) Center", ya que la imagen de sombra ampliada se expande por igual en todos los lados. |

  magick rose: \( +clone  -background navy  -shadow 60x3 \) +repage \
          +swap -gravity center -geometry -3-5 -composite shadow_geometry.png

[IM Output]
Observe que el desplazamiento de geometría centrada es negativo porque se intercambió el orden de las imágenes.

Contornos con sombra

También puede usar "[-shadow](https://imagemagick.org/command-line-options/#shadow)" para generar contornos borrosos de formas, como texto. Al usar Fusión de capas, IM añadirá automáticamente el espacio extra necesario para el desenfoque semitransparente. |

  magick -background none -fill white \
              -font Candice -pointsize 48 label:A -trim \
          \( +clone -background black  -shadow 100x3+0+0 \) +swap \
          -background none   -layers merge +repage  shadow_outline.png

[IM Output]
Aquí puede ver un problema de usar una forma desenfocada para crear contornos. El borde de la forma siempre será al menos un 50% transparente, por la propia naturaleza del funcionamiento del desenfoque. Para compensarlo, puede ampliar la forma de la imagen a la que se dará sombra (véase un ejemplo en Fuente de contorno suave más densa). Mejor aún, puede ajustar la transparencia de la imagen de sombra mediante un ajuste de niveles para que el 50% de transparencia a lo largo de los bordes de la forma se vuelva totalmente opaco. |

  magick -background none -fill white \
          -font Candice -pointsize 48  label:A -trim \
          \( +clone -background black  -shadow 100x3+0+0 \
             -channel A -level 0,50% +channel \) +swap \
          +repage -gravity center -composite   shadow_outline_darker.png

[IM Output]
Otro método para manejar el posicionamiento y el desplazamiento de la sombra consiste básicamente en descartar todos los desplazamientos generados por "[-shadow](https://imagemagick.org/command-line-options/#shadow)" (usando "[+repage](https://imagemagick.org/command-line-options/#repage)") y superponer centrada la imagen original sobre la imagen de sombra más grande. Añadiendo un desplazamiento de composición "[-geometry](https://imagemagick.org/command-line-options/#geometry)", puede entonces desplazar la sombra como una acción aparte. |

  magick -background none -fill white -stroke black \
          -font Candice -pointsize 48  label:A -trim \
          \( +clone -background navy  -shadow 80x3 \) +swap \
          +repage -gravity center -geometry -3-3 -composite \
          shadow_geometry_offset.png

[IM Output]
Sin embargo, observe cómo el desplazamiento es negativo respecto al que usaría normalmente para posicionar la sombra. Esto se debe a que en realidad está desplazando la forma del texto y no la sombra, así que va en la dirección opuesta. No obstante, este método recortará la imagen de origen original, en lugar de la imagen de sombra, si el desplazamiento llega a ser mayor que el doble de la 'sigma' del desenfoque. Por eso no puede usarse para 'sombras duras' (usando una 'sigma' de desenfoque 'x0'), a menos que incluya algo de relleno en la imagen de sombra para superponer la imagen original. Con una sombra suave y borrosa, en cambio, eso rara vez es un problema. Para algunos ejemplos prácticos de sombreado, véase Sombreado de miniaturas y Mejor generación de logotipos 3D.

Sombras en el comando Montage

A partir de IM v6.3.1, la configuración "[-shadow](https://imagemagick.org/command-line-options/#shadow)" de "magick montage" empezó a aprovechar las suaves sombras 'con forma' que proporciona este operador. |

  montage -label Rose  rose: \
          -background none -geometry +5+5 -shadow  shadow_montage.png

[IM Output]
Sin embargo, no se proporcionan controles para configurar el color, el grado de difuminado y el desplazamiento de esa sombra, ya que "magick montage" nunca ofreció tales controles más allá de una simple opción de encendido/apagado.

Funcionamiento interno de la sombra

Internamente, "[-shadow](https://imagemagick.org/command-line-options/#shadow)" es extremadamente complejo. Básicamente, no solo necesita ampliar una imagen para acomodar una 'sombra suave y borrosa', sino que también necesita desenfocar la forma existente de la imagen, fijar su color apropiadamente y, por último, ajustar los desplazamientos de página/lienzo virtual; todo según las especificaciones del usuario. Por ejemplo, dado el siguiente comando "[-shadow](https://imagemagick.org/command-line-options/#shadow)"…

    magick image_clone.png -shadow 60x4+5+5   image_shadow.png

La operación equivalente de IM sería…

  magick image_clone.png -alpha set \
          -bordercolor none  -border 8  -repage -8-8\!  \
          -channel A -virtual-pixel transparent \
               -blur 8x4 -evaluate multiply .60 +channel
          -fill {background_color} -colorize 100% \
          -repage +5+5\!     image_shadow.png

Tenga en cuenta que el valor 8 de lo anterior es dos veces la sigma del desenfoque, para proporcionar suficiente espacio a la sombra desenfocada. Sin embargo, esto significa que la imagen final será 4 veces sigma píxeles más grande. Para compensarlo, también se añade una cantidad igual de desplazamiento negativo. Ahora bien, como se añadirá un desplazamiento negativo de 2 veces sigma a la imagen generada, hay que tener cuidado para evitar que la sombra se recorte o se posicione incorrectamente respecto de la imagen original. Eso puede hacerse dando a la imagen original un desplazamiento positivo inicial (como 8-5 o +3+3 píxeles), o usando la Fusión de capas, que entiende los desplazamientos negativos sin recortar la imagen final. Básicamente, use las técnicas anteriores para manejar correctamente los posibles desplazamientos negativos relacionados con las imágenes de sombra. Los formatos PNG y MIFF son los únicos formatos de imagen que conozco capaces de manejar un desplazamiento negativo, además de píxeles semitransparentes. Recomiendo usar PNG si se guardan imágenes de sombra para uso futuro.
Como dije, "[-shadow](https://imagemagick.org/command-line-options/#shadow)" es una operación muy compleja. Por supuesto, aunque el ejemplo anterior se acerca a lo que "[-shadow](https://imagemagick.org/command-line-options/#shadow)" hace internamente, no es exactamente lo mismo. El operador "[-shadow](https://imagemagick.org/command-line-options/#shadow)" real no cambia ninguna de las configuraciones globales, como los colores de borde/fondo/relleno o la configuración actual de píxel virtual. Además, cortocircuita el uso del operador "[-blur](https://imagemagick.org/command-line-options/#blur)" si la sigma del desenfoque está fijada en 0, para evitar que la función de desenfoque emita una advertencia por una sigma o un radio de cero.
FUTURE: overlaying multiple shadows

Overlaying two images with shadows, produces an unrealistic darkening of the
shadow where the shadow overlaps.  This darkening would be correct if each
object was lit by separate light sources, but more commonly the objects are
lit by the same light source.

The solution is to overlay the one image over the other, applying the shadow
effects to the opaque parts of each layer image in turn. That is, the
background shadow should be generated separately into each layer.  Remember
the shadow cast by the top most layer should become fuzzier than the shadow
contribution of the bottom most layer.

This complexity gets worse when you have three objects shadowing each other.
Also the offset and blurring from the shadow of each object should technically
be separate.  To generate that level of complexity, probably a 3-d ray-tracing
program should be used instead (sigh).

Desenfoques especializados

Hay algunos otros tipos de desenfoques que se añadieron en la versión 6 de IM y que tienen usos muy especiales. Operan de formas específicas, y no en todas las direcciones como hacen la mayoría de las demás operaciones de estilo 'convolución'. Tampoco funcionan necesariamente tan bien como otros métodos de generar desenfoques especializados, como distorsionar las imágenes antes y después de un desenfoque más normal. Véase, por ejemplo, Trucos de ciclo polar y Desenfoque elíptico (mapeado).

ADVERTENCIA: ¡Todos estos desenfoques son experimentales y la sintaxis puede cambiar!

Desenfoque radial

Puede desenfocar la imagen en círculo usando un "[-radial-blur](https://imagemagick.org/command-line-options/#radial-blur)", como si girara una y otra vez. Aunque técnicamente esto es un desenfoque rotacional o angular, más que un desenfoque radial. NOTA: Puede lograr un resultado de mucha mayor calidad (aunque a una velocidad mucho más lenta) usando una técnica de Despolar-Polar - Desenfoque rotacional. No obstante, tenga en cuenta que, como un operador "[-blur](https://imagemagick.org/command-line-options/#blur)" normal, "[-radial-blur](https://imagemagick.org/command-line-options/#radial-blur)" se ve afectado por la configuración "[-channel](https://imagemagick.org/command-line-options/#channel)". |

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 35,5 35,65' \
          -stroke yellow -strokewidth  9 -draw 'line 35,5 35,65' \
          -channel RGBA  -radial-blur 30   radial_blur.png

[IM Output]
Puede colocar el objeto fuera del centro (añadiendo algo de espacio a una imagen) para obtener efectos de "[-radial-blur](https://imagemagick.org/command-line-options/#radial-blur)" más interesantes. |

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 5,50 65,50' \
          -stroke yellow -strokewidth  9 -draw 'line 5,50 65,50' \
          -channel RGBA  -radial-blur 90   radial_blur_90.png

[IM Output]
El argumento del desenfoque es el ángulo que cubre el desenfoque radial. Es decir, la mitad de ese ángulo en cada dirección desde la imagen original. Así, un ángulo de 180 abarca medio círculo, mientras que 360 grados desenfocan la imagen en un círculo completo. |

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 5,50 65,50' \
          -stroke yellow -strokewidth  9 -draw 'line 5,50 65,50' \
          -channel RGBA  -radial-blur 180   radial_blur_180.png

[IM Output]
|

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 5,50 65,50' \
          -stroke yellow -strokewidth  9 -draw 'line 5,50 65,50' \
          -channel RGBA  -radial-blur 360   radial_blur_360.png

[IM Output]
Incluso puede añadir un poco de deformación de imagen para hacer el efecto más interesante… |

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 5,50 65,50' \
          -stroke yellow -strokewidth  9 -draw 'line 5,50 65,50' \
          -channel RGBA  -radial-blur 180 -swirl 180 radial_swirl.png

[IM Output]
El desenfoque radial de círculo completo puede usarse para generar degradados circulares aproximados. Sin embargo, formular la forma correcta para generar el degradado correcto puede ser extremadamente difícil y probablemente no merezca la pena. Aun así, lo intenté… |

  magick -size 80x80 xc:lightblue -fill red \
          -draw "path 'M 40,40   C 43,43 47,47 50,40 \
                  S 52,23 40,20   S 14,22 10,40   S 15,75 40,79 Z'" \
          radial_gradient_pre.gif
  magick radial_gradient_pre.gif  -radial-blur 360  radial_gradient.gif

[IM Output] [IM Output]

Desenfoque de movimiento

Puede añadir un desenfoque que se atenúa linealmente en una sola dirección (dando un radio y una sigma, además del ángulo en el que debe producirse el desenfoque) usando un "[-motion-blur](https://imagemagick.org/command-line-options/#motion-blur)". Esto da a su imagen un aspecto como si ella (o la cámara) se moviera muy muy rápido. |

  magick -size 70x70 xc:none  -channel RGBA \
          -fill yellow  -stroke red  -strokewidth 3 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x12+45  motion_blur.png

[IM Output]
Observe que no solo el objeto adquiere una estela, sino que los bordes en la dirección del movimiento también tienen el fondo desenfocado dentro de ellos. Este desenfoque del borde de avance puede mejorarse volviendo a dibujar o superponiendo la imagen original y reaplicando un "[-motion-blur](https://imagemagick.org/command-line-options/#motion-blur)" más pequeño varias veces. |

  magick -size 70x70 xc:none -channel RGBA \
          -fill yellow  -stroke red -strokewidth 3 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x8+45 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x6+45 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x2+45 \
          motion_blur_redraw.png

[IM Output]
Se pueden aplicar varios desenfoques de movimiento para producir cierta dispersión de la cola que deja el objeto en movimiento. Algo así como humo o llamas que se disipan. |

  magick -size 70x70 xc:none -channel RGBA \
          -fill yellow  -stroke red -strokewidth 3 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x12+25 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x12+55 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x12+40 \
          motion_blur_spread.png

[IM Output]
Esta técnica puede usarse para generar una sombra que se extiende por el suelo. Como alternativa, podría generar un desenfoque de movimiento y luego desenfocarlo radialmente un poco, aunque eso requiere desplazar algo la imagen para acertar con el centro. También puede añadir algo de deformación de imagen extra para hacer las cosas aún más interesantes… |

  magick -size 70x100 xc:none -channel RGBA \
          -fill yellow  -stroke red -strokewidth 3 \
          -draw 'circle 35,80 45,70'  -motion-blur 0x20+90 \
          -background none  -rotate 50  -wave 5x25  -rotate -50 \
          -gravity center   -crop 70x100+0+0  +repage \
          -draw 'circle 35,80 45,70'  -blur 0x2 \
          motion_wave.png

[IM Output]

Tenga en cuenta que, mientras "[-radial-blur](https://imagemagick.org/command-line-options/#radial-blur)" desenfoca en ambas direcciones, "[-motion-blur](https://imagemagick.org/command-line-options/#motion-blur)" solo desenfoca en una dirección. En ambos casos, recomiendo rellenar la imagen con espacio extra alrededor del borde (generalmente usando "[-border](https://imagemagick.org/command-line-options/#border)"), ya que estos dos desenfoques especializados tienen fuertes efectos de borde que conviene evitar. Si encuentra un ejemplo o un uso más práctico o interesante de lo anterior, envíeme una copia por correo electrónico (dirección en el pie de la página).


Difuminado de formas mediante desenfoque

En construcción

ADVERTENCIA: Esta sección está ahora desactualizada, y los usuarios que quieran difuminar correctamente una imagen deberían consultar Difuminado de formas mediante distancia. Lo que se muestra aquí es lo que se conoce como 'difuminado por desenfoque', que, como se ve en la parte posterior, es una 'técnica de difuminado falsa'. Aun así, sigue siendo un método útil, pero solo con formas de imagen 'convexas'. Cuando recorta una forma de una imagen, a menudo quiere difuminar o desenfocar un poco los bordes de la forma para darle un aspecto más suave, restar protagonismo a las partes fuera de la forma que pudieran haberse incluido por accidente, o lograr que la imagen encaje en el fondo sin que sea obvio que es un copiar y pegar. Básicamente, en lugar de tener un borde 'duro' en alguna forma, se suaviza para 'fingir' antialiasing o desenfoque de lente, de modo que el pegado sea más uniforme. Por ejemplo, aquí tengo una imagen GIF a la que superpongo un fondo de color claro. |

  magick shape.gif -background wheat -flatten  overlaid.png

[IM Output]
Sin embargo, como estoy superponiendo una imagen GIF con transparencia booleana, y por tanto con bordes muy dentados o en forma de escalera, la imagen parece muy fuera de lugar sobre el fondo. Si trabajara con imágenes de la vida real, el resultado anterior parecería muy artificial. Pero desenfocando un poco la transparencia de la imagen, puedo hacer que la superposición encaje en el fondo con más suavidad. |

  magick figure.gif -alpha set -virtual-pixel transparent \
          -channel A -blur 0x0.7  -level 50,100% +channel \
          -background wheat -flatten  edge_blured.png

[IM Output]
Por cierto, esta es exactamente la misma técnica que se usa para generar bordes suaves en miniaturas. Para más ejemplos de esto, fíjese en los resultados del script de enmascaramiento "feather" de Fred Weinhaus. Como puede ver, esto funciona muy bien para casos simples, cuando hay un alto contraste entre la imagen superpuesta y el fondo. Sin embargo, hay problemas serios cuando quiere usar un factor de desenfoque de difuminado mucho mayor, o cuando las dos imágenes son ambas de colores muy claros.
Tenga en cuenta que, como el desenfoque se extiende tanto hacia dentro como hacia fuera de la forma, hay que ajustar el canal alfa de modo que el borde de la forma sea cero (totalmente transparente), pero se vuelva rápidamente totalmente opaco a medida que se aleja del borde. Un ejemplo de justo ese ajuste del canal alfa lo proporciona CLUT con manejo de transparencia. Este ajuste es crítico; de lo contrario, en lugar de restar protagonismo al área fuera de la forma, se añade una sombra o un halo semitransparente del área fuera de la forma. Básicamente, algún 'color indefinido' semitransparente que antes quedaba oculto por la transparencia de la imagen. No obstante, el desenfoque tiene un problema especialmente molesto: también suaviza el contorno de la forma. Por ejemplo… |

  magick -size 100x60 xc: -draw 'polygon 5,5 50,30 5,55 95,30' \
          sharp_angles.gif

[IM Output]
Si desenfoca esta forma en particular, obtiene… |

  magick sharp_angles.gif -blur 0x5  feather_blurred.gif

[IM Output]
Observe cómo las puntas de la máscara perdieron más protagonismo que los bordes. Y observe también cómo el ángulo interno parece haberse 'rellenado', lo que, con transparencia, puede dar como resultado que píxeles totalmente transparentes se vuelvan semitransparentes. ¡Es decir, píxeles con un color indefinido pueden llegar a hacerse visibles! Puede verlo más claramente si umbralizamos la imagen. |

  magick feather_blurred.gif  -threshold 50%  feather_blur_thres.gif

[IM Output]
Este es el problema de usar el 'desenfoque' como método para difuminar imágenes. Y preocupa especialmente al tratar con cosas como dedos y orejas, así como las zonas entre las piernas. Es decir, el efecto sobre la forma de los apéndices en sí y los espacios intermedios. Si la imagen tiene un contorno de borde tipo dibujo animado, esto no es un problema tan grande para un difuminado de '1 píxel'. Pero para imágenes de la vida real (sin bordes definidos) es un problema real. Una solución adecuada sería encontrar algún tipo de medida de lo lejos que está un punto del borde de la forma, pero de modo que dos bordes cercanos no sumen sus efectos. Esta operación de medición de distancia se ha añadido ahora a IM, y se conoce como Morfología de distancia. Para más detalles sobre cómo usarla para el difuminado, véase Difuminado de formas mediante distancia.


Operadores relacionados

Basic image modifications
  -despeckle -enhance
  -noise  -spread -displace

  -median
    Set each channel color of the pixel to the median value of all all pixels
    within a given radius. (median = center most value of all values found,
    half on one side, half on the other).  This is a way of "de-speckling" an
    image  (such a dust in a scan).  But could distort edges, cause some color
    channel aburation, and remove thin lines.

    This filter is the best technique to use for removing Salt & Pepper
    noise, especially on gray scale images.

    It is suggested that a trim for a scan use a median filtered image for
    attempting to find the appropriate bounding box.

  -adaptive-sharpen  radius x sigma
    Adjust sharpening so that it is restricted to close to image edges
    as defined by edge detection.

    See forum discussion
      https://magick.imagemagick.org/viewtopic.php?f=1&t=10266

  -adaptive-blur   radius x sigma
    Blur images, except close to the edges as defined by an edge detection
    on the image.  Eg make the colors smoother, but don't destroy any
    sharp edges the image may have.

  -adaptive-resize
    Resize but attempt not to blur across sharp color changes