简单的物体识别

Gök*_*ver 6 python pattern-recognition image-processing computer-vision

===解决===

感谢您的建议和意见.通过使用Beginning Python Visualization一书(第9章 - 图像处理)中给出的flood_fill算法,我实现了我想要的.我可以计算对象,为每个对象获得封闭的矩形(因此高度和宽度),最后可以为每个对象构造NumPy数组或矩阵.

虽然它不是一种优化的方法,但却能满足我的需求.我使用的源代码(lab2.py)和png文件(lab2-particles.png)已放在http://code.google.com/p/ccnworks/source/browse/#svn/trunk/AtSc450下.

您需要安装NumPy和PIL,并使用matplotlib查看直方图.代码的核心位于objfind函数中,其中发生主递归对象搜索操作.

进一步更新:

SciPy的ndimage.label()也完全符合我的要求.

来自NumPy和SciPy邮件列表的David-Warde FarleyZachary Pincus的欢呼声将这一点直接指向我的眼睛:)

=============

你好,

我有一个图像,其中包含由粒子光谱仪测量的冰粒的阴影.我希望能够识别每个对象,以便我以后可以在计算中进一步分类和使用它们.

从本质上讲,我愿意做的是简单地实现一个模糊选择工具,我可以简单地选择每个实体.

我怎么能轻松解决这个问题?(最好使用Python)

谢谢.

注意:在我的问题中,我将每个特定的连接像素称为对象或实体.我打算提取它们并创建NumPy数组表示,如下所示.(这里我使用左上角的物体;如果存在一个像素,则使用1,如果不使用0的话.这个物体的形状是3乘3,相应地是3个像素高度乘以3个像素宽度.这些是真实冰粒在2D域上的投影,假设它们是球形和等效半径是(高度+宽度)/ 2,后来一些缩放 - 从像素到实际尺寸和体积计算将遵循)

import numpy as np

np.array([[1,1,1], [1,1,1], [0,0,1]])

array([[1, 1, 1],
       [1, 1, 1],
       [0, 0, 1]])
Run Code Online (Sandbox Code Playgroud)

这是我要使用的图像的一部分.

截图http://img43.imageshack.us/img43/2327/particles.png

Chr*_*isW 5

  1. 扫描每个方块(例如从左上角,从左到右,从上到下)

  2. 当你击中蓝色方块时,然后:

    一个.将此方块记录为新对象的位置

    湾 找到所有其他连续的蓝色方块(例如,通过查看此方块的邻居,以及这些邻居的邻居等)并将它们标记为同一对象的一部分

  3. 继续扫描

  4. 当你找到另一个蓝色方块时,在进入第2步之前测试它是否是已知对象的一部分; 或者在步骤2b中,在将其与对象关联后擦除任何方块


kwa*_*ord 2

OpenCV有一个您可能会觉得有用的 Python 界面。