相关疑难解决方法(0)

2D阵列中的峰值检测

我正在帮助一家兽医诊所测量狗爪下的压力.我使用Python进行数据分析,现在我不得不试图将爪子分成(解剖学)子区域.

我制作了每个爪子的2D阵列,它由爪子随时间加载的每个传感器的最大值组成.这是一个爪子的例子,我用Excel绘制了我想要"检测"的区域.这些是传感器周围的2×2个盒子,具有局部最大值,它们一起具有最大的总和.

替代文字

所以我尝试了一些实验并决定只查找每列和每行的最大值(由于爪子的形状,不能在一个方向上查看).这似乎可以很好地"检测"单独脚趾的位置,但它也标记了相邻的传感器.

替代文字

那么告诉Python哪些最大值是我想要的最好的方法是什么?

注意:2x2正方形不能重叠,因为它们必须是单独的脚趾!

我也采用2x2作为方便,欢迎任何更高级的解决方案,但我只是一个人类运动科学家,所以我既不是真正的程序员也不是数学家,所以请保持"简单".

这是一个可以加载版本np.loadtxt


结果

所以我尝试了@jextee的解决方案(见下面的结果).正如你所看到的,它在前爪上很有效,但后腿的效果不太好.

更具体地说,它无法识别出第四个脚趾的小峰值.这显然是循环看起来自上而下朝向最低值的事实所固有的,而不考虑这是什么.

有谁知道如何调整@jextee的算法,以便它也可以找到第4个脚趾?

替代文字

由于我还没有处理任何其他试验,我不能提供任何其他样品.但我之前提供的数据是每只爪子的平均值.该文件是一个数组,其最大数据为9个爪子,它们与盘子接触的顺序.

该图像显示了它们如何在空间上展开.

替代文字

更新:

我已经为任何感兴趣的人建立了一个博客,我已经设置了一个包含所有原始测量值的SkyDrive.所以对于要求更多数据的人来说:给你更大的力量!


新更新:

所以在我得到关于爪子检测爪子分类的问题的帮助后,我终于能够检查每个爪子的脚趾检测!事实证明,除了像我自己的例子中那样大小的爪子之外,它在任何东西上都不能很好地工作.事后看来,任意选择2x2是我自己的错.

这是一个错误的例子:钉子被识别为脚趾,"脚跟"如此宽,它被识别两次!

替代文字

爪子太大,因此在没有重叠的情况下采用2x2尺寸会导致一些脚趾被检测到两次.相反,在小型犬中,它经常无法找到第五个脚趾,我怀疑它是由2x2区域太大引起的.

对我的所有测量结果进行了当前的解决方案之后,我得出了令人吃惊的结论:几乎所有的小型犬都没有找到第5个脚趾,并且对于大型犬的50%以上的影响它会发现更多!

显然我需要改变它.我自己的猜测是将neighborhood小型狗的体型改为小型犬,大型犬则更大.但是generate_binary_structure不会让我改变数组的大小.

因此,我希望其他人有更好的建议来定位脚趾,也许脚趾区域尺寸与爪子尺寸一致?

python image-processing

843
推荐指数
18
解决办法
9万
查看次数

在1D numpy数组中使用Numpy查找局部最大值/最小值

你能否建议numpy/scipy的模块函数可以在1D numpy数组中找到局部最大值/最小值?显然,最简单的方法是看看最近的邻居,但我希望有一个公认的解决方案,这是numpy发行版的一部分.

python numpy

107
推荐指数
8
解决办法
17万
查看次数

获取numpy数组中最大项的位置

如何才能获得多维numpy数组中最大项的位置?

python arrays indexing numpy

69
推荐指数
2
解决办法
7万
查看次数

查找用户定义函数的局部最大值和最小值

我想要的是

我想找到固定点的列表,它们的值和位置以及它们是最小值还是最大值。

我的功能看起来像:

import numpy as np

def func(x,y):
  return (np.cos(x*10))**2 + (np.sin(y*10))**2
Run Code Online (Sandbox Code Playgroud)

方法

这是我正在考虑使用的方法:

  1. 我实际上已经在Mathematica上做了类似的事情。我一次又一次地区分函数。我看一下一阶导数为0的点,计算它们的值和位置。然后,我在那些位置取二阶导数,并检查它们是最小值还是最大值。

  2. 我还想知道是否仅对x和y中的函数值进行2D数组化,并找到该数组的最大值和最小值。但这需要我知道如何精确地定义x和y网格,以可靠地捕获函数的行为

对于后一种情况下,我已经找到像某些方面这一个

我只是想知道,哪种方法在效率,速度,准确性甚至Python的优雅方面更有意义?

python numpy minimization

5
推荐指数
1
解决办法
1514
查看次数