En convolución, dos funciones matemáticas se combinan para producir una tercera función. En las funciones de procesamiento de imágenes se suelen llamar núcleos. Un núcleo no es más que una matriz (cuadrada) de píxeles (una imagen pequeña, por así decirlo). Por lo general, los valores en el núcleo suman uno. Esto es para asegurarse de que no se agregue o elimine energía de la imagen después de la operación.
Específicamente, un núcleo gaussiano (utilizado para desenfoque gaussiano) es una matriz cuadrada de píxeles donde los valores de los píxeles corresponden a los valores de una curva gaussiana (en 2D).
Cada píxel de la imagen se multiplica por el núcleo gaussiano. Esto se hace colocando el píxel central del núcleo en el píxel de la imagen y multiplicando los valores en la imagen original con los píxeles en el núcleo que se superponen. Los valores resultantes de estas multiplicaciones se suman y ese resultado se usa para el valor en el píxel de destino. Mirando la imagen, multiplicaría el valor en (0,0) en la matriz de entrada por el valor en (i) en la matriz del núcleo, el valor en (1,0) en la matriz de entrada por el valor en (h ) en la matriz del núcleo, y así sucesivamente. y luego agregue todos estos valores para obtener el valor de (1,1) en la imagen de salida.
Para responder a su segunda pregunta primero, cuanto más grande sea el núcleo, más costosa será la operación. Por lo tanto, cuanto mayor sea el radio del desenfoque, más durará la operación.
Para responder a su primera pregunta, como se explicó anteriormente, la convolución se puede hacer multiplicando cada píxel de entrada con todo el núcleo. Sin embargo, si el núcleo es simétrico (que es un núcleo gaussiano), también puede multiplicar cada eje (x e y) de forma independiente, lo que disminuirá el número total de multiplicaciones. En términos matemáticos adecuados, si una matriz es separable, puede descomponerse en matrices (M × 1) y (1 × N). Para el núcleo gaussiano anterior, esto significa que también puede usar los siguientes núcleos:
1256⋅⎡⎣⎢⎢⎢⎢⎢⎢1464141624164624362464162416414641⎤⎦⎥⎥⎥⎥⎥⎥=1256⋅⎡⎣⎢⎢⎢⎢⎢⎢14641⎤⎦⎥⎥⎥⎥⎥⎥⋅[14641]
Ahora multiplicaría cada píxel en la imagen de entrada con ambos núcleos y agregaría los valores resultantes para obtener el valor para el píxel de salida.
Para obtener más información sobre cómo ver si un núcleo es separable, siga este enlace .
Editar: los dos núcleos que se muestran arriba usan valores ligeramente diferentes. Esto se debe a que el parámetro (sigma) utilizado para la curva gaussiana para crear estos núcleos fue ligeramente diferente en ambos casos. Para obtener una explicación sobre qué parámetros influyen en la forma de la curva gaussiana y, por lo tanto, los valores en el núcleo siguen este enlace
Editar: en la segunda imagen de arriba dice que el núcleo que se usa está volteado. Por supuesto, esto solo hace alguna diferencia si el núcleo que usa no es simétrico. La razón por la que necesita voltear el núcleo tiene que ver con las propiedades matemáticas de la operación de convolución (consulte el enlace para obtener una explicación más detallada sobre la convolución). En pocas palabras: si no voltea el núcleo, el resultado de la operación de convolución será volteado. Al voltear el kernel, obtienes el resultado correcto.