关于python:如何旋转3D数组?

How can I rotate a 3D array?

目前,如果我想比较狗每个爪下的压力,我只比较每个脚趾下的压力。但我想试着比较整个爪子下面的压力。

但要做到这一点,我必须旋转它们,以便脚趾重叠(更好)。因为大多数情况下左右爪都是从外部轻微旋转的,所以如果你不能简单地将一个爪放在另一个爪上。因此,我要旋转爪,使它们都以相同的方式对齐。

alt text

目前,我计算旋转角度,通过使用脚趾检测查看两个中间脚趾和后部脚趾,然后计算黄线(脚趾绿色和红色之间的轴)和绿线(中性轴)之间的角度。

现在我想旋转阵列会绕着后脚趾旋转,这样黄色和绿色的线就对齐了。但我该怎么做呢?

请注意,虽然这张图像只是二维的(只有每个传感器的最大值),但我想在三维阵列上计算它(平均为10x10x50)。另外,角度计算的一个缺点是它对脚趾检测非常敏感,所以如果有人有一个更准确的数学计算建议,我会全神贯注的。

我看过一项关于人体压力测量的研究,他们使用了局部几何惯性轴方法,这至少是非常可靠的。但这仍然不能帮助我解释如何旋转阵列!

alt text

如果有人觉得需要实验,这里有一个包含每个爪子压力数据的所有切片阵列的文件。对Clarfy来说:Walk_Sliced_Data是一个字典,它包含了测量的名称['ser_3'、'ser_2'、'sel_1'、'sel_2'、'ser_1'、'sel_3']。每个度量都包含另一个字典,[0,1,2,3,4,5,6,7,8,9,10](示例来自'sel_1'),表示提取的影响。


你为什么要那样做?为什么不简单地整合整个区域并进行比较呢?在这种情况下,你会得到一个力的大小,你可以简单地比较标量,这会容易得多。

如果您需要以某种方式比较区域(这就是为什么您需要对齐它们),那么可以尝试特征提取和对齐。但是,如果压力图不相似(比如有人在一只脚上等待的时间不多),这似乎会失败。

我想你可能会变得非常复杂,但这听起来像是简单地计算力就是你想要的?

顺便说一句,如果图像相似,可以使用简单的相关测试来找到最佳角度和平移。

要做到这一点,您只需计算不同平移和旋转的两个不同图像之间的相关性。


使用python图像库,您可以旋转数组,例如:

1
array(Image.fromarray(<data>).rotate(, resample=Image.BICUBIC))

从那里,你可以在你的3D阵列的不同层上创建一个for循环。

如果您将第一个维度作为层,那么array[]将返回一个二维层,因此:

1
2
3
for x in range():
    layer = [i]
    [i] = (Image.fromarray(layer).rotate(, resample=Image.BICUBIC))

@ivoflifse的结果,对话建议:

  • 将数组放在较大的数组中以修复较暗的背景。
  • 研究重新采样,可能先缩放数组。
  • 将后脚趾移向中间可以让你绕着它旋转。
  • 较小的图像可以通过找到边界并重新定位到15x15中来确定。

alt text

alt text