¿Cómo funciona exactamente el modo de “reflection” para los filtros de imágenes ndimage de scipys?

No logro entender exactamente cómo maneja mis matrices el modo de reflection. Tengo esta matriz muy simple:

import numpy as np from scipy.ndimage.filters import uniform_filter from scipy.ndimage.filters import median_filter vector = np.array([[1.0,1.0,1.0,1.0,1.0],[2.0,2.0,2.0,2.0,2.0],[4.0,4.0,4.0,4.0,4.0],[5.0,5.0,5.0,5.0,5.0]]) print(vector) 

[[1. 1. 1. 1. 1.]] [2. 2. 2. 2. 2.]] [4. 4. 4. 4. 4.]] [5. 5. 5. 5. 5.]]

Aplicando un filtro uniforme (medio) con un tamaño de ventana de 3 obtengo lo siguiente:

 filtered = uniform_filter(vector, 3, mode='reflect') print(filtered) 

[[1.33333333 1.33333333 1.33333333 1.33333333 1.33333333] [2.33333333 2.33333333 2.33333333 2.33333333 2.33333333] [3.66666667 3.66666667 3.66666667 3.66666667 3.66666667] [4.66666667 4.66666667 4.66666667 4.66666667 4.66666667]]

Si bash replicar el ejercicio a mano, puedo llegar a este resultado. Matriz original en verde, ventana en naranja y resultado en amarillo. Las blancas son observaciones “reflejadas”.

    introduzca la descripción de la imagen aquí

    El resultado es:

    introduzca la descripción de la imagen aquí

    Pero cuando bash un tamaño de ventana de 4 o 5, no puedo replicar los resultados.

     filtered = uniform_filter(vector, 4, mode='reflect') print(filtered) 

    [[1.5 1.5 1.5 1.5 1.5]] [2. 2. 2. 2. 2.]] [3. 3. 3. 3. 3.] [4. 4. 4. 4. 4. 4.]]

    Haciéndolo a mano:

    introduzca la descripción de la imagen aquí

    Y me sale:

    introduzca la descripción de la imagen aquí

    ¿Cómo se maneja la ventana si su tamaño es parejo? Pero de todos modos, si bash replicar los resultados de una ventana de tamaño 5 y modo, tampoco puedo. Aunque creo que el comportamiento es análogo al del tamaño 3.

    Supongamos que los datos en un eje son 1 2 3 4 5 6 7 8 . La siguiente tabla muestra cómo se extienden los datos para cada modo (asumiendo que cval=0 ):

      mode | Ext | Input | Ext -----------+---------+------------------------+--------- 'mirror' | 4 3 2 | 1 2 3 4 5 6 7 8 | 7 6 5 'reflect' | 3 2 1 | 1 2 3 4 5 6 7 8 | 8 7 6 'nearest' | 1 1 1 | 1 2 3 4 5 6 7 8 | 8 8 8 'constant' | 0 0 0 | 1 2 3 4 5 6 7 8 | 0 0 0 'wrap' | 6 7 8 | 1 2 3 4 5 6 7 8 | 1 2 3 

    Para un tamaño de ventana n , considere la ventana de tamaño n+1 , y luego no incluya los bordes inferior y derecho. (La posición de la ventana se puede cambiar utilizando el argumento de origin ).