1002 Stimmen

Spitzenwert-Erkennung in einem 2D-Array

Ich helfe einer Tierklinik bei der Messung des Drucks unter einer Hundepfote. Ich verwende Python für meine Datenanalyse und stecke nun fest, weil ich versuche, die Pfoten in (anatomische) Unterregionen zu unterteilen.

Ich habe für jede Pfote ein 2D-Array erstellt, das aus den Maximalwerten für jeden Sensor besteht, der im Laufe der Zeit von der Pfote belastet wurde. Hier ist ein Beispiel für eine Pfote, bei der ich mit Excel die Bereiche gezeichnet habe, die ich "erkennen" möchte. Es handelt sich um 2 x 2 Kästchen um den Sensor mit lokalen Maxima, die zusammen die größte Summe ergeben.

alt text

Also habe ich ein wenig experimentiert und beschlossen, einfach nach den Maxima der einzelnen Spalten und Zeilen zu suchen (wegen der Form der Pfote kann man nicht nur in eine Richtung schauen). Dies scheint die Lage der einzelnen Zehen recht gut zu "erkennen", aber es markiert auch benachbarte Sensoren.

alt text

Wie kann ich Python also am besten mitteilen, welche dieser Maximalwerte die gewünschten sind?

Hinweis: Die 2x2 Quadrate dürfen sich nicht überlappen, da sie separate Zehen sein müssen!

Ich habe auch 2x2 als Bequemlichkeit genommen, jede fortgeschrittenere Lösung ist willkommen, aber ich bin einfach ein Bewegungswissenschaftler, also weder ein echter Programmierer noch ein Mathematiker, also bitte halten Sie es "einfach".

Hier ist ein Version, die geladen werden kann mit np.loadtxt


Ergebnisse

Also habe ich die Lösung von @jextee ausprobiert (siehe die Ergebnisse unten). Wie ihr sehen könnt, funktioniert es sehr gut bei den Vorderpfoten, aber weniger gut bei den Hinterbeinen.

Genauer gesagt, kann es die kleine Spitze, die die vierte Zehe darstellt, nicht erkennen. Dies ist offensichtlich darauf zurückzuführen, dass die Schleife von oben nach unten auf den niedrigsten Wert schaut, ohne zu berücksichtigen, wo dieser liegt.

Weiß jemand, wie man den Algorithmus von @jextee so verändern kann, dass er auch die 4. Zehe findet?

alt text

Da ich noch keine anderen Studien bearbeitet habe, kann ich keine weiteren Proben zur Verfügung stellen. Aber die Daten, die ich zuvor angegeben habe, waren die Durchschnittswerte für jede Pfote. Diese Datei ist ein Array mit den maximalen Daten von 9 Pfoten in der Reihenfolge, in der sie mit der Platte in Kontakt kamen.

Dieses Bild zeigt, wie sie sich räumlich über die Platte verteilt haben.

alt text

更新しました。

Ich habe einen Blog für alle Interessierten eingerichtet y Ich habe ein OneDrive mit allen Rohmessungen eingerichtet. An alle, die mehr Daten anfordern: mehr Macht für Sie!


Neues Update:

Nach der Hilfe, die ich bei meinen Fragen zu Pfotenerkennung y Pfote sortieren konnte ich endlich die Zehenerkennung für jede Pfote überprüfen! Es hat sich herausgestellt, dass es nicht so gut funktioniert, wenn die Pfoten nicht so groß sind wie die in meinem Beispiel. Im Nachhinein ist es natürlich meine eigene Schuld, dass ich das 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!

alt text

Die Pfote ist zu groß, so dass bei einer Größe von 2x2 ohne Überlappung einige Zehen doppelt erfasst werden. Umgekehrt wird bei kleinen Hunden oft die 5. Zehe nicht gefunden, was vermutlich daran liegt, dass der 2x2-Bereich zu groß ist.

Nach Ausprobieren der aktuellen Lösung bei allen meinen Messungen Ich kam zu dem verblüffenden Schluss, dass bei fast allen meinen kleinen Hunden keine 5. Zehe gefunden wurde und dass bei den großen Hunden in über 50% der Fälle mehr gefunden wurde!

Ich muss es also eindeutig ändern. Meine eigene Vermutung war, dass ich die Größe der neighborhood auf etwas Kleineres für kleine Hunde und etwas Größeres für große Hunde. Aber generate_binary_structure ließ mich die Größe des Arrays nicht ändern.

Daher hoffe ich, dass jemand einen besseren Vorschlag für die Positionierung der Zehen hat, vielleicht mit der Skalierung des Zehenbereichs mit der Pfotengröße?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X