Primitivas de Filtro de Manipulación de Píxeles

Estas primitivas de filtro mueven píxeles o mezclan píxeles adyacentes.

Matriz de Convolución

La primitiva de filtro Matriz de Convolución utiliza los píxeles vecinos para cambiar el color de un píxel. La forma en que se modifica el color del píxel viene determinada por una matriz N × M con un elemento por cada uno de los píxeles vecinos.

Fórmula de la Matriz de Convolución.

En el siguiente ejemplo, esta primitiva produce un desenfoque gaussiano mediante una matriz 5 × 5 alrededor del píxel central. El Núcleo es una representación en números enteros de una función gaussiana de dos dimensiones con una desviación estándar de 1.4 píxeles. Este núcleo está normalizado por el valor del parámetro Divisor. [15]

Cuadro de diálogo de la primitiva de filtro Matriz de Convolución.
Cuadro de diálogo Editor de filtros después de haber definido un efecto de desenfoque gaussiano utilizando la primitiva de filtro Matriz de Convolución.
Ejemplo de desenfoque gaussiano mediante la primitiva de filtro Matriz de Convolución.
Ejemplo de aplicación a una fotografía de este efecto de desenfoque gaussiano creado con la primitiva de filtro Matriz de Convolución.

Esta primitiva de filtro tiene los siguientes parámetros:

  • Tamaño: Tamaño de la matriz (x × y).
  • Objetivo: Con este parámetro se especifica el elemento de la matriz que corresponde al píxel objetivo. Por defecto, el Núcleo de la convolución se centra en el píxel objetivo.
  • Núcleo: La matriz de la convolución.
  • Divisor: Factor de escala de la convolución después de que se aplica el Núcleo.
  • Tendencia: Valor añadido a la convolución después de que se aplica el Núcleo. Su valor predeterminado es 0.
  • Modo de borde: Mediante este parámetro se puede elegir el método utilizado para ampliar la imagen sobre la que se aplica la primitiva de manera que ésta pueda actuar sobre los píxeles situados en los bordes de la imagen. Las opciones son: Duplicar (los píxeles de los bordes son duplicados), Ajustar (los píxeles necesarios se toman del lado opuesto de la imagen), Ninguno (se asigna valor cero a las componentes RGB y Alfa del color de los píxeles extra necesarios). Por el momento, Inkscape no utiliza este parámetro aunque aparezca incluido en la interfaz gráfica del programa.
  • Conservar alfa: Si se marca esta casilla, el valor de la componente Alfa se copiará directamente de la imagen original, de manera que no es modificado por la primitiva. Si no se marca la casilla, la componente Alfa se calcula de la misma forma que las componentes RGB.

La primitiva Matriz de Convolución está vinculada forzosamente con los píxeles a evaluar. Por defecto, el tamaño del píxel es el correspondiente a los de la pantalla. Esto significa, que la imagen resultante de la primitiva no es independiente de la resolución de la pantalla. El estándar SVG ofrece métodos para evitar esta dependencia de la resolución de pantalla mediante los atributos filterRes y kernelUnitLength, aunque Inkscape todavía no los reconoce.

Ejemplos

Detección de Bordes

Núcleo:

Matriz de Convolución: Fórmula para la detección de bordes.

Divisor = 1.0, Tendencia = 0.0, y Conservar alfa marcado.

Primitiva Matriz de Convolución, ejemplo de detección de bordes.
Detección de bordes.
Afilado de Bordes

Núcleo:

Matriz de Convolución: Fórmula para el afilado de bordes.

Divisor = 1.0, Tendencia = 0.0.

Primitiva Matriz de Convolución, ejemplo de afilado de bordes.
Afilado de bordes.
Desafilado de Bordes

En el ejemplo anterior de esta primitiva, el afilado de bordes resulta un poco extremo. Este otro ejemplo de desafilado es un poco más sutil.

Núcleo:

Matriz de Convolución: Fórmula para el desafilado de bordes.

Divisor = 9.0, Tendencia = 0.0.

