J'aide une clinique vétérinaire à mesurer la pression sous la patte d'un chien. J'utilise Python pour l'analyse de mes données et maintenant je suis coincé à essayer de diviser les pattes en sous-régions (anatomiques).
J'ai fait un tableau 2D de chaque patte, qui se compose des valeurs maximales pour chaque capteur qui a été chargé par la patte au fil du temps. Voici un exemple d'une patte, où j'ai utilisé Excel pour dessiner les zones que je veux «détecter». Ce sont des cases 2 par 2 autour du capteur avec des maxima locaux, qui ont ensemble la plus grande somme.
J'ai donc essayé quelques expériences et j'ai décidé de simplement chercher les maximums de chaque colonne et ligne (je ne peux pas regarder dans une direction à cause de la forme de la patte). Cela semble assez bien «détecter» l'emplacement des orteils séparés, mais cela marque également les capteurs voisins.
Alors, quelle serait la meilleure façon de dire à Python quels sont ces maximums que je veux?
Remarque: Les carrés 2x2 ne peuvent pas se chevaucher, car ils doivent être des orteils séparés!
J'ai également pris 2x2 pour plus de commodité, toute solution plus avancée est la bienvenue, mais je suis simplement un scientifique du mouvement humain, donc je ne suis ni un vrai programmeur ni un mathématicien, alors s'il vous plaît restez simple.
Voici une version qui peut être chargée avecnp.loadtxt
Résultats
J'ai donc essayé la solution de @ jextee (voir les résultats ci-dessous). Comme vous pouvez le voir, cela fonctionne très bien sur les pattes avant, mais cela fonctionne moins bien pour les pattes arrière.
Plus précisément, il ne peut pas reconnaître le petit pic qui est le quatrième orteil. Ceci est évidemment inhérent au fait que la boucle regarde de haut en bas vers la valeur la plus basse, sans tenir compte de son emplacement.
Quelqu'un sait-il comment modifier l'algorithme de @ jextee, afin qu'il puisse également trouver le 4e orteil?
Comme je n'ai pas encore traité d'autres essais, je ne peux pas fournir d'autres échantillons. Mais les données que j'ai données auparavant étaient les moyennes de chaque patte. Ce fichier est un tableau avec les données maximales de 9 pattes dans l'ordre où elles ont pris contact avec la plaque.
Cette image montre comment ils ont été répartis dans l'espace sur la plaque.
Mise à jour:
J'ai créé un blog pour toute personne intéressée et j'ai configuré un SkyDrive avec toutes les mesures brutes. Donc à tous ceux qui demandent plus de données: plus de pouvoir pour vous!
Nouvelle mise à jour:
Donc, après l'aide que j'ai reçue avec mes questions concernant la détection et le tri des pattes , j'ai finalement pu vérifier la détection des orteils pour chaque patte! Il s'avère que cela ne fonctionne pas si bien que les pattes de la taille de celle de mon propre exemple. Bien sûr, avec le recul, c'est ma faute si j'ai choisi arbitrairement le 2x2.
Voici un bel exemple de problème: un ongle est reconnu comme un orteil et le «talon» est si large qu'il est reconnu deux fois!
La patte est trop grande, donc en prenant une taille 2x2 sans chevauchement, certains orteils sont détectés deux fois. Dans l'autre sens, chez les petits chiens, il ne parvient souvent pas à trouver un 5e orteil, ce qui, je le soupçonne, est dû à une zone 2x2 trop grande.
Après avoir essayé la solution actuelle sur toutes mes mesures, je suis arrivé à la conclusion stupéfiante que pour presque tous mes petits chiens, il n'a pas trouvé de 5e orteil et que dans plus de 50% des impacts pour les grands chiens, il en trouverait plus!
Donc, clairement, je dois le changer. Ma propre supposition changeait la taille de la neighborhood
pour quelque chose de plus petit pour les petits chiens et plus grand pour les gros chiens. Mais generate_binary_structure
ne me laisse pas changer la taille du tableau.
Par conséquent, j'espère que quelqu'un d'autre aura une meilleure suggestion pour localiser les orteils, peut-être avoir l'échelle de la zone des orteils avec la taille de la patte?