如何旋转三维数据数组?

37 阅读3分钟

目前,在想要比较一只狗脚掌下压力的时候,仅仅比较了脚掌下每个脚趾的压力。但是,想要尝试比较整个脚掌下的压力。 但为了实现比较,必须进行旋转操作,使脚趾重叠(效果较好)。因为大多数情况下,左右脚掌都会略微向外旋转,因此如果不能简单地投影在一个脚掌上,则可以旋转脚掌,使其全部以相同的方式对齐。

目前,通过使用脚趾探测对两个中间脚趾和后脚趾进行查看,来计算旋转角度,然后计算黄线(绿色和红色脚趾之间的轴线)和绿线(中性轴)之间的角度。 目前想要旋转数组将在后脚趾周围旋转,使得黄线和绿线对齐。但是,该如何操作? 请注意,虽然此图像只是二维的(仅每个传感器的最大值),但是想要在三维数组(平均为 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' 中的示例),代表提取的冲击。

解决方案

  1. 直接计算力的大小

为什么以这种方式进行操作?为什么不简单地对整个区域进行积分并进行比较?在这种情况下,可以得到力的幅值,并且可以简单地比较标量,这会容易得多。 如果需要以某种方式比较区域(因此,这就是需要对其进行对齐的原因),那么可以尝试进行特征提取和对齐。但是,如果压力图不相似(例如有人未对一只脚施加太多重量),则此操作似乎会失败。 假设可以变得非常复杂,但听起来,您想要的是简单地计算力的大小? 顺便说一下,可以使用简单的相关性检验来查找图像相似的最佳角度和平移。 为此,只需计算两个不同图像在各种平移和旋转情况下的相关性即可。

  1. 使用 Python Imaging Library 进行数组旋转

可以使用 Python Imaging Library 通过以下方式旋转数组: array(Image.fromarray().rotate(, resample=Image.BICUBIC))

在该函数中,可以对三维数组的不同层进行循环操作。 如果将第一个维度作为层,则 array[] 将返回一个二维层,因此: for x in range(): layer = [i] [i] = (Image.fromarray(layer).rotate(, resample=Image.BICUBIC))

尝试的解决方案:

  • 将数组放入更大的数组中以补救较暗的背景。
  • 研究重采样,可能首先调整数组的比例。
  • 将后脚趾移向中间,以便绕后脚趾进行旋转。
  • 可以通过查找边界并将边界定位在 15x15 中来确定较小的图像。