首页 文章

如何旋转3D阵列?

提问于
浏览
8

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

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

alt text

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

Now I want to rotate the array would rotate around the rear toe, such that the yellow and green lines are aligned. But how do I do this?

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

I have seen one study with pressure measurements on humans,他们使用局部几何惯性轴方法,至少非常可靠 . 但这仍然无法解释如何旋转阵列!

alt text

如果有人觉得需要进行实验,这里的文件是all the sliced arrays that contain the pressure data of each paw . 为了澄清: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'),它们代表所提取的影响 .

2 回答

  • 2

    使用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的结果,a conversation建议:

    • 将数组放在一个更大的数组中以修复较暗的背景 .

    • 查看重新采样,可能首先缩放数组 .

    • 将后脚趾向中间移动可让您围绕它转动 .

    • 可以通过查找边框并再次将它们放置在15x15中来确定较小的图像 .

    alt text

    alt text

  • 3

    你为什么这样做?为什么不简单地整合整个地区并进行比较?在这种情况下,您将获得力量的大小,您可以简单地比较更容易的标量 .

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

    我想你可以变得非常复杂,但听起来只是计算力量就是你想要的?

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

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

相关问题