Este artículo presenta principalmente la comprensión de Python sobre la convolución. Hay ejemplos de código detallados en el artículo, que tienen un buen valor de referencia. Espero que sea útil para todos.
función de convolución
python
Proporciona una variedad de esquemas de convolución. En comparación, la función de convolución definida en es ligeramente más compleja ndimage
que la convolución en numpy
y . Esto se puede vislumbrar solo por el número de parámetros de entrada.signal
1 2 3 4 5 |
|
Las dos primeras son funciones de convolución unidimensionales, y ndimage puede realizar operaciones de convolución en matrices multidimensionales a lo largo de un único eje de coordenadas, y las dos últimas son convoluciones multidimensionales.
Las funciones de convolución en numpy y signal tienen tres modos, que se utilizan para ajustar las características del borde después de la convolución. Si las dimensiones de los dos objetos de convolución de entrada son N NN y M MM respectivamente, entonces la salida de estos tres modos El resultado es
full
: La dimensión de salida es N + M − 1 N + M-1N + M − 1. Las señales en el último punto no se superponen en absoluto, por lo que el efecto de borde es obvio.same
: Dimensión de salida máx ( M , N ) \max(M,N)max(M,N), los efectos de borde aún son visiblesvalid
: Dimensión de salida ∣ M − N ∣ |MN|∣M−N∣, solo devuelve áreas completamente superpuestas, lo que equivale a eliminar todos los puntos con efectos de borde.
ndimage
En convolve
vista del efecto de borde, la imagen se expande y lo que mode
determina es el formato de relleno después de la expansión. Supongamos que la matriz a filtrar es a b c d
, luego, en diferentes modos, los bordes se rellenan de la siguiente manera
relleno izquierdo | datos | acolchado derecho | |
---|---|---|---|
reflect |
dcba | a B C D | dcba |
constant |
kkkk | a B C D | kkkk |
nearest |
aaaa | a B C D | dddd |
mirror |
DCB | a B C D | cba |
wrap |
a B C D | a B C D | a B C D |
Entre ellos, se establece k
mediante parámetros cval
.
Estos cinco métodos para modificar límites scipy.ndimage
son muy comunes en funciones, especialmente en funciones de filtro que involucran convolución, que son estándar.
prueba de comparación
A continuación, haga una prueba de rendimiento para estas diferentes funciones de convolución. Utilice una plantilla de convolución de 5 × 5 para realizar cálculos de convolución en una matriz de 1000 × 1000. Echemos un vistazo a la velocidad de convolución en diferentes implementaciones.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
En comparación, ndimage
la convolución es obviamente más eficiente.
接下来测试一下一维卷积的表现
1 2 3 4 5 6 7 8 9 10 11 |
|
相比之下,convolve1d
不愧是写明了1d
的卷积函数,速度最快,而numpy
中提供的函数速度最慢。