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 Farley和Zachary 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)
这是我要使用的图像的一部分.
扫描每个方块(例如从左上角,从左到右,从上到下)
当你击中蓝色方块时,然后:
一个.将此方块记录为新对象的位置
湾 找到所有其他连续的蓝色方块(例如,通过查看此方块的邻居,以及这些邻居的邻居等)并将它们标记为同一对象的一部分
继续扫描
当你找到另一个蓝色方块时,在进入第2步之前测试它是否是已知对象的一部分; 或者在步骤2b中,在将其与对象关联后擦除任何方块