如何旋转3D阵列?

Ivo*_*pse 10 python image-processing

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

但要做到这一点,我必须旋转它们,所以脚趾重叠(更好).因为大多数时候左右爪子都在外面略微旋转,所以如果你不能简单地将一个爪子放在另一个上面.因此,我想旋转爪子,所以它们都以相同的方式对齐.

替代文字

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

现在我想旋转阵列将围绕后脚趾旋转,使黄色和绿色线对齐.但是我该怎么做?

请注意,虽然这个图像只是2D(只有每个传感器的最大值),但我想在3D阵列上计算(平均10x10x50).我的角度计算的另一个缺点是它对脚趾检测非常敏感,所以如果有人在数学上有更正确的计算方法,那我就是耳朵.

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

替代文字

如果有人觉得需要进行实验,这里有一个包含所有切片阵列的文件,其中包含每个爪子的压力数据.为了澄清: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'),表示提取的影响.

Tam*_*man 2

使用Python 成像库,您可以旋转数组,例如:

array(Image.fromarray(<data>).rotate(<angle>, resample=Image.BICUBIC))
Run Code Online (Sandbox Code Playgroud)

从那里,您可以在 3D 数组的不同层上创建一个 for 循环。

如果您将第一个维度作为图层,那么array[<layer>]将返回一个 2D 图层,因此:

for x in range(<amount of layers>):
    layer = <array>[i]
    <array>[i] = (Image.fromarray(layer).rotate(<angle>, resample=Image.BICUBIC))
Run Code Online (Sandbox Code Playgroud)

结果由 @IvoFlipse 提供,对话建议:

  • 将阵列放入更大的阵列中以弥补较暗的背景。
  • 研究重新采样,也许首先缩放数组。
  • 将后脚趾向中间移动可以让您围绕它旋转。
  • 可以通过找到边界并将它们再次定位在 15x15 中来确定较小的图像。

替代文本

替代文本

  • 我认为你的解决方案几乎是正确的。除了将后脚趾移至中心之外,所需要做的就是使黄线(角度)也基于后脚趾。因此,在给出的示例中,图像应向左旋转(逆时针)。扩大工作空间并重新修剪将产生 Ivo 想要的结果,据我了解,这是后脚趾指向南方的爪子特征的特写。 (2认同)