我怎样才能旋转3D阵列?
目前,如果我想比较一只狗的每只爪子的压力,我只比较每只脚趾下面的压力。 但我想尝试比较整个爪子下面的压力。
但要做到这一点,我必须旋转它们,所以脚趾重叠(更好)。 因为大多数时候左右爪都是从外部轻微旋转的,所以如果你不能简单地将其中一个放在另一个之上。 因此,我想旋转爪子,所以它们都以同样的方式对齐。
目前,我通过使用脚趾检测来查看两个中间脚趾和后方脚趾来计算旋转角度,然后计算黄色线(脚趾绿色和红色之间的轴线)和绿色线(中性轴)之间的角度, 。
现在我想旋转阵列将围绕后趾旋转,使黄色和绿色线条对齐。 但我该怎么做?
请注意,虽然此图像只是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'),它们表示已提取的影响。
使用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的结果显示:
你为什么要那样做? 为什么不简单整合整个地区并进行比较? 在这种情况下,你会得到一个大小的力量,你可以简单地比较标量,这会容易得多。
如果您需要以某种方式比较区域(因此这就是为什么您需要对齐它们),那么可能尝试提取特征并对齐。 但是,如果压力图不相似(比如有人没有在一只脚上等待),这似乎会失败。
我想你可以变得非常复杂,但这听起来像是简单地计算力量是你想要的?
顺便说一句,如果图像相似,则可以使用简单的相关性测试来找出最佳角度和平移。
要做到这一点,您只需计算两种不同图像之间的各种平移和旋转之间的相关性。
链接地址: http://www.djcxy.com/p/26799.html上一篇: How can I rotate a 3D array?
下一篇: How to sort my paws?