如何旋转3D阵列?
问题内容:
目前,如果我想比较一只狗的每个脚爪下的压力,我只比较每个脚趾下的压力。但是我想尝试比较整个爪子下面的压力。
但是要这样做,我必须旋转它们,使脚趾重叠(更好)。由于大多数情况下,左右脚爪在外部略微旋转,因此,如果您不能简单地将一只脚放在另一只脚上。因此,我想旋转爪子,以便它们都以相同的方式对齐。
目前,我通过使用脚趾检测查找两个中间脚趾和后脚趾来计算旋转角度,然后计算黄线(脚趾绿色和红色之间的轴)和绿线(中性轴)之间的角度。
现在,我要旋转阵列,它将绕后脚趾旋转,以使黄线和绿线对齐。 但是我该怎么做呢?
请注意,尽管此图像只是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”的示例),代表提取的影响。
问题答案:
使用Python Imaging
Library
,您可以旋转数组,例如:
array(Image.fromarray(<data>).rotate(<angle>, resample=Image.BICUBIC))
从那里,您可以在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))
@IvoFlipse的结果,并建议进行对话:
- 将阵列放在更大的阵列中以补救较暗的背景。
- 调查重采样,也许首先缩放阵列。
- 将后脚趾向中间移动,可以让您绕其旋转。
- 通过找到边界并将其再次放置在15x15中,可以确定较小的图像。