¿Alguien sabe de un reemplazo de Python para la función de Matlab/Octave bwdist()? Esta función devuelve la distancia euclidiana de cada celda a la celda no nula más cercana para una matriz dada. Vi una implementación de Octave C, una implementación pura de Matlab, y me preguntaba si alguien tenía que implementar esto en ANSI C (que no incluye ningún encabezado de Matlab/Octave, así que puedo integrar Python fácilmente) o en Python puro.Matlab/Octave bwdist() en Python o C
Ambos enlaces que he mencionado son a continuación:
Como prueba, un Matlab/salida de código se ve algo como esto:
bw= [0 1 0 0 0;
1 0 0 0 0;
0 0 0 0 1;
0 0 0 0 0;
0 0 1 0 0]
D = bwdist(bw)
D =
1.00000 0.00000 1.00000 2.00000 2.00000
0.00000 1.00000 1.41421 1.41421 1.00000
1.00000 1.41421 2.00000 1.00000 0.00000
2.00000 1.41421 1.00000 1.41421 1.00000
2.00000 1.00000 0.00000 1.00000 2.00000
Probé un recomendé La llamada distance_transform_edt en Python, que dio este resultado:
numpyimportación como np de ndimage importación scipy
a = np.array(([0,1,0,0,0],
[1,0,0,0,0],
[0,0,0,0,1],
[0,0,0,0,0],
[0,0,1,0,0]))
res = ndimage.distance_transform_edt(a)
print res
[[ 0. 1. 0. 0. 0.]
[ 1. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 1.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 1. 0. 0.]]
no parece coincidir con este resultado a la salida Octave/Matlab.
por comentario de @ jetxee, he cambiado el código y esta llamada funciona – user423805