Wie kann ich ein 3D-Array drehen?

8

Wenn ich jetzt den Druck unter jeder Pfote eines Hundes vergleichen will, vergleiche ich nur den Druck unter jeder der Zehen. Aber ich möchte versuchen, den Druck unter der ganzen Pfote zu vergleichen.

Aber dazu muss ich sie drehen, damit sich die Zehen überlappen (besser). Da die linke und die rechte Pfote meistens leicht nach außen gedreht sind, kann man nicht einfach übereinander stehen. Daher möchte ich die Pfoten drehen, so dass sie alle auf die gleiche Weise ausgerichtet sind.

Momentan berechne ich den Rotationswinkel, indem ich die beiden mittleren Zehen nach oben schaue und die hintere mit der Zehenerkennung > Dann berechne ich den Winkel zwischen der gelben Linie (Achse zwischen Zeh grün und rot) und der grünen Linie (neutrale Achse).

Nun möchte ich das Array drehen, das sich um den hinteren Zeh drehen würde, so dass die gelben und grünen Linien ausgerichtet sind. Aber wie mache ich das?

Beachten Sie, dass, während dieses Bild nur 2D ist (nur die maximalen Werte jedes Sensors), ich dies auf einem 3D-Array (durchschnittlich 10x10x50) berechnen möchte. Auch ein Nachteil meiner Winkelberechnung ist, dass sie sehr empfindlich auf die Zehenerkennung reagiert. Wenn also jemand einen mathematisch korrekten Vorschlag hat, dies zu berechnen, bin ich ganz Ohr.

Ich habe eine Studie mit Druckmessungen am Menschen gesehen , wo sie die lokale geometrische Trägheitsachsenmethode verwendet haben, die es zumindest war sehr zuverlässig. Aber das hilft mir immer noch nicht zu erklären, wie man das Array dreht!

Wenn jemand das Gefühl hat zu experimentieren, hier ist eine Datei mit all den geschnittenen Arrays, die die Druckdaten jeder Pfote enthalten . Zur Klarstellung: walk_sliced_data ist ein Wörterbuch, das ['ser_3', 'ser_2', 'sel_1', 'sel_2', 'ser_1', 'sel_3'] enthält. Dies sind die Namen der Messungen. Jede Messung enthält ein weiteres Wörterbuch, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] (Beispiel aus 'sel_1'), die die Auswirkungen darstellen, die extrahiert wurden.

    
Ivo Flipse 22.01.2011, 00:37
quelle

2 Antworten

2

Mit der Python Imaging-Bibliothek können Sie ein Array drehen, zum Beispiel:

%Vor%

Von dort können Sie einfach eine for-Schleife über die verschiedenen Ebenen Ihres 3D-Arrays erstellen.

Wenn Sie Ihre erste Dimension als Ebenen haben, würde array[<layer>] eine 2D-Ebene zurückgeben, also:

%Vor%

Ergebnisse von @IvoFlipse, mit einer Konversation , die Folgendes vorschlägt:

  • Setzen Sie das Array in ein größeres Array, um den dunkleren Hintergrund zu beheben.
  • Schauen Sie sich das Resampling an, skalieren Sie das Array möglicherweise zuerst.
  • Wenn Sie den hinteren Zeh in die Mitte bewegen, können Sie stattdessen um diesen drehen.
  • Ein kleineres Bild kann durch Auffinden der Ränder und erneutes Positionieren in 15x15 bestimmt werden.

    
Tom Wijsman 22.01.2011, 11:26
quelle
3

Warum würdest du es so machen? Warum nicht einfach die ganze Region integrieren und vergleichen? In diesem Fall erhältst du eine Stärke der Kraft und du kannst einfach Skalare vergleichen, was viel einfacher wäre.

Wenn Sie Regionen irgendwie vergleichen müssen (und deshalb müssen Sie sie ausrichten), dann versuchen Sie vielleicht, eine Funktion zu extrahieren und auszurichten. Aber das scheint zu scheitern, wenn die Druckkarten nicht ähnlich sind (sagen, dass jemand nicht viel auf einen Fuß wartet).

Ich nehme an, Sie können sehr komplex werden, aber es klingt, als würde man einfach die Kraft berechnen, was Sie wollen?

BTW, Sie können einen einfachen Korrelationstest verwenden, um den optimalen Winkel und die optimale Translation zu finden, wenn die Bilder ähnlich sind.

Dazu berechnen Sie einfach die Korrelation zwischen den zwei verschiedenen Bildern für verschiedene Übersetzungen und Rotationen.

    
AbstractDissonance 22.01.2011 00:55
quelle

Tags und Links