Primitiva Matriz de Convolución, ejemplo de desafilado de bordes.
Desafilado de bordes.
Relieve

Núcleo:

Matriz de Convolución: Fórmula para el relieve.

Divisor = 1.0, Tendencia = 0.0.

Primitiva Matriz de Convolución, ejemplo de relieve.
Relieve.

Mapa de Desplazamiento

La primitiva de filtro Mapa de Desplazamiento deforma una imagen en mapa de bits según una transformación que viene determinada por otra imagen que es una segunda entrada de la primitiva. Cada píxel del mapa de bits original sufre una traslación a unas nuevas coordenadas mediante las ecuaciones x' = escala × (CX(x,y) − 0.5) y y' = escala × (CY(x,y) − 0.5) donde los términos CX y CY son cualquiera de las componentes de color RGB o Alfa, que se pueden seleccionar mediante los atributos X Channel e Y Channel. A los canales X e Y se les pueden asignar colores diferentes.

La primitiva de filtro Mapa de Desplazamiento se puede utilizar para crear algunos efectos interesantes. Aunque puede resultar bastante complicado calcular la segunda imagen adecuada que defina correctamente la transformación apropiada para el efecto deseado. Muchos de los filtros predefinidos usan una salida generada por la primitiva de filtro Turbulencia para crear deformaciones aleatorias.

En los siguientes ejemplos, el desplazamiento en la dirección x está controlado por la componente de color rojo, mientras que el desplazamiento en la dirección y está controlado por la componente de color verde. El color verde oliva del fondo de las imágenes de entrada que se han utilizado para definir cada transformación tiene unas componentes de color rojo y verde con valor 127 cada una. De esta forma, este color verde oliva (casi) no produce desplazamientos en estos ejemplos.

Imagen que define una transformación de aumento.
Imagen utilizada para definir una transformación de aumento (degradados uniformes dentro del círculo).
Efecto de aumento.
Efecto de aumento.
Imagen que define una transformación de burbuja.
Imagen utilizada para definir una transformación de burbuja.
Efecto de burbuja.
Efecto de burbuja.
Imagen que define una transformación de giro.
Imagen utilizada para definir una transformación de giro.
Efecto de giro.
Efecto de giro.
Imagen que define una transformación de onda.
Imagen utilizada para definir una transformación de onda.
Efecto de onda.
Efecto de onda.

Existen un par de problemas en la implementación de esta primitiva de filtro en la versión 0.46 de Inkscape. El primero es que cuando se utiliza como imagen de entrada una Imagen de fondo, esta primitiva adolece de errores de programación. Esto obliga a utilizar como imagen que controla el desplazamiento de la transformación, bien una imagen externa (mediante la primitiva de filtro Imagen), o bien la salida de otra primitiva de filtro . El segundo problema es que la imagen resultante de la aplicación de esta primitiva puede extenderse más allá de los límites de la zona de interés. Este problema se puede resolver ajustando la Zona de los Efectos de Filtro de la primitiva a las dimensiones de la caja de contorno del objeto.

Ver en la siguiente sección el ejemplo de las imágenes estereoscópicas como otra muestra de aplicación de esta primitiva de filtro.

[Nota]Nota

¿Es posible un desplazamiento nulo? No, dentro del estándar SVG es imposible un desplazamiento nulo. Las componentes de color RGB y Alfa se describen mediante un byte (8 bits). Esto se corresponde con un rango de valores enteros desde 0 hasta 255. Así, a un desplazamiento nulo le correspondería exactamente el valor equidistante entre 0 y 255, es decir, 127.5. Pero para especificar las componentes de color se utilizan valores enteros, y por ello 127.5 no es un valor válido. Por eso hay que elegir 127 o 128. En la mayoría de los casos prácticos, la desviación resultante será inapreciable.

Desenfoque Gaussiano

Como su nombre indica, la primitiva de filtro Desenfoque Gaussiano desenfoca objetos. Con esta primitiva se pueden añadir brillos y reflejos realistas a los dibujos, así como hacer que los objetos aparezcan desenfocados. Esta primitiva crea la imagen resultante mediante un promediado ponderado con una distribución gaussiana de los píxeles de la imagen original alrededor de la posición de cada uno de los píxeles de la imagen de salida.

