Estoy ayudando a una clínica veterinaria que mide la presión debajo de una pata de perro. Uso Python para mi análisis de datos y ahora estoy atascado tratando de dividir las patas en subregiones (anatómicas).
Hice una matriz 2D de cada pata, que consta de los valores máximos para cada sensor que la pata ha cargado con el tiempo. Aquí hay un ejemplo de una pata, donde usé Excel para dibujar las áreas que quiero 'detectar'. Estos son cuadros de 2 por 2 alrededor del sensor con máximos locales, que juntos tienen la suma más grande.
Así que intenté experimentar un poco y decidí simplemente buscar los máximos de cada columna y fila (no puedo mirar en una dirección debido a la forma de la pata). Esto parece 'detectar' la ubicación de los dedos separados bastante bien, pero también marca los sensores vecinos.
Entonces, ¿cuál sería la mejor manera de decirle a Python cuáles de estos máximos son los que quiero?
Nota: ¡Los cuadrados de 2x2 no pueden superponerse, ya que tienen que ser dedos separados!
También tomé 2x2 por conveniencia, cualquier solución más avanzada es bienvenida, pero simplemente soy un científico del movimiento humano, así que no soy un verdadero programador o matemático, así que por favor manténgalo 'simple'.
Aquí hay una versión que se puede cargar connp.loadtxt
Resultados
Así que probé la solución de @ jextee (ver los resultados a continuación). Como puede ver, funciona muy bien en las patas delanteras, pero funciona menos bien para las patas traseras.
Más específicamente, no puede reconocer el pequeño pico que es el cuarto dedo del pie. Obviamente, esto es inherente al hecho de que el bucle se ve de arriba abajo hacia el valor más bajo, sin tener en cuenta dónde está.
¿Alguien sabría cómo ajustar el algoritmo de @ jextee, para que también pueda encontrar el cuarto dedo del pie?
Como todavía no he procesado ninguna otra prueba, no puedo suministrar ninguna otra muestra. Pero los datos que di antes eran los promedios de cada pata. Este archivo es una matriz con los datos máximos de 9 patas en el orden en que hicieron contacto con la placa.
Esta imagen muestra cómo se espaciaron espacialmente sobre la placa.
Actualizar:
He configurado un blog para cualquier persona interesada y he configurado un SkyDrive con todas las medidas en bruto. Entonces, para cualquiera que solicite más datos: ¡más poder para usted!
Nueva actualización:
Entonces, después de la ayuda que recibí con mis preguntas sobre la detección y la clasificación de las patas , ¡finalmente pude verificar la detección de cada pata! Resulta que no funciona tan bien en otra cosa que no sean las patas del tamaño de mi propio ejemplo. Por supuesto, en retrospectiva, es mi culpa por elegir el 2x2 de manera tan arbitraria.
Aquí hay un buen ejemplo de dónde sale mal: un clavo se reconoce como un dedo del pie y el 'talón' es tan ancho que se reconoce dos veces.
La pata es demasiado grande, por lo que tomar un tamaño de 2x2 sin superposición hace que se detecten algunos dedos dos veces. A la inversa, en perros pequeños a menudo no puede encontrar un quinto dedo del pie, lo que sospecho es que el área de 2x2 es demasiado grande.
Después de probar la solución actual en todas mis mediciones , llegué a la sorprendente conclusión de que para casi todos mis perros pequeños no encontró un quinto dedo del pie y que en más del 50% de los impactos para los perros grandes ¡encontraría más!
Claramente, necesito cambiarlo. Mi propia suposición fue cambiar el tamaño del neighborhood
a algo más pequeño para perros pequeños y más grande para perros grandes. Pero generate_binary_structure
no me dejaba cambiar el tamaño de la matriz.
Por lo tanto, espero que alguien más tenga una mejor sugerencia para ubicar los dedos de los pies, ¿tal vez tener la escala del área de los dedos con el tamaño de la pata?