我正在帮助一家兽医诊所测量狗爪下的压力.我使用Python进行数据分析,现在我不得不试图将爪子分成(解剖学)子区域.
我制作了每个爪子的2D阵列,它由爪子随时间加载的每个传感器的最大值组成.这是一个爪子的例子,我用Excel绘制了我想要"检测"的区域.这些是传感器周围的2×2个盒子,具有局部最大值,它们一起具有最大的总和.
所以我尝试了一些实验并决定只查找每列和每行的最大值(由于爪子的形状,不能在一个方向上查看).这似乎可以很好地"检测"单独脚趾的位置,但它也标记了相邻的传感器.
那么告诉Python哪些最大值是我想要的最好的方法是什么?
注意:2x2正方形不能重叠,因为它们必须是单独的脚趾!
我也采用2x2作为方便,欢迎任何更高级的解决方案,但我只是一个人类运动科学家,所以我既不是真正的程序员也不是数学家,所以请保持"简单".
这是一个可以加载的版本np.loadtxt
所以我尝试了@jextee的解决方案(见下面的结果).正如你所看到的,它在前爪上很有效,但后腿的效果不太好.
更具体地说,它无法识别出第四个脚趾的小峰值.这显然是循环看起来自上而下朝向最低值的事实所固有的,而不考虑这是什么.
有谁知道如何调整@jextee的算法,以便它也可以找到第4个脚趾?
由于我还没有处理任何其他试验,我不能提供任何其他样品.但我之前提供的数据是每只爪子的平均值.该文件是一个数组,其最大数据为9个爪子,它们与盘子接触的顺序.
该图像显示了它们如何在空间上展开.
我已经为任何感兴趣的人建立了一个博客,我已经设置了一个包含所有原始测量值的SkyDrive.所以对于要求更多数据的人来说:给你更大的力量!
所以在我得到关于爪子检测和爪子分类的问题的帮助后,我终于能够检查每个爪子的脚趾检测!事实证明,除了像我自己的例子中那样大小的爪子之外,它在任何东西上都不能很好地工作.事后看来,任意选择2x2是我自己的错.
这是一个错误的例子:钉子被识别为脚趾,"脚跟"如此宽,它被识别两次!
爪子太大,因此在没有重叠的情况下采用2x2尺寸会导致一些脚趾被检测到两次.相反,在小型犬中,它经常无法找到第五个脚趾,我怀疑它是由2x2区域太大引起的.
在对我的所有测量结果进行了当前的解决方案之后,我得出了令人吃惊的结论:几乎所有的小型犬都没有找到第5个脚趾,并且对于大型犬的50%以上的影响它会发现更多!
显然我需要改变它.我自己的猜测是将neighborhood
小型狗的体型改为小型犬,大型犬则更大.但是generate_binary_structure
不会让我改变数组的大小.
因此,我希望其他人有更好的建议来定位脚趾,也许脚趾区域尺寸与爪子尺寸一致?
在我之前关于在每个爪子中发现脚趾的问题之后,我开始加载其他测量值以查看它将如何保持.不幸的是,我很快就遇到了上述步骤之一的问题:识别爪子.
你看,我的概念证明基本上是随着时间推移每个传感器的最大压力,并开始寻找每一行的总和,直到它找到!= 0.0.然后它对列进行相同的操作,一旦找到超过2行,再次为零.它将最小和最大行和列值存储到某个索引.
正如您在图中所看到的,这在大多数情况下都能很好地工作.但是,这种方法有许多缺点(除了非常原始):
人类可以拥有"空心脚",这意味着足迹内部有几排空行.因为我担心这种情况也会发生在(大)狗身上,所以在切断爪子之前,我等待至少2或3个空行.
如果在到达多个空行之前在另一列中创建另一个联系,则会产生问题,从而扩展该区域.我想我可以比较列,看看它们是否超过某个值,它们必须是单独的爪子.
当狗很小或走得更快时,问题会变得更糟.发生的事情是,前爪的脚趾仍在接触,而后爪的脚趾刚刚开始与前爪在同一区域内接触!
使用我的简单脚本,它将无法拆分这两个,因为它必须确定该区域的哪些帧属于哪个爪子,而目前我只需要查看所有帧的最大值.
它开始出错的例子:
所以现在我正在寻找一种更好的识别和分离爪子的方法(之后我将解决决定它是哪个爪子的问题!).
更新:
我一直在修补Joe的(真棒!)答案,但是我很难从我的文件中提取实际的爪子数据.
当应用于最大压力图像时,coded_paws显示了所有不同的爪子(见上文).但是,解决方案遍历每个帧(以分隔重叠的爪子)并设置四个Rectangle属性,例如坐标或高度/宽度.
我无法弄清楚如何获取这些属性并将它们存储在一些我可以应用于测量数据的变量中.因为我需要知道每个爪子,它在哪个框架中的位置是什么,并将它连接到哪个爪子(前/后,左/右).
那么如何使用Rectangles属性为每个爪子提取这些值呢?
我在我的公共Dropbox文件夹中的问题设置中使用了测量值(示例1,示例2,示例3).对于任何有兴趣的人我也建立了一个博客,让你保持最新:-)
在我之前的问题中,很多用户希望我给玩具提供更多数据.所以我开始导出所有数据并用Python处理它,但后来我意识到:我在哪里留下所有这些数据?
好吧我决定最好将它们放在数据库中,所以至少我不必每次都解析原始文件.但由于我对数据库一无所知,因此结果令人困惑.我尝试了一些教程来创建一个sqlite数据库,添加一个表和字段并尝试插入我的numpy.arrays,但它无法让它工作.
通常我的每条狗的结果看起来像这样:
所以我有35只不同的狗,每只狗有24个测量值.每个测量本身都有未知数量的联系人.每个测量由3D阵列(整个板的248帧[255x63])和2D阵列(板的每个传感器的最大值[255x63])组成.在数据库中存储一个值不是问题,但在那里获取我的2D数组似乎不起作用.
所以我的问题是如何在数据库中订购并将数组插入其中?