La intensidad del desenfoque se define internamente en términos del llamado radio de desenfoque, que para aquellos con inclinaciones matemáticas coincide con la desviación estándar de la distribución gaussiana. Técnicamente, una función gaussiana se extiende hasta el infinito. Sin embargo, por razones prácticas el límite del desenfoque de un objeto es el doble del radio de desenfoque fuera de la caja de contorno del objeto para una intensidad máxima del desenfoque.

La primitiva de filtro Desenfoque Gaussiano hace un uso intensivo del procesador del equipo. El resultado depende de la relación entre dos factores contrapuestos: velocidad y calidad. La calidad del desenfoque se puede ajustar a la pantalla del monitor en la sección Filtros del cuadro de diálogo Preferencias de Inkscape (Archivo icon Preferencias de Inkscape... (Mayús.+Ctrl+P)). Elegir una de las opciones de baja calidad afectará más a los objetos que sean más delgados. La exportación de un dibujo en formato de mapa de bits se realiza siempre con el nivel de calidad más alto (por ello la exportación puede resultar lenta).

Un efecto de Desenfoque Gaussiano se puede crear tanto mediante el cuadro de diálogo Editor de filtros, como con el cuadro de diálogo Relleno y borde.

Desenfoque mediante el Cuadro de Diálogo Relleno y Borde

Crear un desenfoque mediante el cuadro de diálogo Relleno y borde es rápido y fácil. Este cuadro de diálogo crea automáticamente el filtro correspondiente (y también lo elimina si suprimimos el desenfoque mediante el cuadro de diálogo). En este cuadro de diálogo, la intensidad del desenfoque está definida en términos de un porcentaje. Un desenfoque de un 100% (el máximo desenfoque permitido) tiene un radio de desenfoque igual a 1/8 del perímetro de la caja de contorno del objeto. Para el caso de una caja de contorno cuadrada, el radio de desenfoque sería la mitad de un lado.

Para aplicar un Desenfoque Gaussiano a un objeto, primero hay que seleccionar el objeto y después ajustar la intensidad del desenfoque mediante el control deslizante Desenfoque situado en la parte inferior del cuadro de diálogo. Con este cuadro de diálogo solamente se pueden aplicar desenfoques simétricos.

[Sugerencia]Sugerencia

Los desenfoques creados mediante el cuadro de diálogo Relleno y borde dependen del tamaño del objeto al que se aplica el efecto. Para conseguir aplicar exactamente el mismo desenfoque a varios objetos de tamaños diferentes, se puede utilizar el comando Edición icon Pegar estilo (Mayús.+Ctrl+V) (si todos los atributos deben ser iguales en todos los objetos), o bien usar el cuadro de diálogo Editor de filtros para fijar el mismo valor del radio de desenfoque (desviación estándar) en todos los objetos.

Ejemplo del filtro Desenfoque Gaussiano.
Ejemplo de aplicación de la primitiva de filtro Desenfoque Gaussiano. A la estrella de la izquierda se le han aplicado unos desenfoques del 5%, 10%, y 20%, de izquierda a derecha.

Desenfoque mediante el Cuadro de Diálogo Editor de Filtros.

Para poder utilizar de manera más completa la primitiva de filtro Desenfoque Gaussiano es necesario usar el cuadro de diálogo Editor de filtros. Mediante este cuadro de diálogo, se pueden crear desenfoques asimétricos, así como tener un control preciso del radio de desenfoque. También es posible construir filtros más complejos como en el ejemplo del efecto de Sombra Paralela que se ha tratado en una sección anterior de este capítulo.

Ejemplos de Desenfoques

Desenfoque de un Degradado

Aplicar un desenfoque sobre un objeto con un Degradado hace que las transiciones de color del degradado sean más suaves.

