Python 如何旋转三维阵列?

Python 如何旋转三维阵列?,python,image-processing,Python,Image Processing,目前,如果我想比较狗的每个爪子下的压力,我只比较每个脚趾下的压力。但是我想试着比较一下整个爪子下面的压力 但要做到这一点,我必须旋转它们,使脚趾重叠(更好)。因为在大多数情况下,左右爪子都会稍微向外旋转,所以如果你不能简单地将一个爪子放在另一个爪子上的话。因此,我想旋转爪子,使它们以相同的方式对齐 目前,我通过查找两个中间脚趾和后面的脚趾来计算旋转角度,然后计算黄线(脚趾绿色和红色之间的轴)和绿线(中性轴)之间的角度 现在我想旋转阵列,阵列将围绕后脚趾旋转,以便黄绿线对齐。但是我该怎么做呢?

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

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

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

现在我想旋转阵列,阵列将围绕后脚趾旋转,以便黄绿线对齐。但是我该怎么做呢?

请注意,虽然此图像仅为2D(仅为每个传感器的最大值),但我希望在3D阵列(平均10x10x50)上计算此值。我角度计算的另一个缺点是,它对脚趾检测非常敏感,所以如果有人有一个数学上更正确的建议来计算这个,我洗耳恭听

,他们使用了局部几何惯性轴方法,这至少是非常可靠的。但这仍然不能帮助我解释如何旋转阵列


如果有人觉得有必要进行实验,这里有一个文件。对clarfiy来说: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”的示例),表示提取的影响。

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

如果您需要以某种方式比较区域(因此,这就是您需要对齐区域的原因),那么可以尝试特征提取和对齐。但如果压力分布图不相似(比如有人没有对一只脚进行太多等待),这似乎会失败

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

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

为此,您只需计算不同平移和旋转的两个不同图像之间的相关性。

使用,您可以旋转阵列,例如:

array(Image.fromarray(<data>).rotate(<angle>, resample=Image.BICUBIC))
array(Image.fromarray()。旋转(建议:

  • 将阵列放置在更大的阵列中,以修复较暗的背景
  • 看看重采样,也许可以先缩放阵列
  • 将后脚趾移向中间可以让你绕着它旋转
  • 通过找到边界并再次将其定位在15x15中,可以确定较小的图像


我喜欢你关于尝试关联图像以使它们对齐的建议,但这并不能解释我如何旋转图像。此外,如果你看一看,你会发现我需要旋转爪子以使其正确标准化。因为目前人群中的巨大差异使得对爪子进行排序很困难这与训练集中的旋转方式不同。你的爪子是“图像”。你像其他图像一样旋转它们。如果你的图像由f(x,y)给出,那么你的旋转图像是f(xcos(t)-ysin(t),ycos(t)+xsin(t))。此方法的唯一问题是,由于存在别名,它在离散函数上无法正常工作。我相信您可以找到一些代码或库来旋转图像(2D数组)。这是很常见的。如果你想围绕一个点旋转,首先要平移图像,旋转,然后再平移回来。我真的不确定你是从中得到一个3D阵列。我所看到的只是密度图,它被认为与压力图相对应。数学上是一个函数P(x,y)这是一个2D函数。如果你真的需要旋转3D数组,那么你可以旋转3个角度。基本上是函数P(x,y,z)。你可以从任何游戏编程站点找到矩阵变换。在这种情况下,你必须转换每个点。基本上,矩阵中的点(x,y,z)变成(x',y',z')和(x',y',z'))来自矩阵旋转我只是展示了3D阵列的一个切片,因为它显示了数据的样子。但是通常爪子与地面接触大约50帧,所以我会有一个13,10,50形状的阵列,我想比较压力分布随时间的变化。因此,我会以相同的方式旋转每个帧。虽然你可能知道要使用什么样的库,但这并不意味着我知道,我只是一个试图解决问题的人体运动科学家:-)但我感谢你的输入!我认为你的解决方案几乎是正确的。除了将后脚趾移到中心之外,所需要的就是画黄线(角度)同样基于后脚趾。因此,在给出的示例中,图像应该向左旋转(逆时针)。使工作空间变大并重新旋转将产生Ivo想要的结果,据我所知,这是一个后脚趾指向南方的爪子特征特写。
for x in range(<amount of layers>):
    layer = <array>[i]
    <array>[i] = (Image.fromarray(layer).rotate(<angle>, resample=Image.BICUBIC))