【发布时间】:2010-11-29 18:23:37
【问题描述】:
===已解决===
感谢您的建议和 cmets。通过研究Beginning Python Visualization book(第 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 x 3,对应的 3 像素高 x 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]])
这是我将要使用的图片中的一部分。
screenshot http://img43.imageshack.us/img43/2327/particles.png
【问题讨论】:
-
简单的对象识别对我来说听起来很矛盾。
-
你有什么替代建议?
-
请不要在您的问题中说“已解决”。要么接受最佳答案,要么回答您自己的问题并接受。
标签: python image-processing computer-vision pattern-recognition