Desenfoque Gaussiano -- Ejemplo con degradado.
Ejemplo de aplicación de un desenfoque gaussiano sobre un cuadrado con un Degradado radial. Izquierda: sin desenfoque. Centro: con un desenfoque del 2%. Derecha: con un desenfoque del 5%.
Recortes y Máscaras

La primitiva Desenfoque Gaussiano se aplica a un objeto antes que cualquier Recorte o Máscara. Esto da lugar a que, cuando se aplica un recorte a un objeto previamente desenfocado, aparezca un borde afilado a lo largo del trazo del recorte. Si se desea que el borde del recorte esté también desenfocado, hay que colocar el objeto recortado solo dentro de un Grupo, y después aplicar el desenfoque sobre ese Grupo. Si se quiere crear bordes difusos en un objeto como una imagen en mapa de bits, hay que aplicarle una máscara de transparencia blanca con sus bordes previamente desenfocados.

Desenfoque Gaussiano -- Ejemplo con recorte.
De izquierda a derecha: Una estrella con un trazo circular de recorte que todavía no se ha aplicado; la estrella con el recorte ya aplicado; la estrella recortada y después desenfocada; la estrella recortada y colocada dentro de un Grupo al que después se ha aplicado un desenfoque.
Desenfoque Gaussiano -- Ejemplo con máscara.
De izquierda a derecha: Máscara circular blanca todavía sin aplicar sobre una imagen en mapa de bits; la máscara circular desenfocada sin aplicar sobre la imagen; la imagen después de aplicarle la máscara circular desenfocada.
Clones en Mosaico

El cuadro de diálogo Crear clones en mosaico tiene una opción en la ficha Desenfoque y opacidad que permite variar el radio de desenfoque de los objetos clonados.

Desenfoque Gaussiano -- Clones en Mosaico.
Ejemplo de una esfera clonada con el cuadro de diálogo Crear clones en mosaico modificando los valores predeterminados de los parámetros de Desplazamiento, Escala, y Desenfoque.

Morfología

La primitiva de filtro Morfología engorda o adelgaza un objeto. Al parámetro Operador de esta primitiva se le pueden asignar los valores Dilatación o Erosión. La magnitud del cambio está controlada por el parámetro Radio que puede tomar valores independientes para las direcciones x e y.

Nota: Parece que Inkscape reduce el efecto de esta transformación en la exportación en formato PNG.

Morfología.
Ejemplos de aplicación de la primitiva de filtro Morfología. De izquierda a derecha: Objeto original. Objeto dilatado con un Radio de 4. Objeto erosionado con un Radio de 4.

Desvío

La primitiva de filtro Desvío desplaza un gráfico una distancia determinada especificada en las direcciones x e y. El ejemplo clásico de aplicación de esta primitiva es para crear una sombra. Ver el ejemplo del efecto de Sombra Paralela explicado en una sección anterior de este capítulo.

Esta primitiva tiene dos parámetros: Delta X, con el que se especifica el desplazamiento en la dirección horizontal, y Delta Y con el que se fija el desplazamiento en la dirección vertical. Hay que tener en cuenta que el sentido del eje y positivo es hacia abajo (de acuerdo con la definición del estándar SVG).

Si el desplazamiento especificado es grande, es necesario ampliar la zona del filtro. La zona de efecto del filtro se puede aumentar en la ficha Ajustes generales de filtros localizada en la parte inferior del cuadro de diálogo Editor de filtros.

Desvío.
Ejemplo de aplicación de la primitiva de filtro Desvío. Los tres cuadrados de la figura se han dibujado uno encima del otro. Después se han desplazado los cuadrados verde y rojo mediante la primitiva Desvío. En estos dos cuadrados se ha tenido que ampliar la zona de efecto del filtro.


[15] ¿Por qué razón definir un desenfoque gaussiano mediante la primitiva Matriz de Convolución cuando ya existe una primitiva Desenfoque Gaussiano? La primitiva de filtro Desenfoque Gaussiano está diseñada para producir desenfoques a gran escala. En cambio, la primitiva Matriz de Convolución trabaja a pequeña escala, disminuyendo el ruido desde los píxeles contiguos.