相关疑难解决方法(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万
查看次数

如何在Python中设计类?

我在以前的问题上有一些非常棒的帮助来检测爪子内的爪子脚趾,但所有这些解决方案一次只能用于一次测量.

现在我有数据包含:

  • 约30只狗;
  • 每个都有24个测量值(分成几个子组);
  • 每次测量至少有4个触点(每个爪子一个)和
    • 每个联系人分为5个部分
    • 有几个参数,如接触时间,位置,总力等.

替代文字

显然将所有内容都放在一个大对象上并不会削减它,所以我认为我需要使用类而不是当前的大量函数.但即使我已经阅读了学习Python关于类的章节,我也无法将其应用于我自己的代码(GitHub链接)

我还觉得每次想要获取一些信息时处理所有数据都很奇怪.一旦我知道每只爪子的位置,我就没有理由再次计算它.此外,我想比较同一只狗的所有爪子,以确定哪个接触属于哪个爪子(前/后,左/右).如果我继续只使用功能,这将变得一团糟.

所以现在我正在寻找关于如何创建类的建议,让我以合理的方式处理我的数据(链接到一条狗的压缩数据).

python oop class-design

142
推荐指数
3
解决办法
7万
查看次数

如何整理我的爪子?

我之前的问题中,我得到了一个很好的答案,帮助我检测到爪子撞到压板的位置,但现在我正在努力将这些结果与相应的爪子联系起来:

替代文字

我手动注释了爪子(RF =右前方,RH =右后方,LF =左前方,LH =左后方).

正如您所看到的那样,显然有一种重复的模式,它几乎在每次测量中都会出现.这是一个手动注释的6个试验的演示链接.

我最初的想法是使用启发式方法进行排序,例如:

  • 前爪和后爪的重量比约为60-40%;
  • 后爪通常表面较小;
  • 爪子(通常)在空间上分为左右两侧.

但是,我对我的启发式方法持怀疑态度,因为一旦遇到我没想过的变化,他们就会对我失败.他们也无法应对可能有自己规则的跛脚犬的测量结果.

此外,Joe提出的注释有时会搞砸,并没有考虑到爪子的实际外观.

基于我在关于爪子内峰值检测的问题上收到的答案,我希望有更先进的解决方案来对爪子进行分类.特别是因为每个单独的爪子的压力分布和其进展是不同的,几乎像指纹.我希望有一种方法可以使用它来聚集我的爪子,而不是按照发生的顺序对它们进行排序.

替代文字

所以我正在寻找一种更好的方法来用相应的爪子对结果进行排序.

对于接受挑战的任何人,挑选了一个包含所有切片阵列的字典,其中包含每个爪子的压力数据(通过测量捆绑)和描述其位置的切片(板上和时间上的位置).

为了澄清: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 image-processing

120
推荐指数
1
解决办法
1万
查看次数

获取2D数组中局部最大值的坐标超过特定值

from PIL import Image
import numpy as np
from scipy.ndimage.filters import maximum_filter
import pylab

# the picture (256 * 256 pixels) contains bright spots of which I wanna get positions
# problem: data has high background around value 900 - 1000

im = Image.open('slice0000.png')
data = np.array(im)

# as far as I understand, data == maximum_filter gives True-value for pixels
# being the brightest in their neighborhood (here 10 * 10 pixels)

maxima = (data == maximum_filter(data,10))
# How can …
Run Code Online (Sandbox Code Playgroud)

python numpy image scipy

23
推荐指数
3
解决办法
3万
查看次数

Python - 使用matplotlib.pyplot的动画

如何使用流行的matplotlib库创建动画图表?我对GIF动画特别感兴趣.

python matplotlib

22
推荐指数
3
解决办法
4万
查看次数

我怎样才能加快动画效果?

我正在尝试创建我的爪子数据的Matplotlib动画,在那里你可以看到整个压力板上的压力分布随着时间的推移(250x帧的256x64传感器).

在Matplotlib自己的网站上找到了一个有效的例子,并设法让它处理我自己的数据.然而,'动画'非常慢,我不知道如何加快速度.

这是一个gif Joe Kington 在另一个答案中做出的一个例子,它是关于它显示的速度.考虑到测量是在125 Hz下进行的,这使得测量看起来非常慢.如果它以30-60 fps运行,它可以在4或8秒内运行,而不是当前的20+.

在此输入图像描述 在此输入图像描述

我不介意使用我需要的任何工具来完成工作,只要有一些好的文档来弄清楚如何做到这一点.

所以我的问题是:我怎样才能加快这些动画的速度?

我已经实现了Ignacio的建议来放入t.Start(1),但是当图如此大时它只能"正常"运行:

在此输入图像描述

class PlotFigure(Frame):
    """ This class draws a window and updates it with data from DataCollect
    """
    def __init__(self):
        Frame.__init__(self, None, -1, "Test embedded wxFigure")
        #Varying the size of Figure has a big influence on the speed            
        self.fig = Figure((3,3), 75) 
        self.canvas = FigureCanvasWxAgg(self, -1, self.fig)
        EVT_TIMER(self, TIMER_ID, self.onTimer)

    def init_plot_data(self):
        self.datagen = DataCollect(array3d)
        self.axes = self.fig.add_subplot(111)
        self.axes.imshow(self.datagen.next().T)

    def …
Run Code Online (Sandbox Code Playgroud)

python animation

17
推荐指数
1
解决办法
9710
查看次数

图像/视频处理选项

我有一个12伏的小型相机,放在一个蜂箱内.它用红外LED点亮(蜜蜂看不到红外线).它沿着电线向我的小电视监视器发送一个简单的NTSC信号.这让我可以看到蜂巢的内部,而不会打扰蜜蜂.

女王背后有一个圆点,当她在框架中时非常明显.

我希望有一些处理信号的东西,以便在皇后在帧中时进行注册.这不一定非常准确.不是处理视频,而是每隔10秒拍摄一次图像并查看是否存在一定量的亮度(表示女王在帧中)也是如此.

这很有用,因为它可以帮助养蜂人知道女王是否还活着(如果她没有出现好几天就可能意味着什么是错的).

我很想听听有关处理此视频的廉价方法的建议,特别是在低功耗的情况下.覆盆子?Arduino的?

相机示例: 这里

示例视频(帧中没有女王): 这里

python arduino

12
推荐指数
1
解决办法
952
查看次数

在使用Python的单色图像的blob周围的矩形边界框

我有几个单色图像(黑色和白色而不是灰度),有一些奇形怪状的物体.我正在尝试使用python27,PIL,scipy&numpy以及以下方法提取每个对象:

  1. 在每个连接对象周围安装边界框
  2. 为每个对象/边界框"提取"每个对象作为数组

我看过http://www.scipy.org/Cookbook/Watershedhttp://scikits-image.org/docs/dev/auto_examples/plot_contours.html这些确实有效,但我特别喜欢希望边界框是矩形的,以确保任何"略微断开"的位都包含在边界框中.理想情况下,为了处理断开的位(例如左下方的blob),我会有某种阈值控制.关于什么工具箱最适合这个的任何想法?

无界的形象 图像边界的例子

python numpy image-processing scipy python-imaging-library

7
推荐指数
1
解决办法
5310
查看次数

用于图像处理的PHP或Python?

我正在写一个图像处理应用程序.我只是想知道哪种编程语言最合适.Python或PHP.这个过程是基于系统而不是基于Web的,所以我只是在考虑Python是否可以提供更多帮助.

让我知道你的想法!

php python image-manipulation image image-processing

2
推荐指数
1
解决办法
1937
查看次数

Numpy PIL Python:在空白上裁剪图像或使用直方图阈值裁剪文本

我将如何找到下图中数字周围空白区域的边界框或窗口?:

原始图片:

在此输入图像描述

高度:762像素宽度:1014像素

目标:

类似的东西:{x-bound:[x-upper,x-lower], y-bound:[y-upper,y-lower]}所以我可以剪切到文本并输入tesseract或一些OCR.

尝试:

我曾想过将图像分割成硬编码的块大小并随机分析,但我认为它太慢了.

示例代码使用pyplot改编自(使用python和PIL如何获取图像中的文本块?):

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
im = Image.open('/home/jmunsch/Pictures/Aet62.png')
p = np.array(im)
p = p[:,:,0:3]
p = 255 - p
lx,ly,lz = p.shape

plt.plot(p.sum(axis=1))
plt.plot(p.sum(axis=0))

#I was thinking something like this 
#The image is a 3-dimensional ndarray  [[x],[y],[color?]]
#Set each value below an axes mean to 0
[item = 0 for item in p[axis=0] if item < p.mean(axis=0)]

# …
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib python-imaging-library

2
推荐指数
1
解决办法
2831
查看次数