Articulo de referencia

Desenfoque de caja

Un ejemplo de una imagen desenfocada mediante un desenfoque de caja. Un desenfoque de caja (también conocido como filtro lineal de caja ) es un filtro lineal en el dominio espac...

Un ejemplo de una imagen desenfocada mediante un desenfoque de caja.

Un desenfoque de caja (también conocido como filtro lineal de caja ) es un filtro lineal en el dominio espacial en el que cada píxel de la imagen resultante tiene un valor igual al valor promedio de sus píxeles vecinos en la imagen de entrada. Es una forma de filtro de paso bajo ("desenfoque"). Un desenfoque de caja de 3x3 ("radio 1") se puede escribir como una matriz

19[111111111].{\displaystyle {\frac {1}{9}}{\begin{bmatrix}1&1&1\\1&1&1\\1&1&1\end{bmatrix}}.}

Debido a su propiedad de usar pesos iguales, se puede implementar usando un algoritmo de acumulación mucho más simple, que es significativamente más rápido que usar un algoritmo de ventana deslizante. [ 1 ]

Los desenfoques de caja se utilizan frecuentemente para aproximar un desenfoque gaussiano . [ 2 ] Según el teorema del límite central , la aplicación repetida de un desenfoque de caja aproximará un desenfoque gaussiano. [ 3 ]

En el dominio de la frecuencia , un desenfoque rectangular tiene componentes negativas y ceros. Es decir, una onda sinusoidal con un período igual al tamaño de la caja se desenfocará por completo, y las longitudes de onda más cortas que el tamaño de la caja pueden invertir su fase, como se observa cuando dos círculos bokeh se tocan para formar un punto brillante donde en la imagen original habría un punto oscuro entre dos puntos brillantes.

Extensiones

  • Gwosdek et al. extendieron el desenfoque de caja para que admita un radio fraccional: los bordes del filtro 1D se expanden con una fracción. Esto permite una aproximación gaussiana ligeramente mejor debido a la eliminación del error de redondeo entero. [ 3 ]
  • Mario Klingemann tiene un "desenfoque por apilamiento" que intenta emular mejor el aspecto de Gaussian en una sola pasada mediante el apilamiento de pesos:19[12321]{\displaystyle {\frac {1}{9}}{\begin{bmatrix}1&2&3&2&1\end{bmatrix}}}[ 4 ] [ 5 ] La respuesta de impulso triangular que forma se descompone en dos rondas de desenfoque de caja. [ 3 ]
  • La imagen integral apilada de Bhatia et al. toma el promedio ponderado de algunos desenfoques de caja para ajustar la curva de respuesta gaussiana. [ 3 ]

Implementación

El siguiente pseudocódigo implementa un efecto de desenfoque de caja de 3x3.

Desenfoque de caja (imagen) {  establecer nuevaImagen a imagen;  Para x /*fila*/, y/*columna*/ en newImage hacer:  {  // ¡El kernel no cabría!  Si x < 1 o y < 1 o x + 1 == ancho o y + 1 == alto entonces:  Continuar;  // Establecer P al promedio de 9 píxeles:  XXX  XPX  XXX  // Calcular el promedio.  Suma = imagen[x - 1, y + 1] + // Esquina superior izquierda  imagen[x + 0, y + 1] + // Centro superior  imagen[x + 1, y + 1] + // Esquina superior derecha  imagen[x - 1, y + 0] + // Medio izquierdo  imagen[x + 0, y + 0] + // Píxel actual  imagen[x + 1, y + 0] + // Medio derecho  imagen[x - 1, y - 1] + // Abajo a la izquierda  imagen[x + 0, y - 1] + // Centro inferior  imagen[x + 1, y - 1]; // Abajo a la derecha  nuevaImagen[x, y] = Suma / 9;  }  Devuelve la nueva imagen; } 

El ejemplo no maneja los bordes de la imagen, que no cabrían dentro del kernel, por lo que estas áreas permanecen sin desenfocar. En la práctica, el problema se maneja mejor con: [ 3 ]

  • Introducir un canal alfa para representar la ausencia de colores;
  • Ampliar el límite rellenando valores, ordenados por calidad:
    • Rellena una imagen reflejada en el borde.
    • Rellena con un color constante que se extienda desde el último píxel.
    • Almohadilla de un color fijo

Se pueden aplicar varias optimizaciones al implementar el desenfoque de caja de radio r y N píxeles: [ 6 ]

  1. El desenfoque de caja es un filtro separable , por lo que solo se necesitarán dos pasadas unidimensionales de promediado de 2r + 1 píxeles, una horizontal y otra vertical, para cada píxel. Esto reduce la complejidad de O( Nr² ) a O( Nr ) . En la terminología del procesamiento digital de señales , cada pasada es un filtro de promedio móvil .
  2. Acumulación. En lugar de descartar la suma de cada píxel, el algoritmo reutiliza la suma anterior y la actualiza restando el píxel antiguo y sumando el nuevo dentro del rango de desenfoque. Se puede utilizar una tabla de áreas sumadas de forma similar. Esto reduce la complejidad de O( Nr ) a O( N ) .
  3. Cuando se utiliza en múltiples pasadas para aproximar un desenfoque gaussiano, la construcción de integrador en cascada y filtro de peine permite realizar la operación equivalente en una sola pasada. [ 7 ]

Véase también

Referencias

  1. Wojciech Jarosz. 2001. Convoluciones de imágenes rápidas .
  2. Especificación W3C SVG1.1, 15.17 Primitiva de filtro 'feGaussianBlur' .
  3. 1 2 3 4 5 Getreuer, Pascal (17 de diciembre de 2013). "Un estudio de algoritmos de convolución gaussiana" . Procesamiento de imágenes en línea . 3 : 286–310 . doi : 10.5201/ipol.2013.87 .( documentación del código )
  4. "Stackblur y Stackblur cuadrático" . observablehq.com . 12 de noviembre de 2018.
  5. "Cómo desenfocar una imagen en Android" . Medium . 10 de febrero de 2020.
  6. Kutsvir, Ivan. "Desenfoque gaussiano más rápido (en tiempo lineal)" . Consultado el 4 de abril de 2020 .
  7. Sitaker, Kragen. "Hmm, aparte de mi nota sobre cómo la familia de núcleos que descubrió Costella son precisamente las B-splines cardinales uniformes..." Hacker News .