2010-01-02 72 views
1

基本上,假设我有一个指纹。我知道我的图像的维度,并且我知道指纹在白色背景上是黑色的,或者在黑色背景上是绿色的或类似的。如何从图像中提取背景?

有没有办法只处理分隔图像的部分,在这种情况下,指纹?我正在试图做的基本上是这样的:

1)划定指纹
2)提取重要的点,比较其他的指纹
3)发现,以前有自己的点以外的指纹数据库的最佳匹配提取

我已经有方法2和3,所以现在我只需要分隔图像。

编程语言必须是Ruby,Java或C++。如果我必须使用C++,那么Ruby首选,然后是Java,并且上帝会帮助我。我没有任何图像处理的经验,但我想用多种常用格式(如jpg,gif,png)来做到这一点,如果可能的话。

+0

这是一个大难题。要么你会找到一个包来为你做,否则C++是你最担心的问题。 – bmargulies 2010-01-02 15:39:50

回答

1

我认为最好的办法是将边缘检测过滤器应用到您的图像。

维基百科(article)建议的方法可能有些,但是没有一个方法是微不足道的,因为它们在渐变或内核上工作。您应该检查Canny边缘检测,应该足够直接执行:tutorial

在任何情况下,如果你想避免深入实施的细节,你应该使用OpenCV这是一个计算机视觉库,能够以简单的方式做这些事情。您可以在C++和Java中使用它,但我认为也提供了Ruby的包装器。 This是一个使用Canny算法库的简单示例。

编辑:其实我的答案涵盖了2-3点,所以我想知道你的意思是通过分隔图像吗?想想如果你想比较不同的指纹,也必须考虑缩放或旋转的事实:你需要一个模糊比较器..也许你应该在图像的快速傅里叶变换版本上工作,以更好的方式处理这些事情。

0

一个简单的方法可以是使用门槛,如:

将您的图像灰度 - 让你在白色的有指纹的黑色。

查找获取大部分指纹的阈值。

使用open操作(http://en.wikipedia.org/wiki/Mathematical_morphology)去除噪音。 (用几次扩张实验)

找到图像的重心(x,y)和标准偏差(vx,vy)。

在框:

[X-2vx,γ-2vy], [X-2vx,Y + 2vy], [X + 2vx,Y + 2vy], [X + 2vx, y-2vy]

您会发现95.4%的像素 如果您有很多异常值,您可以缩小框以查找其中的实际最大和最小像素。 使用框从原始图像剪辑。

这是简单的方法,可能适合您的情况:)