Para responder a la segunda parte de su pregunta, un desenfoque gaussiano es simplemente la superficie gaussiana 3-d aplicada como un núcleo de convolución sobre la imagen. Wikipedia tiene una gran referencia en el propio algoritmo, pero básicamente, se toma los valores de una curva de Gauss y convertir eso en una matriz cuadrada, y se multiplica por cada píxel de la imagen, por ejemplo:
Kernel:
[0 1 2 0 0
1 4 6 4 1 X Iterate over every single pixel in the image
2 6 10 6 2
1 4 6 4 1
0 1 2 1 0]
(Tenga en cuenta que esto es solo un kernel de muestra, hay eqns muy específicas que, dependiendo de sus variables gaussianas, obtendrá diferentes resultados)
Para responder a la parte del rendimiento de su pregunta, la velocidad total de este algoritmo dependería en algunas cosas, suponiendo una imagen de tamaño constante. Digamos que la imagen es NxM píxeles, y el núcleo de convolución es PxP píxeles. Tendrá que hacer P P N * M operaciones. Cuanto mayor sea P, más operaciones tendrá que hacer para una imagen determinada. Puede hacerse astuto con el algoritmo que usa aquí, haciendo una fila muy específica o matemática basada en columnas.
La implementación también es muy importante. Si quiere ser extremadamente eficiente, probablemente quiera usar las instrucciones más avanzadas que su arquitectura ofrezca. Si está utilizando un chip Intel x86, probablemente quiera obtener una licencia para las primitivas de rendimiento de Intel (IPP) y llamar directamente a esas instrucciones. IIRC, OpenCV hace uso de IPP cuando está disponible ...
También podría hacer algo muy inteligente y trabajar con todos los enteros escalados si el rendimiento de coma flotante en su arquitectura dada es pobre. Esto probablemente aceleraría un poco las cosas, pero buscaría otras opciones antes de seguir por este camino.
Esta es una manera rápida y fácil de acelerar la convolución directa con un núcleo PxP desde operaciones P^2 hasta operaciones 2P. – las3rjock
Mi gaussiano está aplicando en ambas dimensiones, su complejidad de tiempo es 2 * p * M * N, es 20 veces más lento que el de opencv – user25749