Ich helfe einer Tierklinik, den Druck unter einer Hundepfote zu messen. Ich benutze Python für meine Datenanalyse und versuche jetzt nicht mehr, die Pfoten in (anatomische) Unterregionen zu unterteilen.
Ich habe aus jeder Pfote ein 2D-Array erstellt, das aus den Maximalwerten für jeden Sensor besteht, der im Laufe der Zeit von der Pfote geladen wurde. Hier ist ein Beispiel für eine Pfote, bei der ich Excel verwendet habe, um die Bereiche zu zeichnen, die ich "erkennen" möchte. Dies sind 2 mal 2 Kästchen um den Sensor mit lokalen Maxima, die zusammen die größte Summe haben.
Also habe ich ein bisschen experimentiert und mich entschlossen, einfach nach den Maxima jeder Spalte und Zeile zu suchen (kann aufgrund der Form der Pfote nicht in eine Richtung schauen). Dies scheint die Position der einzelnen Zehen ziemlich gut zu "erkennen", markiert aber auch benachbarte Sensoren.
Was wäre der beste Weg, um Python zu sagen, welche dieser Maxima ich möchte?
Hinweis: Die 2x2 Quadrate können sich nicht überlappen, da es sich um separate Zehen handeln muss!
Ich habe auch 2x2 als Annehmlichkeit genommen, jede fortgeschrittenere Lösung ist willkommen, aber ich bin einfach ein Wissenschaftler für menschliche Bewegung, also bin ich weder ein richtiger Programmierer noch ein Mathematiker, also halte es bitte 'einfach'.
Hier ist eine Version, die mit geladen werden kannnp.loadtxt
Ergebnisse
Also habe ich die Lösung von @ jextee ausprobiert (siehe die Ergebnisse unten). Wie Sie sehen können, funktioniert es sehr gut an den Vorderpfoten, aber weniger gut an den Hinterbeinen.
Insbesondere kann es den kleinen Gipfel, der der vierte Zeh ist, nicht erkennen. Dies hängt offensichtlich damit zusammen, dass die Schleife von oben nach unten zum niedrigsten Wert schaut, ohne zu berücksichtigen, wo sich dieser befindet.
Würde jemand wissen, wie man den Algorithmus von @ jextee optimiert, damit er möglicherweise auch den 4. Zeh findet?
Da ich noch keine anderen Versuche bearbeitet habe, kann ich keine weiteren Proben liefern. Aber die Daten, die ich zuvor gegeben habe, waren die Durchschnittswerte jeder Pfote. Diese Datei ist ein Array mit den maximalen Daten von 9 Pfoten in der Reihenfolge, in der sie mit der Platte in Kontakt gekommen sind.
Dieses Bild zeigt, wie sie räumlich über die Platte verteilt waren.
Aktualisieren:
Ich habe ein Blog für alle Interessierten eingerichtet und ein SkyDrive mit allen Rohmessungen eingerichtet. Also an alle, die mehr Daten anfordern: mehr Leistung für Sie!
Neues Update:
Nach der Hilfe bekam ich meine Fragen zur Pfotenerkennung und zum Sortieren der Pfoten , konnte ich endlich die Zehenerkennung für jede Pfote überprüfen! Es stellt sich heraus, dass es nur bei Pfoten funktioniert, die so groß sind wie in meinem Beispiel. Natürlich im Nachhinein ist es meine eigene Schuld, dass ich den 2x2 so willkürlich gewählt habe.
Hier ist ein schönes Beispiel dafür, wo es schief geht: Ein Nagel wird als Zeh erkannt und die 'Ferse' ist so breit, dass sie zweimal erkannt wird!
Die Pfote ist zu groß, sodass bei einer Größe von 2 x 2 ohne Überlappung einige Zehen zweimal erkannt werden. Umgekehrt findet man bei kleinen Hunden oft keinen fünften Zeh, was vermutlich darauf zurückzuführen ist, dass der 2x2-Bereich zu groß ist.
Nachdem ich die aktuelle Lösung für alle meine Messungen ausprobiert habe ich kam ich zu dem erstaunlichen Schluss, dass für fast alle meine kleinen Hunde kein fünfter Zeh gefunden wurde und dass in über 50% der Auswirkungen für die großen Hunde mehr gefunden werden würde!
Also klar, ich muss es ändern. Meine eigene Vermutung war, die Größe des neighborhood
zu etwas kleiner für kleine Hunde und größer für große Hunde zu ändern . Aber generate_binary_structure
ich würde nicht die Größe des Arrays ändern lassen.
Daher hoffe ich, dass jemand anderes einen besseren Vorschlag zum Lokalisieren der Zehen hat, vielleicht mit der Zehenbereichsskala mit der Pfotengröße?